java - 如何手动安装 java 库并将/tmp 保持为 noexec?

标签 java android linux

我正在尝试在需要在 /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/

相关文章:

android - 无法将 POJO 写入 Firebase 数据库

java - random.longs(ARRAY_SIZE, 0, 100000) 返回长流,我想将此流转换为长数组。怎样才能做到呢?

java - 将 EJB3 与 Spring 集成

android - onCreateLoader 阻塞了 UI 线程

android - 证书指纹(SHA1)我应该用发布证书更改吗?

linux - 在 BASH 中使用 mv 将时间戳添加到文件名

c - 使用 for 循环创建多个线程时的奇怪行为

无法解析共享库中的符号,但未给出符号名称

Java:计算 java.util.BitSet 中设置的位数

java - java中如何实现多线程定时器任务?