Итак, вы трудились много дней (а может и ночей), и вот ваше первое гибридное мобильное приложение готово. Оно достаточно стабильно, большинство критичных багов закрыто. Остались мелкие, но помня о том, что перфекционизм — зло, вы принимаете волевое решение выложить приложение.
Необходимое условие для этого — наличие подписанного APK файла. Как подписать apk файл, вы узнаете из этой статьи.
Небольшое отступление
Когда мой pet project вплотную приблизился к релизу, я начал искать информацию о том, как быстро и без боли опубликовать приложение. Множество найденных инструкций выглядели простыми. Я выбрал инструкцию авторов фреймворка Ioniс, на котором и разработано приложение. Не все получилось с первого раза, есть несколько особенностей. Процесс подписывания описан в этой статье, важные моменты особо выделены.
Исходные данные
Я предполагаю, что у вас настроено все необходимое для разработки гибридных мобильных приложений с помощью Apache Cordova. Должно быть установлено:
- Apache Cordova
- Java Development Kit
- Android SDK Tools
В качестве имени проекта и приложения используется lcf. Замените на имя своего проекта там, где это необходимо.
Поехали
Для начала нужно создать релизный билд вашего приложения. Но перед этим, давайте убедимся, что все лишние плагины удалены. Например, нам не нужен плагин, который выводит отладочную информацию в консоль. Удалим его:
$ cordova plugin rm cordova-plugin-console
Для генерации релизной сборки под Андроид используем команду build с флагом --release:
$ cordova build --release android
Эта команда создаст неподписанный APK файл в каталоге:
platforms/android/build/outputs/apk
Например, platforms/android/build/outputs/apk/android-release-unsigned.apk. Потом нам понадобится подписать этот файл и запустить утилиту zipalign для оптимизации и подготовки файла для Google Play.
Для подписывания файла нужен сертификат. Создадим его с помощью утилиты keytool, которая включена в JDK:
$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000
Важно
Значение параметра -alias необходимо запомнить, а лучше записать. В примере выше он равен lcf (по первым буквам названия приложения Loyal Client Free). Детали здесь приводить не буду, если будет интересно, напишите в комментарии, я расскажу подробнее.
Алиас используется каждый раз при подписывании* приложения. Чтобы было проще запомнить, в качестве алиаса используйте имя keystore файла, например:
-keystore hello-world.keystore -alias hello-world
-keystore weather-app.keystore -alias weather-app
-keystore todo.keystore -alias todo
* Подписывать приложение нужно при каждом выпуске обновлений
Утилита keytool задает ряд вопросов. Всего их будет 8. Чтобы заранее иметь представление о вопросах и примерных ответах, все они приведены далее, под спойлером.
Здесь необходимо ввести пароль для файла (не менее 6 символов). Введенный пароль нужно записать в надежном месте, он нужен всякий раз при подписывании приложения.
2. Re-enter new password:
Повторный ввод пароля.
3. What is your first and last name?
[Unknown]: Ivan Petrov
Ваше имя и фамилия. Значение в квадратных скобках — это значение по умолчанию.
4. What is the name of your organizational unit?
[Unknown]: IT
Название подразделения вашей компании. Можно оставить пустым, я указываю IT.
5. What is the name of your organization?
[Unknown]: 2developers
Название вашей организации. Укажите, если есть.
6. What is the name of your City or Locality?
[Unknown]: Moscow
Название города
7. What is the name of your State or Province?
[Unknown]: MO
Название области
8. What is the two-letter country code for this unit?
[Unknown]: RU
Код страны. Я указываю RU.
Далее будет предложено проверить введенную информацию:
Is CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU correct?
[no]: y
Подтверждайте, если все верно или нажмите Enter, чтобы ввести еще раз.
В конце появится сообщение об успешной генерации ключа. Будет предложено задать пароль для приватного ключа (если хотите оставить такой же, как и для сертификата — нажмите Enter):
Generating 2 048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10 000 days
for: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU
Enter key password for <lcf>
(RETURN if same as keystore password):
[Storing lcf.keystore]
В текущем каталоге будет создан файл lcf.keystore.
Важно
Созданный файл нужно сохранить в надежном месте. Если вы используете закрытый репозиторий, то файл можно закоммитить вместе с исходными кодами приложения. В общем случае, сертификаты лучше хранить отдельно. В случае утери сертификата вы не сможете выпускать обновления приложения.
Осталось два шага, и вы получите готовый к распространению APK файл. Переходим непосредственно к подписыванию.
Чтобы подписать ваш apk файл, используйте утилиту jarsigner, которая тоже включена в JDK.
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Имя сертификата указывается после параметра -keystore, алиас — после имени файла.
Наконец, для оптимизации apk файла, воспользуемся утилитой zipalign:
$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Последний параметр — это имя файла, который вы будете загружать в Google Play.
Важно.
Утилита zipalign это часть Android SDK Tools и может быть найдена здесь:
/path/to/Android/sdk/build-tools/VERSION/zipalign
Заключение
Теперь у вас есть готовый к распространению apk файл, который можно загрузить в Google Play. Заполняйте описание, определяйте рейтинг своего приложения и смело жмите “Опубликовать”.
Автор: 2developers