Làm cách nào để tạo tệp APK đã ký bằng giao diện dòng lệnh Cordova?


169

Tôi đã làm một ứng dụng mẫu có tên checkStatus. Bây giờ tôi muốn tạo một tệp APK đã ký. Vì vậy, tôi có thể cài đặt nó trong các thiết bị khác nhau để thử nghiệm.

Đối với điều này, tôi đã Google và tìm thấy tài liệu này .

Theo tài liệu, tôi chuyển sang thư mục dự án của mình và chạy lệnh sau:

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

Sau khi tôi chạy lệnh trên, tôi nhận được một file có tên key-name.keystoretại projectRoot/key-name.keystore.

Và sau đó tôi sao chép tập tin đó vào projectRoot/platforms/android/key-name.keystore.

Sau đó, tôi tạo một tệp có tên ant.propertiesvà lưu nó vào projectRoot/platforms/android.

Tôi đã viết đoạn mã sau trong tập tin:

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

Sau đó, tôi chạy lệnh sau để phát hành

Cordova builds android --release

Đó là lỗi sau:

 /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)

Vì vậy, lần này, tôi đã sửa đổi key.storegiá trị trong ant.propertiestệp như theo cách sau.

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

Một lần nữa, tôi chạy cordova build android --releaselệnh. Nó ném cùng một lỗi.

Bất cứ ai có thể cho tôi biết những gì tôi đã làm sai?


3
bắt đầu với cordova 5, quá trình thay đổi một chút: ilee.co.uk/Sign-Release-with-Cordova-Android/ Kẻ
Sombriks

Câu trả lời:


305

Bước 1:

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

thêm --saveđể nó loại bỏ các plugin khỏi config.xmltập tin.

Bước 2:

Để tạo bản dựng phát hành cho Android, trước tiên chúng tôi cần thực hiện một thay đổi nhỏ đối với AndroidManifest.xmltệp được tìm thấy trong các nền tảng / android. Chỉnh sửa tập tin và thay đổi dòng:

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

và đổi android:debuggablethành false:

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

Kể từ cordova 6.2.0, hãy xóa hoàn toàn thẻ android: debuggable. Dưới đây là lời giải thích từ cordova:

Giải thích cho các vấn đề thuộc loại "HardcodingDebugMode": Tốt nhất là loại bỏ thuộc tính android: debuggable khỏi tệp kê khai. Nếu bạn làm như vậy, thì các công cụ sẽ tự động chèn android: debuggable = true khi xây dựng APK để gỡ lỗi trên trình giả lập hoặc thiết bị. Và khi bạn thực hiện xây dựng bản phát hành, chẳng hạn như Xuất APK, nó sẽ tự động đặt thành sai.

Mặt khác, nếu bạn chỉ định một giá trị cụ thể trong tệp kê khai, thì các công cụ sẽ luôn sử dụng nó. Điều này có thể dẫn đến việc vô tình xuất bản ứng dụng của bạn với thông tin gỡ lỗi.

Bước 3:

Bây giờ chúng ta có thể nói với cordova để tạo bản phát hành của chúng tôi:

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

Sau đó, chúng tôi có thể tìm thấy tệp APK không dấu của chúng tôi trong platforms/android/ant-build. Trong ví dụ của chúng tôi, tập tin làplatforms/android/ant-build/Example-release-unsigned.apk

Bước 4:

Lưu ý: Chúng tôi có kho khóa của chúng tôi keystoreNAME-mobileapps.keystoretrong Git Repo này, nếu bạn muốn tạo một cái khác, vui lòng tiến hành các bước sau.

Tạo khóa:

Cú pháp:

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

Ess:

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

Sau đó, kho lưu trữ khóa đã được tạo với tên là NAME-Mobil Ứng dụng.keystore

Bước 5:

Đặt kho khóa được tạo vào

phiên bản cũ

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

Phiên bản mới

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

Để ký APK không dấu, hãy chạy công cụ jarsigner cũng được bao gồm trong JDK:

Cú pháp:

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

Ess:

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

HOẶC LÀ

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'

Điều này ký các apk tại chỗ.

Bước 6:

Cuối cùng, chúng ta cần chạy công cụ căn chỉnh zip để tối ưu hóa APK:

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

HOẶC LÀ

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

HOẶC LÀ

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

Bây giờ chúng tôi có bản nhị phân phát hành cuối cùng được gọi là example.apk và chúng tôi có thể phát hành bản này trên Cửa hàng Google Play.


9
Được rồi tôi chấp nhận suy nghĩ của bạn. Nhưng tôi có kho git riêng và chúng tôi có một nhóm làm việc trên ứng dụng di động. Vì vậy, nó là thoải mái cho tôi.
cfprabhu

5
Tại sao điều quan trọng là phải loại bỏ org.apache.cordova.console?
foreyez

5
@cfprabhu Bước 5 đang đưa ra cảnh báo "Không -tsa hoặc -tsacert được cung cấp và bình này không bị đánh dấu thời gian.". Đã sửa lỗi bằng cách thêm "-tsa timestamp.digicert.com" vào lệnh. Có thể hữu ích cho những người dùng khác
Thomas Bormans

6
căn chỉnh nén dưới OSX có sẵn tại ~ / Library / Android / sdk / build-tools / 22.0.1 / căn chỉnh nén
chillwalker

2
@ThomasBormans bằng cách nào đó -tsa timestamp.digicert.comđã ném một NullPulumException cho tôi. -tsa http://timestamp.digicert.comdường như để sửa nó
Thomas

123

Một bản cập nhật cho @malcubierre cho Cordova 4 (và mới hơn) -

Tạo một tập tin được gọi release-signing.propertiesvà đưa vào APPFOLDER\platforms\android thư mục

Nội dung của tệp: chỉnh sửa sau = cho tất cả ngoại trừ dòng thứ 2

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

Sau đó, lệnh này sẽ xây dựng một phiên bản phát hành:

cordova build android --release

2
Cảm ơn! Bạn cũng có thể thay đổi tên / vị trí của tệp thuộc tính của mình, nhưng bạn phải chỉ định trong một build-extras.gradletệp. Cordova doc có liên quan ở đây .
Dunc

Ứng dụng của tôi không được cập nhật lên phiên bản tiếp theo, phiên bản đầu tiên được tạo trong ant build (cordova 3). Tôi đã nâng cấp cordova của mình lên 6.0.0 bây giờ phiên bản thứ hai được tạo trong bản dựng gradle, tôi đã theo tài liệu cordova mới nhất để tạo apk đã ký nhưng ứng dụng của tôi vẫn chưa được cập nhật. Tôi đã xem qua tất cả các thông tin của trang web nhưng vẫn còn một nơi nào đó không ổn. Xin hãy giúp tôi @Dunc
NGB

@Naveen Tôi đang sử dụng Cordova 5.2.0, có nhiều vấn đề với các phiên bản khác> 5. Đề nghị bạn thử nếu bạn có thể. Sau đó, nếu vẫn gặp vấn đề, tôi khuyên bạn nên hỏi một câu hỏi mới.
Dunc

Vẫn có vấn đề, phiên bản apk mới không được tải xuống từ ứng dụng hiện có. @Dunc
NGB

@Dunc bất kỳ giải pháp
NGB

52

Trong tài liệu hiện tại, chúng ta có thể chỉ định build.json với kho khóa:

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

Và sau đó, thực thi lệnh với -buildConfig argumente, theo cách này:

cordova run android --buildConfig

2
Tuyệt vời <3 câu trả lời của bạn là về các tệp mà tôi có thể kiểm soát phiên bản!
gustavohenke

3
json này nên tồn tại trong thư mục nào?
Beelphegor

6
cordova xây dựng android
shadi

2
Đặt build.json trong thư mục gốc của dự án cùng với tệp kho khóa. Đây là phương pháp miễn phí rắc rối hiệu quả nhất để ký mà tôi đã tìm thấy.
Joel Caton

1
Vì một số lý do, đường dẫn tệp tôi phải đổi thành "../android.keystore". (chém về phía trước)
Dilhan Jayathilake

20

Bước 1:

Đi đến cordova\platforms\android ant tạo một ant.propertiestệp có tên fille với thông tin tệp kho khóa (kho khóa này có thể được tạo từ SDK Android yêu thích của bạn, studio ...):

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

Bước 2:

Đi đến đường dẫn cordova và thực hiện:

cordova build android --release

Lưu ý: Bạn sẽ được nhắc hỏi kho khóa và mật khẩu khóa của bạn

Một YourApp-release.apk sẽ xuất hiện trong \cordova\platforms\android\ant-build


1
Đây là giải pháp hiệu quả: ilee.co.uk/Sign-Release-with-Cordova-Android
làm lại từ

5
bắt đầu với cordova 5, quá trình thay đổi một chút: ilee.co.uk/Sign-Releases-with-Cordova-Android/...
Sombriks

Với tệp tên Cordova 5 "release-signing.properIES" thay vì "ant.properies"; tất cả các bước khác chính xác như được mô tả bởi @malcubierre
Mario

phiên bản apk mới không được tải xuống từ ứng dụng hiện có trong cordova 6.0.0. Tôi đã làm theo tất cả các tài liệu vẫn chưa giải quyết được vấn đề của mình, bạn có thể giúp tôi không @MarioOrlandi
NGB

11

Trong cordova 6.2.0 , nó có một cách dễ dàng để tạo bản phát hành. tham khảo các bước khác tại đây Bước 1, 2 và 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

Tôi đang gặp lỗi khi The system cannot find the file specifiedsử dụng Cordova 6.2.0
mr5

bạn đã thay thế đường dẫn kho khóa chưa? Nếu vậy xin vui lòng gửi lệnh ở đây.
KrIsHnA

Vâng. Đó làcordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5

1
Sau khi kèm theo mật khẩu của tôi với "(trích dẫn kép), nó bắt đầu chạy. Tôi nghĩ rằng Cordova có một vấn đề về phân tích các ký tự đặc biệt.
mr5

Nếu bất cứ ai sử dụng Ionic, bạn có thể kiểm tra tài liệu này ionicframework.com/docs/cli/cordova/build
Nguyễn Trần

7

Trên Mac (osx), tôi đã tạo hai tệp .sh, một cho ấn phẩm đầu tiên và một tệp khác để cập nhật:

#!/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

Và để cập nhật ứng dụng của bạn:

#!/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

Giả sử bạn đang ở trong thư mục nhà của bạn hoặc một thư mục đứng đầu các thư mục ứng dụng của bạn. Đảm bảo đặt chính xác chmod để sử dụng tập lệnh này. Sau đó :

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

Apk đã ký của bạn sẽ nằm trong thư mục Ứng dụng / nền tảng / android / build / output / apk / as SignedApk.apk Đảm bảo sử dụng bí danh khóa và mật khẩu chính xác được xác định với tập lệnh đầu tiên


2

Xây dựng tệp APK phát hành cordova trong cmd.

CỬA HÀNG FILE PILE : đường dẫn tệp kho khóa (F: /cordova/myApp/xxxxx.jks)

CỬA HÀNG KHÓA HỌC : xxxxx

CỬA HÀNG CHÍNH : xxxxx

CỬA HÀNG KHÓA ALIAS PASSWORD : xxxxx

ĐƯỜNG của zipalign.exe : đường dẫn tập tin zipalign.exe (C: \ Users \ xxxx \ AppData \ Local \ Android \ sdk \ build-tools \ 25.0.2 \ căn chỉnh nén)

TÊN APK KHÔNG GIỚI HẠN CỦA ANDROID : android-release-unsign.apk

TÊN APK LIÊN QUAN ANDROID : android-release.apk

Chạy các bước dưới đây trong cmd (chạy với tư cách quản trị viên)

  1. xây dựng cordova - giải phóng android
  2. đi đến vị trí tệp android-release-unsign.apk (DỰ ÁN \ platform \ android \ build \ output \ apk)
  3. jarsigner -verbose -sigache SHA1withRSA -digestache SHA1 -keystore < KEY STORE FILE PATH > < ANDROID UNED ĐĂNG KÝ TÊN APK > < KEY STORE ALIAS >
  4. < PATH OF zipalign.exe > -v 4 < TÊN APK KHÔNG GIỚI HẠN CỦA ANDROID > < TÊN APK LIÊN QUAN ĐẾN ANDROID >

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

Trước tiên, hãy kiểm tra mã phiên bản và tên phiên bản nếu bạn đang cập nhật ứng dụng của mình. Và chắc chắn rằng bạn có một kho khóa trước đó.

Nếu bạn đang cập nhật ứng dụng thì hãy làm theo bước 1,3,4.

Bước 1:

Goto dự án cordova của bạn để tạo bản dựng phát hành của chúng tôi:

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

Sau đó, chúng tôi có thể tìm thấy tệp APK chưa ký trong các nền tảng / android / ant-build. Trong ví dụ của chúng tôi, tập tin là

nếu bạn sử dụng kiến ​​xây dựng

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

HOẶC LÀ

nếu bạn sử dụng gradle-build

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

Bước 2:

Tạo khóa:

Cú pháp:

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

nếu lệnh keytool không nhận ra, hãy thực hiện bước này

Kiểm tra xem thư mục mà keytool thực thi được nằm trong đường dẫn của bạn. (Ví dụ: trên máy Windows 7 của tôi, nó có trong C: \ Program Files (x86) \ Java \ jre6 \ bin.)

Thí dụ:

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

Sau đó, kho lưu trữ khóa đã được tạo với tên là NAME-Mobil Ứng dụng.keystore

Bước 3:

Đặt kho khóa được tạo trong D: \ dự án \ Phonegap \ Ví dụ \ platform \ android \ ant-build

Để ký APK không dấu, hãy chạy công cụ jarsigner cũng được bao gồm trong JDK:

Cú pháp:

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

Nếu nó không hoàn thành, hãy làm những bước sau

(1) Nhấp chuột phải vào "PC này"> nhấp chuột phải vào Thuộc tính> Cài đặt hệ thống nâng cao> Biến môi trường> chọn PATH rồi EDIT.

(2) Thêm đường dẫn thư mục jdk bin của bạn vào các biến môi trường, nó sẽ giống như thế này:

"C: \ Tệp chương trình \ Java \ jdk1.8.0_40 \ bin".

Thí dụ:

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'

Điều này ký các apk tại chỗ.

Bước 4:

Cuối cùng, chúng ta cần chạy công cụ căn chỉnh zip để tối ưu hóa APK:

nếu zipalign không nhận ra thì

(1) goto đường dẫn sdk Android của bạn và tìm zipalign, nó thường có trong android-sdk \ build-tools \ 23.0.3

(2) Sao chép tập tin zipalign dán vào thư mục apk phát hành của bạn thường ở đường dẫn bên dưới

yourproject / platform / android / ant-build / Ví dụ-release-unsign.apk

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

HOẶC LÀ

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

Bây giờ chúng tôi có bản nhị phân phát hành cuối cùng được gọi là example.apk và chúng tôi có thể phát hành bản này trên Cửa hàng Google Play.


0

Đối với Windows, tôi đã tạo một build.cmd tệp:

(thay thế đường dẫn kho khóa và bí danh)

Đối với Cordova:

@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%

Và đối với 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%

Lưu nó trong thư mục của ptoject, bạn có thể nhấp đúp hoặc mở nó bằng cmd.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.