2015-09-07 8 views
11

Sto tentando di eseguire Android sdk su una casella che deve avere noexec su /tmp.Come installare manualmente le librerie java e mantenere/tmp come noexec?

Potrei indicare java tmp come un altro posto in cui posso eseguire exec, ma ciò annullerebbe lo scopo della polizia che richiede noexec in tmp. Quindi non voglio farlo ancora.

Volevo installare correttamente le librerie che sdk richiede ma il mio java è arrugginito.

Quando provo a farlo funzionare, ottengo:

$ 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) 

Il mio primo tentativo per aggirare questo era:

$ 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) ... 

Ma ancora ottengo lo stesso errore. Ciò significa che il programma non cerca le librerie predefinite ma cerca intenzionalmente di usare qualcosa che decomprime in/tmp? O java decomprimerà un jar sempre in/tmp, e proverai ad eseguirlo da lì, e non c'è nulla che io possa fare?

MODIFICA: Per cancellare che la causa è noexec. Se eseguo l'applicazione con -Djava.io.tmpdir=Android/tmp, allora tutto funziona. E ho il seguente contenuto nella nuova directory tmp:

Android/tmp/ 
└── swtlib-64 
    ├── libswt-gtk-3550.so 
    └── libswt-pi-gtk-3550.so 

Edit 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... 
+0

Cosa ti ha dato l'idea che '/ tmp' sia coinvolto? – Siguza

+0

@Siguza che è la ragione di tale errore. se lo rintracciare è dove mi ha preso. posso aggirare questo errore rimuovendo 'noexec' o impostando' java.io.tmpdir =/home/me/tmp' – gcb

+0

Questo era qui prima: https://stackoverflow.com/questions/3344903/problem-launching- android-avm-sdk-gui-using-the-tools-android-eseguibile-in-the, anche se il vero motivo per cui l'SDK di Android copia le librerie SWT in '/ tmp' è ancora un mistero. – dhke

risposta

0

Credo che se si cambia la cartella di strumenti SDK di Android (in/opt) per essere scrivibile da voi utilizzando chown, quindi la decompressione avverrà all'interno della cartella sdk. Puoi farlo creando un gruppo "androidsdk".

+0

la directory SDK è già scrivibile. Ancora non ho idea del perché sulla terra java/l'applicazione tenti di decomprimere le librerie in tmp invece di usare le stesse identiche versioni prontamente disponibili sul sistema ... – gcb

Problemi correlati