Cordova 명령 행 인터페이스를 사용하여 서명 된 APK 파일을 작성하는 방법은 무엇입니까?
라는 샘플 애플리케이션을 만들었습니다 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
명령을 실행했습니다 . 같은 오류가 발생합니다.
아무도 내가 잘못한 것을 말해 줄 수 있습니까?
1 단계:
D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --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 태그를 완전히 제거하십시오. 다음은 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 스토어에서 릴리스 할 수 있습니다.
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
현재 문서 에서 키 저장소로 build.json을 지정할 수 있습니다.
{
"android": {
"debug": {
"keystore": "..\android.keystore",
"storePassword": "android",
"alias": "mykey1",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "..\android.keystore",
"storePassword": "",
"alias": "mykey2",
"password" : "password",
"keystoreType": ""
}
}
}
And then, execute the commando with --buildConfig argumente, this way:
cordova run android --buildConfig
Step1:
Go to cordova\platforms\android
ant create a fille called ant.properties
file with the keystore file info (this keystore can be generated from your favorite Android SDK, studio...):
key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias
Step2:
Go to cordova path and execute:
cordova build android --release
Note: You will be prompted asking your keystore and key password
An YourApp-release.apk will appear in \cordova\platforms\android\ant-build
In cordova 6.2.0, it has an easy way to create release build. refer to other steps here Steps 1, 2 and 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
On Mac (osx), I generated two .sh files, one for the first publication and another one for updating :
#!/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
And to update your app:
#!/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
Assuming you're in your home folder or a folder topping your apps folders. Make sure to set correctly chmod to use this script. Then :
./ionicToApk.sh # or whatever depending of the name of your file, in CLI
Your signed apk will be in Your App folder/platforms/android/build/outputs/apk/ as SignedApk.apk Make sure to use the correct key alias and password defined with the first script
First Check your version code and version name if you are updating your app. And make sure you have a previous keystore.
If you are updating app then follow step 1,3,4.
Step 1:
Goto your cordova project for generate our release build:
D:\projects\Phonegap\Example> cordova build --release android
Then, we can find our unsigned APK file in platforms/android/ant-build. In our example, the file was
if u used ant-build
yourproject/platforms/android/ant-build/Example-release-unsigned.apk
OR
if u used gradle-build
yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk
Step 2:
Key Generation:
Syntax:
keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>
if keytool command not recognize do this step
Check that the directory the keytool executable is in is on your path. (For example, on my Windows 7 machine, it's in C:\Program Files (x86)\Java\jre6\bin.)
Example:
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
Then the Key store has been generated with name as NAME-mobileapps.keystore
Step 3:
Place the generated keystore in D:\projects\Phonegap\Example\platforms\android\ant-build
To sign the unsigned APK, run the jarsigner tool which is also included in the JDK:
Syntax:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>
If it doesn't reconize do these steps
(1) Right click on "This PC" > right-click Properties > Advanced system settings > Environment Variables > select PATH then EDIT.
(2) Add your jdk bin folder path to environment variables, it should look like this:
"C:\Program Files\Java\jdk1.8.0_40\bin".
Example:
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'
This signs the apk in place.
Step 4:
Finally, we need to run the zip align tool to optimize the APK:
if zipalign not recognize then
(1) goto your android sdk path and find zipalign it is usually in android-sdk\build-tools\23.0.3
(2) Copy zipalign file paste into your generate release apk folder usually in below path
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
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
Now we have our final release binary called example.apk and we can release this on the Google Play Store.
Build cordova release APK file in cmd.
KEY STORE FILE PATH: keystore file path (F:/cordova/myApp/xxxxx.jks)
KEY STORE PASSWORD: xxxxx
KEY STORE ALIAS: xxxxx
KEY STORE ALIAS PASSWORD: xxxxx
PATH OF zipalign.exe: zipalign.exe file path (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
Run below steps in cmd (run as administrator)
- cordova build --release android
- go to android-release-unsigned.apk file location (PROJECT\platforms\android\build\outputs\apk)
- jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <KEY STORE FILE PATH> <ANDROID UNSIGNED APK NAME> <KEY STORE ALIAS>
- <PATH OF zipalign.exe> -v 4 <ANDROID UNSIGNED APK NAME> <ANDROID RELEASE APK NAME>
##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
'Programing' 카테고리의 다른 글
AWS 오류 메시지 : 현재이 리소스에 대해 충돌하는 조건부 작업이 진행 중입니다 (0) | 2020.06.04 |
---|---|
gradle을 사용하여 APK 파일 이름에서 versionName을 설정하는 방법은 무엇입니까? (0) | 2020.06.04 |
내 목록 항목 글 머리 기호가 부동 요소와 겹치는 이유 (0) | 2020.06.04 |
SqlAlchemy 결과를 JSON으로 직렬화하는 방법은 무엇입니까? (0) | 2020.06.04 |
화웨이, logcat이 내 앱의 로그를 표시하지 않습니까? (0) | 2020.06.04 |