Необходимое условие для этого — наличие подписанного 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. Заполняйте описание, определяйте рейтинг своего приложения и смело жмите “Опубликовать”.
Комментарии (13)
NexOtaku
20.03.2017 23:52В принципе инструкция полезная для тех, кто делает всё через консоль.
Что касается обычных разработчиков, то в Android Studio всё это делается нажатием пары кнопок, гораздо проще и быстрее.
P.S. Сам я тоже публикую Android-приложения на Cordova.
zakium
20.03.2017 23:53В документации cordova и phonegap есть инструкции с вариантами как можно подписать.
Самый стандартный способ это:
1) сгенерировать ключ (пароль + алиас)
2) прописать конфиг в build.properties
3) запустить стандартный cordova build android --release
Итого ничего потом подписывать не нужно после билда, на выходе подписанный .apk
chopikus
20.03.2017 23:53+1В чем прикол коммандной строки, ведь в Android Studio во вкладке Build есть Generate Signed APK.
2developers
21.03.2017 10:31Это чтобы лишний раз Android Studio не запускать.
Обычно с помощью ionic/cordova разрабатываются приложения сразу под несколько платформ: android и ios. Намного быстрее написать в консоли cordova build android; cordova build ios; чем запускать Android Studio и Xcode.
Да, сам код обычно пишется в каком-то другом редакторе или IDE.
adasoft
Спасибо, как раз подхожу к этому рубежу. Но смущается почему только коммандная строка? Неужели нет GUI решений, которые возьмут часть вопросов по сохранению данных по приложению между процессами подписания обновлений на себя??
Suvitruf
Через Android Studio сборка .apk в пару кликов. Статья имеет смысл, если вы где-то на серваке хотите собирать или автоматизировать. На своей же машине проще прям в IDE сбилдить.
evilray
Вы хотите сказать, что Android Studio в контексте разработки приложений на cordova/ionic проще, чем использование командной строки?
Suvitruf
Я с cordova/ionic не работал, но в документации вижу:
Так что да, из гуи проще, чем возиться с консолью.Да и даже в этом офф доке процесс подписи куда проще описан, чем у вас.
Space_Cowboy
hitman51
есть, можно делать через Android Studio https://developer.android.com/studio/publish/app-signing.html