Как создать подписанный файл APK с помощью интерфейса командной строки Cordova?

я сделал образец приложения с именем checkStatus. Теперь я хочу создать подписанный файл APK. Поэтому я могу установить его на разных устройствах для тестирования.

для этого я погуглил и нашел это документация.

согласно документу, я переключился в каталог проекта и выполнил следующую команду:

keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000

после выполнения вышеуказанной команды я получил файл с именем key-name.keystore at projectRoot/key-name.keystore.

и затем я скопировал-вставил это файл в projectRoot/platforms/android/key-name.keystore.

после этого я создал файл с именем ant.properties и сохранил его в projectRoot/platforms/android.

я написал следующий код в файл:

key.store=projectRoot/key-name.keystore
key.alias=myApp

после этого я выполнил следующую команду, чтобы освободить

Cordova builds android --release

он бросает следующую ошибку:

 /home/projectRoot/platforms/android/cordova/node_modules/q/q.js:126
                throw e;
                      ^
Error code 1 for command: ant with args: release,-f,/home/projectRoot/platforms/android/build.xml,-Dout.dir=ant-build,-Dgen.absolute.dir=ant-gen

 Error: /home/projectRoot/platforms/android/cordova/build: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:753:16)
at Process.ChildProcess._handle.onexit (child_process.js:820:5)

Итак, на этот раз я изменил key.store значение как следующим образом.

 key.store=/home/projectRoot/platforms/android/key-name.keystore

снова я запустил . Он выдает ту же ошибку.

может ли кто-нибудь сказать мне, что я сделал неправильно?

8 ответов


Шаг 1:

D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save

добавить --save так, что он удаляет плагин из .

Шаг 2:

чтобы создать сборку выпуска для Android, нам сначала нужно внести небольшое изменение в AndroidManifest.xml файл найден в platforms / android. Отредактируйте файл и измените строку:

<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

, и android:debuggable to false:

<application android:debuggable="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

начиная с cordova 6.2.0 полностью удалите тег android: debuggable. Вот объяснение от Кордовы:

объяснение проблем типа " HardcodedDebugMode": Лучше всего исключить атрибут android: debuggable из манифеста. Если вы это сделаете, то инструменты автоматически вставят android:debuggable=true при создании APK для отладки на эмуляторе или устройстве. И когда вы выполните сборку выпуска, например экспорт APK, он будет автоматически установлен это ложь.

если с другой стороны укажите определенное значение в файле манифеста, тогда инструменты всегда будут использовать его. Это может привести к случайной публикации ваше приложение с отладочной информацией.

Шаг 3:

теперь мы можем сказать Cordova, чтобы создать нашу версию:

D:\projects\Phonegap\Example> cordova build --release android

тогда мы можем найти наш неподписанный файл APK в platforms/android/ant-build. В нашем примере файл был platforms/android/ant-build/Example-release-unsigned.apk

Шаг 4:

Примечание: у нас есть хранилище ключей keystoreNAME-mobileapps.keystore в этом РЕПО Git, если вы хотите создать другой, пожалуйста, выполните следующие действия.

Генерация Ключей:

синтаксис:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

Egs:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

затем ключ магазин был создан с имя-mobileapps.хранилища ключей

Шаг 5:

поместите созданное хранилище ключей в

старая версия cordova

D:\projects\Phonegap\Example\platforms\android\ant-build

новая версия cordova

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk

чтобы подписать неподписанный APK, запустите инструмент jarsigner, который также включен в JDK:

синтаксис:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename> <Unsigned APK file> <Keystore Alias name>

Egs:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

или

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

это подписывает apk на месте.

Шаг 6:

наконец, нам нужно запустить инструмент выравнивания zip для оптимизации APK:

D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

или

D:\projects\Phonegap\Example\platforms\android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

или

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

теперь у нас есть наш окончательный двоичный выпуск под названием example.APK и мы можем выпустить это на Google Play Store.


обновление @malcubierre для Cordova 4 (и более поздних версий) -

создайте файл с именем release-signing.properties и положил в APPFOLDER\platforms\android папку

содержимое файла: редактировать после = для всех, кроме 2-й строки

storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password

тогда эта команда должна создать версию выпуска:

cordova build android --release

в течение документация мы можем указать сборки.json с хранилищем ключей:

{
     "android": {
         "debug": {
             "keystore": "..\android.keystore",
             "storePassword": "android",
             "alias": "mykey1",
             "password" : "password",
             "keystoreType": ""
         },
         "release": {
             "keystore": "..\android.keystore",
             "storePassword": "",
             "alias": "mykey2",
             "password" : "password",
             "keystoreType": ""
         }
     }
 }

а затем выполните Коммандос с -- buildConfig argumente, таким образом:

cordova run android --buildConfig

Шаг 1:

на cordova\platforms\android ant создать филе под названием ant.properties файл с информацией о файле хранилища ключей (это хранилище ключей может быть сгенерировано из вашего любимого Android SDK, studio...):

key.store=C:\yourpath\Yourkeystore.keystore
key.alias=youralias

Шаг 2:

перейти к cordova path и выполнить:

cordova build android --release

Примечание: вам будет предложено задать хранилище ключей и пароль ключа

YourApp-релиз.apk появится в \cordova\platforms\android\ant-build


в Кордова 6.2.0, Это простой способ создать сборку. см. другие шаги здесь шаги 1, 2 и 4

cd cordova/ #change to root cordova folder
platforms/android/cordova/clean #clean if you want
cordova build android --release -- --keystore="/path/to/keystore" --storePassword=password --alias=alias_name #password will be prompted if you have any

на Mac (osx) я создал два .sh файлы, один для первой публикации и другой для обновления:

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release android
cd platforms/android/build/outputs/apk/
keytool -genkey -v -keystore my-release-key.keystore -alias $ALIAS -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk $ALIAS
zipalign -v 4 android-release-unsigned.apk signedApk.apk

и обновить приложение:

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release android
cd platforms/android/build/outputs/apk/
rm signedApk.apk
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk $ALIAS
zipalign -v 4 android-release-unsigned.apk signedApk.apk

предполагая, что вы находитесь в домашней папке или папке, покрывающей папки приложений. Убедитесь, что правильно установлен chmod для использования этого скрипта. Затем:

./ionicToApk.sh # or whatever depending of the name of your file, in CLI

ваш подписанный apk будет в папке приложения / платформы / android / build/outputs/ apk / as SignedApk.apk Обязательно используйте правильный псевдоним ключа и пароль, определенный с помощью первого скрипта


сначала проверьте код версии и имя версии, если вы обновляете приложение. И убедитесь, что у вас есть предыдущее хранилище.

если вы обновляете приложение, выполните шаг 1,3,4.

Шаг 1:

Goto ваш проект cordova для создания нашей сборки выпуска:

D:\projects\Phonegap\Example> cordova build --release android

затем мы можем найти наш неподписанный файл APK в platforms/android / ant-build. В нашем примере файл был

если u использовал ant-build

yourproject/platforms/android/ant-build/Example-release-unsigned.apk

или

если вы использовали gradle-build

yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk

Шаг 2:

Генерация Ключей:

синтаксис:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

если команда keytool не распознает, сделайте этот шаг

проверяем, что директория исполняемого keytool-это in на вашем пути. (Например, на моей машине Windows 7 он находится в C:\Program файлы (x86)\Java\jre6\bin.)

пример:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

затем ключ магазин был создан с имя-mobileapps.хранилища ключей

Шаг 3:

поместите сгенерированное хранилище ключей в D:\projects\Phonegap\Example\platforms\android\ant-build

чтобы подписать неподписанный APK, запустите инструмент jarsigner, который также включен в JDK:

синтаксис:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>

если он не узнал эти шаги

(1) щелкните правой кнопкой мыши на "этот ПК" > щелкните правой кнопкой мыши Свойства > расширенные Системные настройки > Переменные среды > выберите путь, затем отредактируйте.

(2) добавьте путь к папке JDK bin в переменные среды, он должен выглядеть так:

"C:\Program файлы\Java\jdk1.8.0_40\bin".

пример:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

это подписывает apk на месте.

Шаг 4:

наконец, нам нужно для запуска инструмента выравнивания zip для оптимизации APK:

если zipalign не признают, то

(1) goto ваш Android sdk путь и найти zipalign это обычно в android-sdk\build-tools\23.0.3

(2) скопируйте файл zipalign вставить в папку generate release apk обычно в ниже путь

yourproject / платформы / android / ant-сборка / пример-выпуск-без знака.apk

D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

или

D:\projects\Phonegap\Example\platforms\android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

теперь у нас есть наш окончательный двоичный выпуск под названием example.apk, и мы можем выпустить это в Google Play Store.


Build cordova релиз APK файл в cmd.

ПУТЬ К ФАЙЛУ ХРАНИЛИЩА КЛЮЧЕЙ: путь к файлу хранилища ключей (F:/cordova/myApp/xxxxx - ... jks)

ПАРОЛЬ ХРАНИЛИЩА КЛЮЧЕЙ: xxxxx

ПСЕВДОНИМ ХРАНИЛИЩА КЛЮЧЕЙ: xxxxx

ПАРОЛЬ ПСЕВДОНИМА ХРАНИЛИЩА КЛЮЧЕЙ: xxxxx

путь zipalign.exe: zipalign.путь к файлу exe (C:\Users\xxxx\AppData\Local\Android\sdk\build-tools\25.0.2\zipalign)

ANDROID БЕЗ ЗНАКА APK ИМЯ: android-релиз-без знака.apk

ANDROID РЕЛИЗ APK ИМЯ: android-релиз.apk

выполните следующие шаги в cmd (Запуск от имени администратора)

  1. cordova build -- релиз android
  2. перейти к android-release-без знака.расположение файла apk (PROJECT\platforms\android\build\outputs\apk)
  3. jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-хранилище ключей ПУТЬ К ФАЙЛУ ХРАНИЛИЩА КЛЮЧЕЙ> ANDROID БЕЗ ЗНАКА APK ИМЯ> ПСЕВДОНИМ ХРАНИЛИЩА КЛЮЧЕЙ>
  4. путь zipalign.exe> - v 4 ANDROID БЕЗ ЗНАКА APK ИМЯ> ANDROID РЕЛИЗ APK ИМЯ>