вторник, 26 ноября 2013 г.

Android устройства и OpenSuse 12.3

Добрый день.
Похоже настало время заняться разработкой под Android. А это значит, что на компьютер с установленным OpenSuSe 12.3 необходимо установить средства разработки и отладки. Виртуальная машина, которая поставляется со стандартным SDK не тянет OpenGL, а значит отладку придется выполнять либо на виртуальном устройстве от http://www.genymotion.com/ , либо на физическом устройстве, коих у меня лично уже 2 (смартфон Lenovo A800 и планшет ASUS 302 FHD10).


Несколько слов о красиво допиленной виртуальной машине на базе VirtualBox, который лежит в основе решения Genimotion - ДА это работает. Но по моему очень медленно. Для того, чтобы дождаться загрузки виртуального устройства мне приходилось ждать минут по 15-20, кроме того, пришлось разбираться с ошибкой INSTALL_FAILED_CPU_ABI_INCOMPATIBLE.Возможно кому то еще пригодится пройденный мной путь лечения, он достаточно подробно описан здесь: http://forum.xda-developers.com/showthread.php?t=2528952. Суть лечения заключается в том, что через DRAG-N-DROP в окно машины загружаются недостающие компоненты Android (сначала ARM Translation Installer, а после приложение Google Apps), после чего виртуальная машина становится "новым устройством Android", позволяющим зарегистрироваться в Google и скачать обновления, без которых ошибка и возникала. 
Теперь несколько слов об использовании физических устройств для запуска и отладки программ. В Linux компонент Google USB Driver имеет статус "Not compatible with Linux". При этом, в Android SDK подключенные устройства отображаются как ????????? и ничего запустить на них невозможно. Проблема в одном - доступе к устройству. Исправляется созданием файла /usr/lib/udev/rules.d/51-android.rules c правами доступа 644 (требуются права root).

Содержимое файла:
# Android devices - UDEV Rule                                                                                                                                         
# For Lenovo A800                                                                                                                     
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="7435", SYMLINK+="libmtp-%k", MODE="0666", GROUP="users"
# For ASUS A302 FHD idVendor=0b05, idProduct=521f
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="521f", SYMLINK+="libmtp-%k", MODE="0666", GROUP="users"


Несколько слов откуда взять атрибуты idVendor и idProduct - их покажет команда dmesg, запущенная из консоли с подключенным устройством android в режиме отладки под USB.
В моем случае ценная информация содержалась в следующем участке вывода:

[ 6495.233026] usb 1-1: new high-speed USB device number 5 using ehci_hcd
[ 6495.350394] usb 1-1: New USB device found, idVendor=0b05, idProduct=521f
[ 6495.350399] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[ 6495.350402] usb 1-1: Product: Android
[ 6495.350405] usb 1-1: Manufacturer: Android

Вот отсюда нужно взять idVendor=0b05, idProduct=521f и корректно внести в файл 51-android.rules. Все - теперь устройство видится и на нем можно запускать отладку из SDK. 
На этом пока все.