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:projectstcsmb_client_androidoutartifacts>apk2barVerifier mib_release_signed.apk
D:projectstcsmb_client_androidoutartifacts>set LIB=C:softblackberryCommandLineTools_1.5blackberry.tools.SDKbin\..lib
D:projectstcsmb_client_androidoutartifacts>java -Xmx512M -cp "C:softblackberryCommandLineTools_1.5blackberry.tools.SDKbin\..libBARPackager.jar;C:softblackberryComma
ndLineTools_1.5blackberry.tools.SDKbin\..libApk2Bar.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: <b>[5]=1; [4]=0; [3]=0; [2]=0; [1]=2</b>;
Impact Legend: [5]=Severe; [4]=High /context; [3]=Medium /context; [2]=Medium-low /context; [1]=Minor;
Верификатор разделяет проблемы по группам важности, их всего 5. Если есть какие-то жалобы, принадлежащие к группе с приоритетом 2 и выше, то приложение считается несовместимым и требует доработки. В нашем случае «несовместимыми с жизнью» оказались Google Maps и некоторые нативные библиотеки, в частности, Bump. Было решено удалить эти библиотеки из BlackBerry-версии приложения. После этого еще раз запускаем утилиту.
D:projectstcsmb_client_androidoutartifacts>java -Xmx512M -cp "C:softblackberryCommandLineTools_1.5blackberry.tools.SDKbin\..libBARPackager.jar;C:softblackberryComma
ndLineTools_1.5blackberry.tools.SDKbin\..libApk2Bar.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: <b>[5]=0; [4]=0; [3]=0; [2]=0; [1]=2</b>;
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 <PIN> -storepass <csk password> <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%AppDataLocalResearch In Motion
и надежно их сохранить
Выводы
Плюсы:
- возможность быстро получить работоспособную версию приложения под новую ОС с минимальными трудозатратами.
Минусы:
- ограниченный функционал по сравнению с оригинальным Android-приложением (вырезанные карты, библиотеки и вызовы других приложений);
- скорость выполнения (возможно, это проблема связана с мощностью тестового устройства, но, если сравнивать со скоростью работы на Android-устройстве, приложение работает медленнее);
- чужеродный для BlackBerry UI и, как следствие, негативный user experience (приложение и особенно навигация в нем выглядят хуже по сравнению с нативными приложениями BlackBerry).
Автор: TheDimasig