Pull to refresh
289.81
TINKOFF
IT’s Tinkoff — просто о сложном

Портирование Android приложения на BlackBerry 10

Reading time 6 min
Views 16K
30 января компания Research In Motion представила смартфоны на новой ОС BlackBerry 10. Приложений в BlackBerry App World пока существенно меньше, чем в Google Play или App Store, например. Можно успеть занять нишу, выпустив версию своего замечательного приложения и под эту ОС. Тем более, что это не требует больших трудозатрат.

Итак, как становится ясно из информации для разработчиков, существует несколько способов создания приложений под BlackBerry 10:
  • нативные приложения на C/C++;
  • веб-приложения на HTML5;
  • Adobe AIR и ActionScript;
  • Android API 2.3.3 runtime;
  • Java BlackBerry runtime.

Для превращения Android-приложения в BlackBerry-версию также существует несколько способов: использование re-packaging tools, для переупаковки уже имеющегося apk, или использование непосредственно исходников Android-приложения для более вдумчивого и тщательного портирования с последующей сборкой под BlackBerry с помощью BlackBerry Native SDK. Рассмотрим первый вариант, как наиболее быстрый и простой.



Портирование


Первым делом установим Command-line tools. Конечно, можно обойтись и онлайн-инструментом, но каждый раз нажимать кнопочки в браузере не очень удобно. Можно избавить себя от мучений, написав пару bat-файлов, используя инструменты из вышеупомянутых Command-line tools. Кстати, помимо использования консольных утилит или онлайн-инструментов, существует также возможность воспользоваться соответствующим плагином для Eclipse.

Собираем apk-файл и прогоняем его через верификатор, который подскажет нам, что не так с приложением. Запускаем:
apk2barVerifier <input.apk>
Вывод утилиты будет выглядеть примерно следующим образом:
D:\projects\tcs\mb_client_android\out\artifacts>apk2barVerifier mib_release_signed.apk

D:\projects\tcs\mb_client_android\out\artifacts>set LIB=C:\soft\blackberry\CommandLineTools_1.5\blackberry.tools.SDK\bin\\..\lib

D:\projects\tcs\mb_client_android\out\artifacts>java -Xmx512M -cp "C:\soft\blackberry\CommandLineTools_1.5\blackberry.tools.SDK\bin\\..\lib\BARPackager.jar;C:\soft\blackberry\Comma
ndLineTools_1.5\blackberry.tools.SDK\bin\\..\lib\Apk2Bar.jar" net.rim.tools.apk2bar.Apk2BarVerifier mib_release_signed.apk
Apk2Bar /Verifier version 1.5.0
Research In Motion Ltd ? 2012 All rights reserved.
[mib_release_signed.apk]:(res/drawable-hdpi/logo_launcher.png) found an alternate icon with better size:impact=1
[mib_release_signed.apk]:(AndroidManifest.xml) uses-permission: CONTROL_LOCATION_UPDATES:impact=1
[mib_release_signed.apk]:(AndroidManifest.xml) native-code: armeabi:impact=5
[mib_release_signed.apk]:Summary: [5]=1; [4]=0; [3]=0; [2]=0; [1]=2;
Summary: [5]=1; [4]=0; [3]=0; [2]=0; [1]=2;
Impact Legend: [5]=Severe; [4]=High /context; [3]=Medium /context; [2]=Medium-low /context; [1]=Minor;

Верификатор разделяет проблемы по группам важности, их всего 5. Если есть какие-то жалобы, принадлежащие к группе с приоритетом 2 и выше, то приложение считается несовместимым и требует доработки. В нашем случае «несовместимыми с жизнью» оказались Google Maps и некоторые нативные библиотеки, в частности, Bump. Было решено удалить эти библиотеки из BlackBerry-версии приложения. После этого еще раз запускаем утилиту.
D:\projects\tcs\mb_client_android\out\artifacts>java -Xmx512M -cp "C:\soft\blackberry\CommandLineTools_1.5\blackberry.tools.SDK\bin\\..\lib\BARPackager.jar;C:\soft\blackberry\Comma
ndLineTools_1.5\blackberry.tools.SDK\bin\\..\lib\Apk2Bar.jar" net.rim.tools.apk2bar.Apk2BarVerifier mib_release_signed.apk
Apk2Bar /Verifier version 1.5.0
Research In Motion Ltd ? 2012 All rights reserved.
[mib_release_signed.apk]:(res/drawable-hdpi/logo_launcher.png) found an alternate icon with better size:impact=1
[mib_release_signed.apk]:(AndroidManifest.xml) uses-permission: CONTROL_LOCATION_UPDATES:impact=1
[mib_release_signed.apk]:Summary: [5]=0; [4]=0; [3]=0; [2]=0; [1]=2;
Summary: [5]=0; [4]=0; [3]=0; [2]=0; [1]=2;
Impact Legend: [5]=Severe; [4]=High /context; [3]=Medium /context; [2]=Medium-low /context; [1]=Minor;

В этот раз осталось только две минорных проблемы, которые пока можно проигнорировать.

Доработка дизайна


После вышеописанных шагов потребовалось внести изменения в дизайн приложения: убрать пункты из меню, разделы из «Платежей», адаптировать баннеры по размеру экрана. Основные изменения коснулись главной страницы. К сожалению, графические материалы портированного приложения ведут себя не так предсказуемо, как описано в гайдлайнах. Размеры элементов иногда приходилось подбирать буквально «на ощупь». Часть разделов вынесли в контекстное меню. Но, в целом, с новым главным экраном и с остальными экранами в старом дизайне, приложение выглядит не хуже версии для Android.



Подписывание и тестирование


Для того, чтобы подписать приложение, нам понадобятся сертификаты. Идем на сайт и оставляем заявку на их получение. Обычно вся процедура получения занимает около двух часов, так что придется немного подождать. Если все сделано правильно, то на почту придут два файла вида client-RDK-123456.csj и client-PBDT-123456.csj. RDK файл используется для подписывания приложения, PBDT — для создания debug-токена.

Следующий шаг — установка и регистрация ключей в системе:
blackberry-signer -csksetup -cskpass <create_a_password>

blackberry-signer -register -csjpin -storepass <RDK_CSJFile> <PBDT_CSJFile>

Если и здесь все выполнено правильно, то на почту опять придут два письма с подтверждением, что ключи зарегистрированы. Далее создаем debug-сертификат, который необходим, если мы собираемся устанавливать приложение на устройство. При наличии эмулятора можно обойтись без него.

blackberry-keytool -genkeypair -keystore <output_file.p12> -storepass <create_a_password> -dname "cn=<company_name>" -alias author


Здесь пришлось потратить некоторое время на банальную ошибку. Обратите внимание на параметр -alias author, author так и следует оставить, не надо его ни на что заменять!

Создаем debug-token для установки на устройство:
blackberry-debugtokenrequest -cskpass <csk_password> -keystore <developer_certificate> -storepass <keystore_password> -deviceId 0x<PIN_tablet> <debug_token_bar_file>

Значение вашего параметра -deviceId можно подсмотреть либо в настройках телефона, либо в BlackBerry Device Manager в трее.

Включаем на устройстве режим разработчика (Settings -> Security -> Development Mode -> Use Development Mode в “On”) и регистрируем токен на устройстве:

blackberry-deploy -installDebugToken <debug_token> -device <IP_address> -password <device_password>

Перепаковываем наше приложение и подписываем debug-token’ом, в качестве параметра -d указываем путь к вышесозданному *.p12 файлу. Повторюсь, что при наличии эмулятора приложение можно не подписывать и параметр -d не указывать:

apk2bar <Android_app_or_folder> [-d [<debug_token>]]

Ну вот и все, приложение готово и подписано. Устанавливаем:

blackberry-deploy -installApp -password <device_password> -device <IP_address> -package <your_app.bar>

Теперь можно запустить приложение, походить по экранам и проверить функциональность. На этом этапе нами была выявлена еще одна проблема, на которую не указал apk2barVerifier на первом шаге. Интенты, вызывающие другие приложения (звонки, сканер QR- и bar-кодов и т.п.), в BlackBerry не работают. Поэтому правим соответствующую функциональность и возвращаемся на шаг с перепаковкой apk.

Для публикации приложения в App World его необходимо подписать продуктовым ключем. Для этого после упаковки bar-файла (apk2bar без параметра -d) необходимо выполнить

blackberry-signer -storepass <store_pass> <your_app.bar>

Вот и все, приложение протестировано и готово к публикации в App World. Да! Созданные сертификаты и ключи необходимо забэкапить или в случае их утери вы не сможете подписывать и выкладывать в стор новые версии приложения. Для этого в Windows 7 необходимо скопировать 3 файла из %HOMEPATH%\AppData\Local\Research In Motion и надежно их сохранить

Выводы


Плюсы:
  • возможность быстро получить работоспособную версию приложения под новую ОС с минимальными трудозатратами.

Минусы:
  • ограниченный функционал по сравнению с оригинальным Android-приложением (вырезанные карты, библиотеки и вызовы других приложений);
  • скорость выполнения (возможно, это проблема связана с мощностью тестового устройства, но, если сравнивать со скоростью работы на Android-устройстве, приложение работает медленнее);
  • чужеродный для BlackBerry UI и, как следствие, негативный user experience (приложение и особенно навигация в нем выглядят хуже по сравнению с нативными приложениями BlackBerry).
Tags:
Hubs:
+4
Comments 21
Comments Comments 21

Articles

Information

Website
www.tinkoff.ru
Registered
Founded
Employees
over 10,000 employees
Location
Россия