Як створити підписаний файл APK за допомогою інтерфейсу командного рядка Cordova?


169

Я зробив зразок заяви на ім’я 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 команду. Це кидає ту саму помилку.

Хтось може сказати мені, що я зробив не так?


3
починаючи з cordova 5, процес дещо змінюється: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Відповіді:


305

Крок 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: debuggable повністю. Ось пояснення з кордова:

Пояснення до питань типу "HardcodedDebugMode": Найкраще залишити атрибут android: debuggable з маніфесту. Якщо це зробити, тоді інструменти автоматично вставлять android: debuggable = true під час створення APK для налагодження на емуляторі чи пристрої. І коли ви виконаєте збірку релізів, таких як Експорт APK, він автоматично встановить значення false.

Якщо з іншого боку ви вказали певне значення у файлі маніфесту, то інструменти завжди будуть його використовувати. Це може призвести до випадкової публікації вашого додатка з інформацією про налагодження.

Крок 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 Repo у , якщо ви хочете створити інший, будь ласка, перейдіть до наступних кроків.

Генерація ключів:

Синтаксис:

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

Яйця:

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

Нова версія кордова

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>

Яйця:

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.


9
Гаразд, я приймаю вашу думку. Але у мене є приватне сховище git, і у нас є команда для роботи над мобільним додатком. Так мені комфортно.
cfprabhu

5
Чому важливо було видалити org.apache.cordova.console?
foreyez

5
@cfprabhu Крок 5 видає застереження "Не передбачено -ца або -цацерт, і ця банка не зазначається часом". Виправлено це шляхом додавання до команди "-tsa timestamp.digicert.com". Можливо, буде корисним для інших користувачів
Thomas Bormans

6
zipalign під OSX доступний у ~ / Бібліотека / Android / sdk / build-tools / 22.0.1 / zipalign
chillwalker

2
@ThomasBormans якось -tsa timestamp.digicert.comкинув для мене NullPointerException. -tsa http://timestamp.digicert.comначебто це виправлено
Томас

123

Оновлення до @malcubierre для Кордови 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

2
Дякую! Ви також можете змінити ім’я / місцезнаходження вашого файла властивостей, але це потрібно вказати у build-extras.gradleфайлі. Відповідний документ Cordova тут .
Данк

Моя програма не отримує оновлення до наступної версії, першої версії, створеної в мурашному збірці (cordova 3). Я модернізував мою cordova до 6.0.0, тепер друга версія створена в gradle build, я пішов за останнім документом cordova, щоб створити підписаний apk, але все одно мій додаток не оновлюється. Я переглянув усю інформацію в Інтернеті, але все-таки десь іду не так. Будь ласка, допоможіть мені @Dunc
NGB

@Naveen Я використовую Cordova 5.2.0, виникли різні проблеми з іншими версіями> 5. Запропонуйте спробувати це, якщо зможете. Тоді, якщо проблеми все ще виникають, рекомендую задати нове запитання.
Данк

Проблема все ще не завантажується з нової версії apk. @Dunc
NGB

@Dunc будь-яке рішення
NGB

52

У поточній документації ми можемо вказати 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 argumente таким чином:

cordova run android --buildConfig

2
Чудово <3 Ваша відповідь стосується файлів, якими я можу керувати версії!
gustavohenke

3
в якому каталозі повинен існувати цей json?
Beelphegor

6
Cordova будувати андроїд --release
Шаді

2
Помістіть build.json у папку кореневих проектів разом із файлом зберігання ключів. Це найефективніший метод безкоштовного підписання, який я знайшов.
Джоел Катон

1
Чомусь шлях до файлу мені довелося змінити на "../android.keystore". (
нахил

20

Крок 1:

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

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

Крок 2:

Перейдіть до кордового шляху та виконайте:

cordova build android --release

Примітка. Вам буде запропоновано запитувати ваш магазин і пароль ключа

ВашаApp-release.apk з'явиться в \cordova\platforms\android\ant-build


1
Ось робоче рішення: ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom

5
починаючи з cordova 5, процес дещо змінюється: ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

З файлом імен Cordova 5 "release-signing.properties" замість "ant.properties"; всі інші кроки точно такі, як описано @malcubierre
Маріо Орланді

нова версія apk не завантажується з існуючої програми в cordova 6.0.0. Я стежив за всіма документами, які досі не вирішили мою проблему, чи можете ви мені допомогти @MarioOrlandi
NGB,

11

У 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

Я отримую помилку The system cannot find the file specifiedвикористання Cordova 6.2.0
mr5

ви замінили шлях до магазину ключів? Якщо так, будь ласка, опублікуйте команду тут.
KrIsHnA

Так. Цеcordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5

1
Після додавання мого пароля до "(подвійна цитата) він почав працювати. Я думаю, що у Кордови є питання щодо розбору спеціальних символів.
mr5

Якщо хтось використовує Ionic, ви можете оформити цей документ ionicframework.com/docs/cli/cordova/build
Nguyen Tran

7

На 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 / як SignedApk.apk Обов’язково використовуйте правильний псевдонім ключа та пароль, визначені першим сценарієм


2

Побудуйте файл 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 UNIGNED APK NAME : android-release-unsigned.apk

АНДРОІД ПОВІДОМЛЕННЯ APK NAME : android-release.apk

Виконайте нижче кроків у cmd (запустіть як адміністратор)

  1. cordova build - звільнити андроїд
  2. перейдіть до місця розташування файлів android-release-unsigned.apk (PROJECT \ platforms \ android \ build \ outputs \ apk)
  3. Jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < KEY STORE FILE PATH > < ANDROID UNSIGNED APK NAME > < KEY STORE ALIAS >
  4. < PATH OF zipalign.exe > -v 4 < ANDROID UNSIGNED APK NAME > < ANDROID RELEASE APK NAME >

1
##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

0

Спочатку перевірте свій код версії та назву версії, якщо ви оновлюєте додаток. І переконайтеся, що у вас є попередній магазин.

Якщо ви оновлюєте додаток, виконайте крок 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 не розпізнає, виконайте цей крок

Переконайтеся, що у вашому шляху знаходиться каталог, у якому виконується виконуваний ключ. (Наприклад, на моїй машині 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: \ projects \ Phonegap \ Example \ платформи \ android \ ant-build

Щоб підписати APK без підпису, запустіть інструмент jarsigner, який також входить до JDK:

Синтаксис:

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

Якщо він не реалізується, виконайте ці дії

(1) Клацніть правою кнопкою миші «Цей ПК»> клацніть правою кнопкою миші Властивості> Додаткові параметри системи> Змінні середовища> виберіть PATH, а потім редагувати.

(2) Додайте шлях до папки jdk до змінних середовища, він повинен виглядати так:

"C: \ програмні файли \ 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) перейдіть на ваш Android sdk шлях і знайдіть zipalign, як правило, це в android-sdk \ build-tools \ 23.0.3

(2) Скопіюйте папку zipalign у папку для генерації випуску apk, як правило, нижче шляху

yourproject / platforms / android / ant-build / Example-release-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.


0

Для Windows я створив build.cmdфайл:

(замініть шлях до магазину ключів і псевдонім)

Для Кордова:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

А для Ionic:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && ionic build --prod && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Збережіть його в каталозі ptoject, ви можете двічі клацнути або відкрити його cmd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.