Как создать подписанный файл APK с использованием интерфейса командной строки Cordova?
Я сделал пример приложения с именем checkStatus
. Теперь я хочу создать подписанный файл APK. Так что я могу установить его на разных устройствах для моего тестирования.
Для этого я погуглил и нашел эту документацию.
Согласно документу, я переключился в каталог своего проекта и выполнил следующую команду:
keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000
После того, как я key-name.keystore
вышеупомянутую команду, я получил файл с именем 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
команду cordova build android --release
. Выдает ту же ошибку.
Может кто-нибудь сказать мне, что я сделал не так?
Ответы
Ответ 1
Шаг 1:
D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save
добавьте --save
чтобы он --save
плагин из config.xml
.
Шаг 2:
Чтобы сгенерировать сборку релиза для Android, сначала нужно внести небольшие изменения в файл AndroidManifest.xml
который находится в platform/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: debuggable. Вот объяснение от Кордова:
Объяснение проблем типа "HardcodedDebugMode": Лучше не указывать атрибут android: debuggable из манифеста. Если вы это сделаете, то инструменты автоматически вставят android: debuggable = true при создании APK для отладки на эмуляторе или устройстве. И когда вы выполняете сборку релиза, такую как Экспорт APK, он автоматически устанавливает значение false.
Если, с другой стороны, вы указываете конкретное значение в файле манифеста, то инструменты всегда будут его использовать. Это может привести к случайной публикации вашего приложения с отладочной информацией.
Шаг 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
ИЛИ ЖЕ
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.
Ответ 2
Обновление для @malcubierre для Кордовы 4 (и позже) -
Создайте файл с именем release-signing.properties
и вставьте в папку APPFOLDER\platforms\android
Содержимое файла: edit after = для всех, кроме 2-й строки
storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password
Затем эта команда должна создать версию выпуска:
cordova build android --release
Ответ 3
В текущей документации мы можем указать build.json с хранилищем ключей:
{
"android": {
"debug": {
"keystore": "..\android.keystore",
"storePassword": "android",
"alias": "mykey1",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "..\android.keystore",
"storePassword": "",
"alias": "mykey2",
"password" : "password",
"keystoreType": ""
}
}
}
И затем выполните команду commando с аргументом -buildConfig, следующим образом:
cordova run android --buildConfig
Ответ 4
Шаг1:
Перейдите в cordova\platforms\android
ant создайте файл fille под названием ant.properties
с информацией о файле хранилища ключей (это хранилище ключей может быть создано из вашего любимого Android SDK, студии...):
key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias
Шаг 2:
Перейдите к кордовому пути и выполните:
cordova build android --release
Примечание. Вам будет предложено задать свой хранилище ключей и пароль
В окне \cordova\platforms\android\ant-build
появится файл YourApp-release.apk,
Ответ 5
В кордове 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
Ответ 6
В 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 правильно, чтобы использовать этот script. Тогда:
./ionicToApk.sh # or whatever depending of the name of your file, in CLI
Ваш подписанный apk будет находиться в папке вашего приложения /platform/android/build/output/apk/as SignedApk.apk
Обязательно используйте правильный псевдоним ключа и пароль, определенные с помощью первого script
Ответ 7
Сначала проверьте свой код версии и имя версии, если вы обновляете приложение. И убедитесь, что у вас есть предыдущее хранилище ключей.
Если вы обновляете приложение, выполните шаг 1,3,4.
Шаг 1:
Перейдите к вашему проекту cordova для создания нашей версии:
D:\projects\Phonegap\Example> cordova build --release android
Затем мы можем найти наш неподписанный файл APK в платформах /android/ ant -build. В нашем примере файл был
если вы использовали ant -build
yourproject/platforms/android/ant-build/Example-release-unsigned.apk
ИЛИ
если u используется 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\ 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 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 для оптимизации APK:
Если zipalign не распознает, то
(1) перейдите к своему пути andddd sdk и найдите zipalign, как правило, в android-sdk\build-tools\23.0.3
(2) Скопируйте zipalign палку файла в свою папку apk release release apk обычно в нижнем пути
yourproject/платформы/Android/ant -Build/Пример релиз-unsigned.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.
Ответ 8
Сборка релиза кордова APK файл в cmd.
ПУТЬ К ФАЙЛАМ KEY STORE: путь к файлу хранилища ключей (F: /cordova/myApp/xxxxx.jks)
ПАРОЛЬ КЛЮЧЕВОГО МАГАЗИНА: ххххх
КЛЮЧЕВОЙ МАГАЗИН ALIAS: ххххх
КЛЮЧ МАГАЗИН АЛИАС ПАРОЛЬ: ххххх
ПУТЬ zipalign.exe: путь к файлу zipalign.exe(C:\Users\xxxx\AppData\Local\Android\sdk\build-tools\25.0.2\zipalign)
Android без подписи APK имя: android-release-unsigned.apk
ANDROID RELEASE APK ИМЯ: android-release.apk
Запустите следующие шаги в cmd (запустите от имени администратора)
- Cordova build --release Android
- перейдите в расположение файла android-release-unsigned.apk(PROJECT\platform\android\build\output\apk)
- jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < ПУТЬ К ФАЙЛАМ КЛЮЧЕВОГО МАГАЗИНА > < ИМЯ АДРОИДА ПОДПИСАНО APK > < КЛЮЧЕВЫЙ КЛЮЧ >
- < PATH OF zipalign.exe > -v 4 < ANDROID UNSIGNED APK NAME > < ANDROID RELEASE APK NAME >
Ответ 9
Вы пытаетесь это приложение в С# для пения Cordova APK. https://github.com/Wolfnext/cordovasigning.git
Ответ 10
##Generated signed apk from commandline
#variables
APP_NAME=THE_APP_NAME
APK_LOCATION=./
APP_HOME=/path/to/THE_APP
APP_KEY=/path/to/Android_key
APP_KEY_ALIAS=the_alias
APP_KEY_PASSWORD=123456789
zipalign=$ANDROID_HOME/build-tools/28.0.3/zipalign
#the logic
cd $APP_HOME
cordova build --release android
cd platforms/android/app/build/outputs/apk/release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $APP_KEY ./app-release-unsigned.apk $APP_KEY_ALIAS <<< $APP_KEY_PASSWORD
rm -rf "$APK_LOCATION/$APP_NAME.apk"
$zipalign -v 4 ./app-release-unsigned.apk "$APK_LOCATION/$APP_NAME.apk"
open $APK_LOCATION
#the end