Cordova 명령 행 인터페이스를 사용하여 서명 된 APK 파일을 작성하는 방법은 무엇입니까?


169

라는 샘플 애플리케이션을 만들었습니다 checkStatus. 이제 서명 된 APK 파일을 만들고 싶습니다. 테스트를 위해 다른 장치에 설치할 수 있습니다.

이를 위해 Google에서이 문서를 찾았습니다 .

문서에 따라 프로젝트 디렉토리로 전환하고 다음 명령을 실행했습니다.

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.xmlplatform / 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 태그를 완전히 제거하십시오. 다음은 cordova의 설명입니다.

"HardcodedDebugMode"유형의 문제에 대한 설명 : 매니페스트에서 android : debuggable 속성을 제거하는 것이 가장 좋습니다. 그렇다면 APK를 빌드 할 때 도구가 에뮬레이터 또는 장치에서 디버깅 할 때 자동으로 android : debuggable = true를 삽입합니다. 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에 서명하려면 JDK에 포함 된 jarsigner 도구를 실행하십시오.

통사론:

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 스토어에서 릴리스 할 수 있습니다.


9
네 생각을 받아 들여 그러나 개인 git 저장소가 있으며 모바일 앱 작업 ​​팀이 있습니다. 그래서 편안합니다.
cfprabhu

5
org.apache.cordova.console을 제거해야하는 이유는 무엇입니까?
foreyez

5
@cfprabhu 5 단계에서 "-tsa 또는 -tsacert가 제공되지 않고이 jar에 타임 스탬프가 지정되지 않았습니다"라는 경고가 표시됩니다. "-tsa timestamp.digicert.com"을 명령에 추가하여 수정했습니다. 다른 사용자에게 유용 할 수 있습니다
Thomas Bormans

6
OSX에서 zipalign은 ~ / Library / Android / sdk / build-tools / 22.0.1 / zipalign에서 사용할 수 있습니다
chillwalker

2
@ThomasBormans는 어떻게 든 -tsa timestamp.digicert.comNullPointerException을 던졌습니다. -tsa http://timestamp.digicert.com고치 것 같습니다
토마스

123

Cordova 4 이상에 대한 @malcubierre 업데이트

파일 release-signing.properties을 만들어 APPFOLDER\platforms\android폴더에 넣습니다.

파일 내용 : 두 번째 줄을 제외한 모든 항목에 대해 편집 후 =

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

그런 다음이 명령은 릴리스 버전을 빌드해야합니다.

cordova build android --release

2
감사! 특성 파일의 이름 / 위치를 변경할 수도 있지만 파일에서 지정해야 build-extras.gradle합니다. 관련 코르도바 문서는 여기에 있습니다 .
Dunc

내 앱이 다음 버전으로 업데이트되지 않습니다. 첫 번째 버전은 ant build (cordova 3)에서 생성되었습니다. 두 번째 버전이 gradle 빌드로 생성 된 지금 cordova를 6.0.0으로 업그레이드했으며 최신 cordova doc을 따라 서명 된 apk를 만들었지 만 여전히 앱이 업데이트되지 않습니다. 나는 웹의 모든 정보를 겪었지만 여전히 어딘가에 잘못되었습니다. @Dunc
NGB를

@Naveen 나는 Cordova 5.2.0을 사용하고 있으며 다른 버전> 5와 관련하여 다양한 문제가있었습니다 . 가능하다면 시도해보십시오 . 그래도 문제가 계속되면 새로운 질문을하는 것이 좋습니다.
Dunc

여전히 문제가 있지만 새 버전의 APK가 기존 앱에서 다운로드되지 않습니다. @Dunc
NGB

@Dunc any solution
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 인수를 사용하여 commando를 다음과 같이 실행하십시오.

cordova run android --buildConfig

2
굉장 <3 당신의 대답은 내가 버전을 제어 할 수있는 파일에 관한 것입니다!
gustavohenke

3
이 json이 어느 디렉토리에 있어야합니까?
Beelphegor

6
cordova build android --release
shadi

2
키 저장소 파일과 함께 루트 프로젝트 폴더에 build.json을 배치하십시오. 이것은 내가 찾은 서명에 가장 효과적인 번거롭지 않은 방법입니다.
Joel Caton 2016 년

1
어떤 이유로 파일 경로를 "../android.keystore"로 변경해야했습니다. (슬래시)
Dilhan Jayathilake

20

1 단계:

cordova\platforms\androidant로 이동 ant.properties하여 키 저장소 파일 정보로 file 이라는 fille를 작성 하십시오 (이 키 저장소는 선호하는 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


1
작업 솔루션은 다음과 같습니다. ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom

5
cordova 5로 시작하면 프로세스가 약간 변경됩니다. ilee.co.uk/Sign-Releases-with-Cordova-Android/…
Sombriks

Cordova 5 이름 파일 "ant.properties"대신 "release-signing.properties"; 다른 모든 단계는 @malcubierre
Mario Orlandi

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 specifiedCordova 6.2.0 을 사용 하는 중 오류가 발생했습니다
mr5

키 저장소 경로를 바 꾸었습니까? 그렇다면 여기에 명령을 게시하십시오.
KrIsHnA

네. 그것은이다cordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
MR5

1
암호를 "(큰 따옴표)로 묶은 후 실행되기 시작했습니다. Cordova에 특수 문자 구문 분석에 대한 문제가 있다고 생각합니다.
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

cmd에서 cordova release APK 파일을 빌드하십시오.

저장소 파일 경로 : 키 저장소 파일 경로 (F : /cordova/myApp/xxxxx.jks)

키 저장소 비밀번호 : xxxxx

키 저장소 별칭 : xxxxx

키 저장소 별칭 비밀번호 : xxxxx

zipalign.exe의 경로 : zipalign.exe 파일 경로 (C : \ 사용자 \ XXXX \의 AppData \ 로컬 \ 안드로이드 \ SDK \ 빌드 도구 \ 25.0.2 \ zipalign을)

안드로이드 서명되지 않은 APK 이름 : android-release-unsigned.apk

안드로이드 릴리스 APK 이름 : android-release.apk

cmd에서 아래 단계를 실행하십시오 (관리자 권한으로 실행).

  1. 코르도바 빌드-안드로이드 출시
  2. android-release-unsigned.apk 파일 위치로 이동하십시오 (PROJECT \ platforms \ android \ build \ outputs \ apk)
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < 키 저장소 파일 경로 > < 안드로이드 서명되지 않은 APK 이름 > < 키 저장소 별칭 >
  4. < zipalign.exe의 경로 > -v 4 < 안드로이드 서명되지 않은 APK 이름 > < 안드로이드 릴리스 APK 이름 >

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

그런 다음 플랫폼 / android / ant-build에서 서명되지 않은 APK 파일을 찾을 수 있습니다. 이 예에서 파일은

개미 빌드를 사용한 경우

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 : \ projects \ Phonegap \ Example \ platforms \ android \ ant-build에 배치하십시오.

서명되지 않은 APK에 서명하려면 JDK에 포함 된 jarsigner 도구를 실행하십시오.

통사론:

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

재구성되지 않으면 다음 단계를 수행하십시오.

(1) "이 PC"를 마우스 오른쪽 버튼으로 클릭하고 속성> 고급 시스템 설정> 환경 변수를 마우스 오른쪽 버튼으로 클릭 한 후 PATH를 선택한 다음 편집을 선택하십시오.

(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) 안드로이드 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 스토어에서 릴리스 할 수 있습니다.


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%

그리고 이온의 경우 :

@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로 두 번 클릭하거나 열 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.