使用Android SDK中的tools/android可执行文件启动Android AVM/SDK GUI出现问题。Ubuntu 10.04,i686。

11

你好,我刚刚在我的i686 Thinkpad T60电脑上安装了Ubuntu 10.04(Lucid)系统以及Eclipse 3.5和Android SDK。我是通过软件源安装Eclipse的。我已经安装了Eclipse插件并且Eclipse看起来一切正常。我还将android-sdk工具目录添加到了我的用户路径中。现在启动tools/android而不带参数应该会打开SDK和AVD管理器GUI界面,但是我得到了以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-gtk-3550 or swt-gtk in swt.library.path, java.library.path or the jar file
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
    at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
    at com.android.sdkmanager.Main.showMainWindow(Main.java:265)
    at com.android.sdkmanager.Main.doAction(Main.java:249)
    at com.android.sdkmanager.Main.run(Main.java:94)
    at com.android.sdkmanager.Main.main(Main.java:83)

奇怪的是我确定已经安装了所有的先决条件,sun-java6-jdk和open-java6-jdk,而且尝试在它们之间切换。此外,如果我查看synaptic,我已经安装了libswt-gtk-3.5-java。当我使用eclipse启动AVM/SDK管理器时,它也可以正常启动。

(您可能想知道为什么我关心这个问题,但我喜欢从命令行工作,并考虑使用emacs作为我的IDE,而不是Eclipse。)

如果有人知道如何解决这个问题,请告诉我。


嘿 - 把Bart的答案标记为已接受吧! :) 它有效。 - Eric Mill
8个回答

44

(复制自Ubuntuforums http://ubuntuforums.org/showthread.php?t=1540054)

我在12个月后遇到了同样的问题。我发现是因为我将/tmp目录设置为"noexec",一旦我将其设置为可执行,问题就解决了。

sudo mount -o remount,exec /tmp

希望这能帮助到某些人。

谢谢,这对我很有帮助!花了一些时间才找到你的答案。 - charroch
Wowza。这就是哈利波特的魔法咒语。这使得DDMS可以在我的Kubuntu 11.10 AMD64安装中从命令行运行(而不是通过eclipse)。谢谢。 - Garnet Ulrich
就在那里!比以前更加憎恨Java的另一个原因...它试图执行/tmp/swtlib-32/libswt-gtk-3550.so,想象一下...所以如果你真的需要RO /tmp(而且你应该需要),只需将此目录创建符号链接到另一个地方即可... - gcb
我不记得曾经这样做过。我认为这可能是Linux Mint的默认设置。 - Paul Brannan
1
是的,Ubuntu从来没有给我这个问题 - 只有Linux Mint。希望提问者有一天会将您的答案标记为已接受! - Eric Mill
是的,那真的很方便..非常感谢 :) - Teody C. Seguin

4
此外,除了用户Bart所说的正确内容之外,我建议注意以下提示:
高级Linux用户或极客更经常会遇到这个问题。在/etc/fstab中应用“调整”(通常是为了获得更快的速度),使/tmp成为noexec将导致此问题。只需打开fstab并修改以下条目即可:
sudo gedit /etc/fstab
如果您有像这样的内容,请注释该行或修改其内容:
tmpfs /tmp tmpfs defaults,noexec,nodev,nosuid 0 0
改为:
tmpfs /tmp tmpfs defaults,nodev,nosuid 0 0

3

请看下面的内容:

android <command> --no-ui

这不需要 SWT/GTK。


2

这是一个老问题,但我想提出一个不那么“激烈”的答案...

如果您不想更改文件系统挂载,另一种选择是更改android工具启动脚本,明确指定Java应使用的临时目录。

例如,在android-studio/sdk/tools目录中,在android脚本文件的末尾是执行java的命令:

exec "$java_cmd" \
    -Djava.io.tmpdir=/home/me/android-studio/.tmp \
    -Xmx256M $os_opts $java_debug \
    -Dcom.android.sdkmanager.toolsdir="$progdir" \
    -classpath "$jarpath:$swtpath/swt.jar" \
    com.android.sdkmanager.Main "$@"

在这个例子中,我使用“/home/me/android-studio/.tmp”,但当然你可以根据自己的需要更改它。
不幸的是,如果你更新Android工具,这个更改将被覆盖,所以每次更新后都需要重新应用它。你可以在你的配置文件中将其作为全局环境属性(适用于所有Java应用程序)export,而不是编辑此脚本。

1
我也遇到了这个问题。我通过将安装在“/opt”目录下的Android SDK主目录的所有权更改为我的方式来解决它。 类似以下命令完成此操作:
sudo chown -R <username> /opt/android-sdk-linux 

它运行得很好!


0

只需删除 tmp 目录的内容。

sudo rm -rf /tmp/*

尝试启动Android SDK Manager,然后再试一下。这对我有用。


0

只是一种更好的展示代码的方式.. 将其视为@Bart答案的评论...

由于某些原因,它尝试从/tmp执行swt-lib。这是错误和愚蠢的,我不知道谁是罪魁祸首(Android还是Java库本身)

因此,如果您不想将/tmp重新挂载为RW,请将该swtlib目录链接到其他位置。我将其移动到了android目录。

(0) ~
hobo$ mv /tmp/swtlib-32 android/

(0) ~
hobo$ ln -sf ~/android/swtlib-32 /tmp/swtlib-32

(0) ~
hobo$ android/android-sdk-linux/tools/android 

0
如果你想通过命令行启动SDK Manager,另一个选择是尝试运行:
> sudo android sdk

这将在管理员模式下运行,为您提供所需的权限


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接