2010-01-28 6 views
74

Quelqu'un at-il réussi à mettre à jour/installer les plates-formes Android SDK sur un serveur Linux sans tête? Tout ce que j'ai eu est l'erreur suivante:"android update sdk" sur headless linux

Il semble que l'action "update sdk" n'est pas supportée?

~/android-sdk-linux_86/tools$ ./android --verbose update sdk 
No command line parameters provided, launching UI. 
See 'android --help' for operations from the command line. 
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3550 or swt-pi-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.gtk.OS.<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.sdkuilib.internal.repository.UpdaterWindowImpl.open(UpdaterWindowImpl.java:93) 
     at com.android.sdkuilib.repository.UpdaterWindow.open(UpdaterWindow.java:110) 
     at com.android.sdkmanager.Main.showMainWindow(Main.java:281) 
     at com.android.sdkmanager.Main.doAction(Main.java:251) 
     at com.android.sdkmanager.Main.run(Main.java:92) 
     at com.android.sdkmanager.Main.main(Main.java:81) 

Mise à jour: La question a été posée il y a un moment où la mise à jour sans tête n'a pas été prise en charge. Il est maintenant possible de faire juste android update sdk --no-ui. Merci les amis!

+3

double possible (http://stackoverflow.com/questions/ 4681697/est-il-un-moyen-d'-automatiser-le-android-sdk-installation) –

Répondre

3

Oui, cela fonctionne mais vous avez besoin des bibliothèques GUI installées et vous avez besoin que votre DISPLAY soit défini sur le serveur X que vous souhaitez afficher. Je l'ai maintenant travailler sur CentOS 5.4 et j'ai dû utiliser l'option d'installation "Server - GUI" vers "Server". Ensuite, j'utilise simplement "ssh -X" du système où je veux l'afficher.

+0

pouvez-vous fournir un exemple plus concret? – Matthias

7

Je viens de rencontrer le même problème. J'ai trouvé une solution de contournement cependant.

Le premier est un cop-out: Téléchargez les plates-formes sur un système en-tête et copiez simplement les sous-répertoires de la plateforme dans votre répertoire android sdk/platform. Si, comme moi, vous ne disposez pas d'un accès immédiat à un autre environnement de développement Android, vous pouvez accéder aux archives du SDK de Google et télécharger l'un des autres SDK qui incluaient les plates-formes. Cela signifie que vous ne pouvez développer que pour Android 1.1 et 1.5 cependant.

Le téléchargement pour obtenir les systèmes Linux est leur Android 1.5 r3. Bien sûr, les pages de téléchargement sdk de google ne sont pas compatibles avec le lynx, donc j'ai dû obtenir le lien direct d'un autre système d'interface graphique.

wget http://dl.google.com/android/archives/android-sdk-linux_x86-1.5_r3.zip 

Ensuite, il est tout simplement une question de décompressé l'archive, et déplacer la plate-forme sibdirs à votre plate-forme plus récente SDK dir. Cela crée un AVD pour la plate-forme 1.5 avec le nom et le répertoire spécifiés. Notez que le répertoire avd ne devrait pas exister. Si vous voulez remplacer, ajoutez --force à la commande.

En arrivant à ce stade, une plate-forme est installée et crée un AVD. Malheureusement, essayer de construire a échoué à ce stade pour moi parce que je cours un serveur 64 bits, et google ne libère que des outils 32 bits.

J'ai trouvé une solution pour cela dans la réponse acceptée de this stackoverflow question et utilisé sudo apt-get install ia32-libs pour permettre la possibilité d'exécuter les outils 32 bits. Ensuite, vous devriez pouvoir utiliser l'outil android sur la CLI pour convertir un projet eclipse (pour 1.5 ou moins) pour avoir un système de construction de fourmis, ou vous pouvez le faire créer un nouveau projet pour que vous puissiez commencer à travailler sur.

Espérons que cela aide!

3

Je viens de créer un petit outil de ligne de commande qui effectue la mise à jour dans n'importe quel environnement (GUI ou non-GUI). Je n'ai pas eu l'occasion de le tester intensivement, mais pour autant que je sache, il fait ce qu'il devrait faire. L'outil de ligne de commande met à jour un SDK Android de base préinstallé avec toutes les plateformes, add-ons, extras, docs, échantillons et outils actuellement disponibles. Cela devrait suffire pour un serveur de build (j'en ai besoin pour mon installation Hudson CI avec Maven).

S'il vous plaît allez ici pour plus de détails:

http://code.google.com/p/android-sdk-tool

75

Vous pouvez utiliser l'option --no-ui:

android update sdk --no-ui 

Si vous J'aimerais l'automatiser, vous pouvez accepter toutes les licences en utilisant l'outil expect avec ce hack (l'option --accept-license actuellement pas pleinement intégré dans l'outil android): [? Est-il possible d'automatiser l'installation android sdk]

expect -c ' 
set timeout -1; 
spawn android - update sdk --no-ui; 
expect { 
    "Do you accept the license" { exp_send "y\r" ; exp_continue } 
    eof 
} 
' 
+9

pour accepter la licence automatiquement, la prochaine version va ajouter un drapeau' --accept-license'. En attendant, vous pouvez "echo" y "| android update sdk --no - ui' – Snicolas

+3

il n'y a pas --accept-license pour le moment :( – x2on

+0

@Snicolas avez-vous une source pour cela? Les références que j'ai vu le faire apparaître pour exiger un numéro de licence spécifique en tant que paramètre , et probablement être pour un usage interne. Aimerait avoir tort ... – mateor