it-swarm.com.ru

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

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

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

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

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

После того, как я выполнил вышеупомянутую команду, я получил файл с именем key-name.keystore в 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 в файле ant.properties следующим образом.

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

Я снова запустил команду cordova build Android --release. Выдает ту же ошибку.

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

145
vasan

Шаг 1:

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

добавьте --save, чтобы он удалял плагин из файла config.xml.

Шаг 2:

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

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

и измените Android:debuggable на false:

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

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

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

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

Шаг 3:

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

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 Repo. Если вы хотите создать другое, выполните следующие шаги.

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

Синтаксис:

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

Затем было сгенерировано хранилище ключей с именем NAME-mobileapps.keystore.

Шаг 5:

Поместите сгенерированный склад ключей в

старая версия кордова

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

OR

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 align для оптимизации APK:

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

OR

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

OR

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.

268
cfprabhu

Обновление @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
104
Jon

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

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

А затем выполните коммандос с аргументом --buildConfig следующим образом:

cordova run Android --buildConfig
47
infinito84

Шаг 1:  

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

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

Шаг 2:

Перейти к кордовой дорожке и выполнить:

cordova build Android --release

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

YourApp-release.apk появится в \cordova\platforms\Android\ant-build

19
Martin Alcubierre Arenillas

В cordova 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
11
KrIsHnA

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

#!/bin/sh
echo "Ionic to Signed APK ---- [email protected] // 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 ---- [email protected] // 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 будет находиться в папке «Ваше приложение»/platform/Android/build/output/apk/как SignedApk.apk Убедитесь, что вы используете правильный псевдоним ключа и пароль, определенные в первом скрипте

6
Ben

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

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

Шаг 1:

Перейдите к вашему проекту Cordova для создания нашего релиза сборки:

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

Затем мы можем найти наш неподписанный файл APK в платформах/Android/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, находится на вашем пути. (Например, на моем компьютере с Windows 7 он находится в C:\Program Files (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

Затем было сгенерировано хранилище ключей с именем NAME-mobileapps.keystore.

Шаг 3:

Поместите сгенерированный склад ключей в D:\проекты\PhoneGap\Пример\платформа\Android\муравей-сборка

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

Синтаксис:

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

Если это не помогает, сделайте эти шаги 

(1) Щелкните правой кнопкой мыши «Этот ПК»> щелкните правой кнопкой мыши Свойства> Дополнительные параметры системы> Переменные среды> выберите ПУТЬ, затем РЕДАКТИРОВАТЬ.

(2) Добавьте путь к папке jdk bin в переменные окружения, он должен выглядеть следующим образом:

"C:\Program Files\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 align для оптимизации APK:

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

(1) перейдите на путь Android SDK и найдите zipalign, который обычно находится в Android-SDK\build-tools\23.0.3 

(2) Скопируйте zipalign-файл и вставьте его в папку apk создания релиза, как правило, по указанному ниже пути

yourproject/платформы/Android/муравей-сборка/Пример-релиз-unsigned.apk

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

OR

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.

0
Arpit Patel

Сборка релиза кордова 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 UNSIGNED APK NAME : Android-release-unsigned.apk

Android RELEASE APK NAME : Android-release.apk

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

  1. cordova build - выпуск Android
  2. перейдите в расположение файла Android-release-unsigned.apk (PROJECT\платформы\Android\build\output\apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < ПУТЬ К ФАЙЛАМ КЛЮЧЕВОГО МАГАЗИНА > < ИМЯ АПК без подписи Android > < ALIAS КЛЮЧЕВОГО МАГАЗИНА >
  4. < ПУТЬ zipalign.exe > -v 4 < ИМЯ НЕПИСАННЫЕ Android APK > < ОСВОБОДИТЬ ИМЯ Android APK >
0
Om Shankar