Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何手动安装javalibs并将/tmp保持为noexec?_Java_Android_Linux - Fatal编程技术网

如何手动安装javalibs并将/tmp保持为noexec?

如何手动安装javalibs并将/tmp保持为noexec?,java,android,linux,Java,Android,Linux,我正在尝试在一个需要在/tmp上安装noexec的盒子上运行android sdk 我可以指出JavaTMP是我可以执行的另一个地方,但这将破坏警方在tmp中要求noexec的目的。所以我现在还不想这么做 我想正确安装sdk所需的libs,但我的java已经生锈了 当我尝试运行它时,我得到: $ Android/Sdk/tools/android Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-gtk-3550

我正在尝试在一个需要在
/tmp
上安装
noexec
的盒子上运行android sdk

我可以指出JavaTMP是我可以执行的另一个地方,但这将破坏警方在tmp中要求
noexec
的目的。所以我现在还不想这么做

我想正确安装sdk所需的libs,但我的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)
但我还是犯了同样的错误。这是否意味着程序不是在寻找默认的lib,而是有意尝试使用它在/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工具文件夹(in/opt)更改为可写,那么解包将在sdk文件夹中进行。您可以通过创建一个“AndroidDK”组来实现这一点。

是什么让您产生了参与
/tmp
的想法?@Siguza这就是错误的原因。如果我追踪它,那就是它找到我的地方。我可以通过删除
noexec
或设置
java.io.tmpdir=/home/me/tmp
成功地解决这个错误,这是以前的情况:,尽管Android SDK将SWT库复制到
/tmp
的实际原因仍然是个谜。@dhke,这是问原因并解决的(我提到了问题本身的两个解决方案,最后一个几乎与公认的答案相同)。这个问题不一样。我选择了那个应用程序作为一个更大问题的例子。设置
ANDROID\u SWT=/usr/lib
(或者系统
libswt
所在的任何地方)帮助?将库从jar提取到文件系统是一个简单的过程,但通常库会在用户家中结束。还要注意第302行的注释,这让我感到困惑,因为tmp在哪里?SDK目录已经是可写的。仍然不知道为什么java/应用程序会尝试在tmp中解包库,而不是使用完全相同的readil版本在系统上可用的y。。。
$ 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...