我制作了一个名为checkStatus
的示例应用程序。现在我想创建一个签名的APK文件。所以我可以将它安装在不同的设备上进行测试。
为此,我用Google搜索并找到了documentation。
根据文档,我切换到我的项目目录并运行以下命令:
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
命令。它会抛出相同的错误。
有谁能告诉我我做错了什么?
答案 0 :(得分:274)
D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save
添加--save
,以便从config.xml
文件中删除插件。
要为Android生成发布版本,我们首先需要对在platforms / android中找到的AndroidManifest.xml
文件进行一些小改动。编辑文件并更改行:
<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属性。 如果你这样做,那么这些工具会自动插入android:debuggable = true 在构建APK以在模拟器或设备上进行调试时。当你 执行发布版本,例如导出APK,它会自动设置 它是假的。
另一方面,如果您在清单文件中指定特定值, 然后工具将始终使用它。这可能导致意外发布 您的应用程序包含调试信息。
现在我们可以告诉cordova生成我们的发布版本:
D:\projects\Phonegap\Example> cordova build --release android
然后,我们可以在platforms/android/ant-build
中找到我们的未签名APK文件。在我们的示例中,文件为platforms/android/ant-build/Example-release-unsigned.apk
注意:我们在此Git Repo中有我们的密钥库keystoreNAME-mobileapps.keystore
,如果您想创建另一个,请继续执行以下步骤。
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
的密钥库将生成的密钥库放在
中旧版cordova
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>
D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps
OR
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到位。
最后,我们需要运行zip对齐工具来优化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
OR
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商店中发布。
答案 1 :(得分:108)
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 :(得分:48)
在当前documentation中,我们可以使用keystore指定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
答案 3 :(得分:19)
第1步:
转到cordova\platforms\android
ant创建一个名为ant.properties
文件的文件,其中包含密钥库文件信息(此密钥库可以从您最喜爱的Android SDK,工作室生成...):
key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias
<强>步骤2:强>
转到cordova路径并执行:
cordova build android --release
注意:系统会提示您询问密钥库和密钥密码
YourApp-release.apk将显示在\cordova\platforms\android\ant-build
答案 4 :(得分:11)
在cordova 6.2.0 中,它有一种简单的方法来创建发布版本。请参阅此处的其他步骤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
答案 5 :(得分:6)
在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将在你的App文件夹/ platforms / android / build / outputs / apk /中作为SignedApk.apk 确保使用第一个脚本
定义的正确密钥别名和密码答案 6 :(得分:0)
首先检查您的版本代码和版本名称,如果您要更新您的应用程序。并确保您拥有以前的密钥库。
如果您要更新应用,请按照步骤1,3,4进行操作。
转到您的cordova项目以生成我们的发布版本:
D:\projects\Phonegap\Example> cordova build --release android
然后,我们可以在platforms / android / ant-build中找到我们的未签名APK文件。在我们的示例中,文件是
如果你使用了ant-build
yourproject/platforms/android/ant-build/Example-release-unsigned.apk
或强>
如果您使用了gradle-build
yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk
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
的密钥库将生成的密钥库放入 d:\项目\的PhoneGap \实施例\平台\机器人\ Ant的构建
要签署未签名的APK,请运行jarsigner工具,该工具也包含在JDK中:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>
如果它没有重新进行这些步骤
(1)右键单击&#34;此PC&#34; &GT;右键单击属性&gt;高级系统设置&gt;环境变量&gt;选择PATH然后编辑。
(2)将您的jdk bin文件夹路径添加到环境变量中,它应如下所示:
&#34; C:\ Program Files \ Java \ jdk1.8.0_40 \ bin&#34;。
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到位。
最后,我们需要运行zip对齐工具来优化APK:
如果zipalign无法识别
(1)转到你的android sdk路径并找到zipalign它通常在android-sdk \ build-tools \ 23.0.3
(2)将zipalign文件粘贴到生成版本的apk文件夹中,通常位于以下路径
yourproject /平台/机器人/蚂蚁构建/实施例离型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
现在我们有一个名为example.apk的最终发布二进制文件,我们可以在Google Play商店中发布。
答案 7 :(得分:0)
在cmd中构建cordova release APK文件。
KEY STORE 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文件路径(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
在cmd中运行以下步骤(以管理员身份运行)
答案 8 :(得分:0)
##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
答案 9 :(得分:0)
对于Windows,我已经创建了一个build.cmd
文件:
(替换密钥库路径和别名)
对于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%
对于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打开它。