我正在尝试在需要在 /tmp
上安装 noexec
的盒子上运行 android sdk。
我可以将 java tmp 指向另一个我可以执行的地方,但这会破坏警察要求在 tmp 中执行 noexec
的目的。所以我现在还不想这样做。
我想正确安装 sdk 所需的库,但我的 java 生锈了。
当我尝试运行它时,我得到:
$ Android/Sdk/tools/android
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.showSdkManagerWindow(Main.java:403)
at com.android.sdkmanager.Main.doAction(Main.java:391)
at com.android.sdkmanager.Main.run(Main.java:151)
at com.android.sdkmanager.Main.main(Main.java:117)
我第一次尝试解决这个问题是:
$ sudo aptitude install libswt-gtk-3-java...
Selecting previously unselected package libswt-gtk-3-jni.
(Reading database ... 199270 files and directories currently installed.)
Preparing to unpack .../libswt-gtk-3-jni_3.8.2-3_amd64.deb ...
Unpacking libswt-gtk-3-jni (3.8.2-3) ...
Selecting previously unselected package libswt-gtk-3-java.
Preparing to unpack .../libswt-gtk-3-java_3.8.2-3_amd64.deb ...
Unpacking libswt-gtk-3-java (3.8.2-3) ...
Setting up libswt-gtk-3-jni (3.8.2-3) ...
Setting up libswt-gtk-3-java (3.8.2-3) ...
但我仍然得到同样的错误。这是否意味着该程序不是在寻找默认库,而是故意尝试使用它在/tmp 上解压的东西?或者 java 是否会始终在/tmp 中解压一个 jar,并尝试从那里运行它,但我无能为力?
编辑:
清除 noexec
是原因。如果我使用 -Djava.io.tmpdir=Android/tmp
运行应用程序,那么一切正常。我在新的 tmp 目录中有以下内容:
Android/tmp/
└── swtlib-64
├── libswt-gtk-3550.so
└── libswt-pi-gtk-3550.so
编辑 2:
$ ANDROID_SWT=/usr/lib/java/
$ ls $ANDROID_SWT/
swt-gtk-3.8.2.jar
$ Android/Sdk/tools/android
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
...same...
最佳答案
我相信如果您使用 chown
将 android sdk 工具文件夹(在/opt 中)更改为可写,那么解包将在 sdk 文件夹中进行。您可以通过创建“androidsdk”组来完成此操作。
关于java - 如何手动安装 java 库并将/tmp 保持为 noexec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443996/