Проблема с запуском графического интерфейса Android AVM/SDK с помощью исполняемого файла tools/android в Android SDK. Убунту 10.04, i686

Привет, я только что установил Android SDK вместе с Eclipse 3.5 на свой i686 Thinkpad T60 под управлением Ubuntu 10.04 (Lucid). (Eclipse был установлен через synaptic, то есть пакет из репозитория.) Я установил надстройку eclipse, и все в конце Eclipse кажется прекрасным. Я также поместил каталог инструментов android-sdk в свой пользовательский PATH. Теперь запуск tools/android без каких-либо аргументов должен вызвать графический интерфейс диспетчера SDK и AVD, но вместо этого я получаю следующую ошибку:

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.showMainWindow(Main.java:265)
    at com.android.sdkmanager.Main.doAction(Main.java:249)
    at com.android.sdkmanager.Main.run(Main.java:94)
    at com.android.sdkmanager.Main.main(Main.java:83)

Странно то, что у меня определенно установлены все необходимые компоненты, sun-java6-jdk и open-java6-jdk, и я пытался переключаться между ними. Также, если я смотрю в Synaptic, у меня установлена ​​libswt-gtk-3.5java. Также менеджер AVM/SDK запускается нормально, когда я запускаю его с помощью eclipse.

(Вы можете задаться вопросом, почему меня это волнует, но мне нравится работать из командной строки и рассматривать возможность использования emacs в качестве моей IDE, а не Eclipse.)

Если кто-нибудь знает, как я могу это исправить, пожалуйста, дайте мне знать.


person zbeekman    schedule 27.07.2010    source источник
comment
Эй, отметьте ответ Барта как принятый! :) Оно работает.   -  person Eric Mill    schedule 24.06.2013


Ответы (8)


(скопировано с Ubuntuforums http://ubuntuforums.org/showthread.php?t=1540054 )

У меня была такая же проблема через 12 месяцев. Я обнаружил, что это произошло потому, что я сделал каталог /tmp «noexec», как только я сделал его исполняемым, все было в порядке.

sudo mount -o remount,exec /tmp

Надеюсь, это поможет кому-то.

person Bart    schedule 29.08.2011
comment
Спасибо, что помогли мне! мне потребовалось некоторое время, чтобы добраться до вашего ответа - person charroch; 06.09.2011
comment
Вауза. Это волшебное заклинание Гарри Поттера. Это заставило DDMS запускаться из командной строки (а не через eclipse) в моей установке Kubuntu 11.10 AMD64. Спасибо. - person Garnet Ulrich; 13.05.2012
comment
прямо там! еще одна причина ненавидеть java еще сильнее, чем раньше... она пытается выполнить /tmp/swtlib-32/libswt-gtk-3550.so пойди разберись... поэтому, если вам действительно нужен RO /tmp (а вы должны), просто создайте символическую ссылку на этот каталог в другом месте... - person gcb; 09.11.2012
comment
Я не помню, чтобы когда-либо делал это. Я думаю, что это может быть по умолчанию в Linux Mint. - person Paul Brannan; 31.05.2013
comment
Да, Ubuntu никогда не доставлял мне этой проблемы — только Linux Mint. Я надеюсь, что спрашивающий пометит ваш ответ как принятый когда-нибудь! - person Eric Mill; 24.06.2013
comment
да .. это было действительно удобно .. большое спасибо :) - person Teody C. Seguin; 27.01.2014

В дополнение к тому, что хорошо и правильно сказал пользователь Bart, предлагаю обратить внимание на подсказку ниже:

Продвинутые пользователи Linux или гики чаще сталкиваются с этой проблемой. «Твик» (обычно для увеличения скорости), примененный в /etc/fstab, создающий /tmp как noexec, вызовет эту проблему. Просто откройте fstab и измените запись, как показано ниже:

судо gedit /etc/fstab

Если у вас есть что-то подобное, просто прокомментируйте строку или измените содержимое:

tmpfs /tmp tmpfs defaults,noexec,nodev,nosuid 0 0

TO:

tmpfs /tmp tmpfs по умолчанию,nodev,nosuid 0 0

person Erick Will    schedule 09.01.2013

Посмотри на

android <command> --no-ui

Это вообще не требует SWT/GTK.

person anselm    schedule 15.02.2011

Это старый вопрос, но я хочу предложить менее «радикальный» ответ...

Если вы не хотите менять монтирование вашей файловой системы, альтернативой является изменение сценария запуска инструментов android, чтобы явно указать временный каталог, который должна использовать Java.

например в каталоге android-studio/sdk/tools, прямо в конце файла скрипта android есть команда, которая выполняет java:

exec "$java_cmd" \
    -Djava.io.tmpdir=/home/me/android-studio/.tmp \
    -Xmx256M $os_opts $java_debug \
    -Dcom.android.sdkmanager.toolsdir="$progdir" \
    -classpath "$jarpath:$swtpath/swt.jar" \
    com.android.sdkmanager.Main "$@"

В этом примере я использую «/home/me/android-studio/.tmp», но, конечно, вы можете изменить это на то, что хотите.

К сожалению, это изменение будет перезаписано, если вы обновите свои инструменты Android, поэтому вам придется повторно применять его каждый раз при обновлении. Вместо этого вы могли бы export указать его в своем профиле как глобальное свойство среды (для всех приложений Java) вместо редактирования этого скрипта.

person caprica    schedule 28.10.2014

я также получил эту проблему. Я решил это, изменив владельца домашнего каталога android sdk (который я установил в «/ opt») на меня. Это было сделано с чем-то вроде:

sudo chown -R <username> /opt/android-sdk-linux 

И это работало нормально!

person godidier    schedule 09.08.2013

просто лучший способ показать код.. считайте это комментарием от ответа @Bart...

по какой-то причине он пытается запустить swt-lib из /tmp. это неправильно и глупо, и я понятия не имею, кто здесь виноват (андроид или сама библиотека Java)

поэтому, если вы не хотите перемонтировать /tmp как RW, просто создайте символическую ссылку на этот каталог swtlib в другом месте. Я переместил его в каталог Android.

(0) ~
hobo$ mv /tmp/swtlib-32 android/

(0) ~
hobo$ ln -sf ~/android/swtlib-32 /tmp/swtlib-32

(0) ~
hobo$ android/android-sdk-linux/tools/android 
person gcb    schedule 09.11.2012

Просто удалите содержимое tmp dir.

sudo rm -rf /tmp/*

После этого попробуйте запустить менеджер Android SDK. Это сработало для меня.

person Arunkumar    schedule 17.02.2016

Если вы хотите запустить sdk-manager через командную строку, другой вариант — попробуйте запустить:

> sudo android sdk

Это будет работать в режиме администратора, предоставляя вам необходимые разрешения

person Androidme    schedule 18.08.2017