如何使用 Cordova 命令行界面创建签名 APK 文件?

我编写了一个名为 checkStatus的示例应用程序。现在我要创建一个签名的 APK 文件。所以我可以把它安装在不同的设备上进行测试。

为了这个,我谷歌了一下,找到了这个 文件

根据文档,我切换到我的项目目录并运行以下命令:

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

在运行以上命令之后,我在 projectRoot/key-name.keystore处得到一个名为 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)

所以这一次,我在 ant.properties文件中修改了 key.store值,如下所示。

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

同样,我运行了 cordova build android --release命令,它抛出了相同的错误。

有人能告诉我我做错了什么吗?

317076 次浏览

第一步:

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

添加 --save以便从 config.xml文件中删除插件。

第二步:

要为 Android 生成一个版本构建,我们首先需要对 Platform/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: deggable 标签:

解释“ HardcodedDebugMode”类型的问题: 最好在清单中省略 android: debug 属性。 如果您这样做,那么这些工具将自动插入 android: debug = true 在构建 APK 以便在模拟器或设备上进行调试时 执行版本构建(例如导出 APK)时,它将自动设置 是假的。

另一方面,如果在清单文件中指定特定的值, 那么工具就会一直使用它,这会导致意外发布 带有调试信息的应用程序。

第三步:

现在我们可以告诉 Cordova 生成我们的发布版本:

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

然后,我们可以在 platforms/android/ant-build中找到我们的无符号 APK 文件

第四步:

注意: 我们有我们的密钥存储 keystoreNAME-mobileapps.keystore在这个 Git 回购,如果你想创建另一个,请按照以下步骤进行。

关键一代:

句法:

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-mobile-apps. keystore 的 Key 存储

第五步:

将生成的密钥存储区放入

旧版 Cordova

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

新版 Cordova

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 就位。

第六步:

最后,我们需要运行 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 上发布它。

第一步:

转到 cordova\platforms\android ant,用密钥库文件信息创建一个名为 ant.properties文件的文件(这个密钥库可以从您最喜欢的 Android SDK,Studio... ... 生成) :

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

第二步:

进入 Cordova 路径并执行:

cordova build android --release

注意: 系统会提示您询问密钥存储库和密钥密码

一个 YourApp-release. apk 将出现在 \cordova\platforms\android\ant-build

在当前的 文件中,我们可以使用密钥库指定 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

对 Cordova 4(以及更高版本)的@malCubierre 的更新-

创建一个名为 release-signing.properties的文件并放入 APPFOLDER\platforms\android文件夹

文件内容: edit after = 用于除第2行之外的所有内容

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

然后这个命令应该构建一个发布版本:

cordova build android --release

更新-这是不工作的我 Cordova 10 with android 9-构建是取代发布签名。属性档案。我必须创建一个 build.json文件,并将其放到应用程序文件夹中,就像 root 一样。这是内容-如上所示替换:

{
"android": {
"release": {
"keystore": "C:/yourlocation/app.keystore",
"storePassword": "password",
"alias": "aliasname",
"password" : "aliaspass",
"keystoreType": ""
}
}
}

运行它,它将在 android 文件夹中生成其中一个 release-signing.properties

在 cordova 6.2.0 中,它有一个创建发布版本的简单方法。请参考此处的其他步骤 < a href = “ https://stackoverflow. com/a/26450074/1923045”> 步骤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

在 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 将作为 SignedApk.apk 放在您的 App 文件夹/Platform/android/build/output/apk/中 确保使用第一个脚本定义的正确的密钥别名和密码

首先检查您的版本代码和版本名称,如果您正在更新您的应用程序。并确保您以前有一个密钥存储库。

如果你更新应用程序,然后按照步骤1,3,4。

第一步:

去你的科尔多瓦项目生成我们的发布版本:

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

然后,我们可以在 Platform/android/ant-build 中找到未签名的 APK 文件

如果你使用蚂蚁建造

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

或者

如果你使用梯度构建

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 可执行文件所在的目录是否在路径上。(例如,在我的 Windows7机器上,它在 C: Program Files (x86) Javajre6 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-mobile-apps. keystore 的 Key 存储

第三步:

将生成的密钥存储区放入 项目 Phonegap 示例平台 android ant-build

要对未签名的 APK 进行签名,请运行 JDK 中包含的 jarsigner 工具:

句法:

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

如果没有意识到这些步骤

(1) 右键单击“ This 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 就位。

第四步:

最后,我们需要运行 zip 对齐工具来优化 APK:

如果 Zipalign 不承认那么

(1) 进入 android sdk 路径并找到 zipalign 它通常在 android-sdk build-tools 23.0.3中

(2) 将 zipalign 文件粘贴复制到生成版本的 apk 文件夹中,通常在下面的路径中

你的项目/平台/android/ant-build/示例-发布-无符号. 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 上发布它。

在 cmd 中构建 cordova 发布 APK 文件。

Keystore 文件路径 : keystore 文件路径(F:/cordova/myApp/xxxx.jks)

密钥存储密码 : xxxxx

KEY STORE ALIAS : xxxxx

密钥存储别名密码 : xxxxx

Zipalign.exe 的路径 : zipalign.exe 文件路径(C: Users xxxx AppData Local Android sdk build-tools 25.0.2 zipalign)

ANDROID-release-UNSIGNED. APK 名称 : ANDROID-release-UNSIGNED. APK

ANDROID-RELEASE. APK 名称 : ANDROID-RELEASE. APK

在 cmd 中运行以下步骤(作为管理员运行)

  1. Cordova 造型,释放机器人
  2. 转到 android-release-unsigned.apk 文件位置(PROJECT 平台 android build 输出 apk)
  3. Jarsigner-verose-sigalg SHA1 with RSA-digestalg SHA1-keystore < 密钥存储文件路径 > < 机器人没有签名的 APK 名字 > < 钥匙店的化名 >
  4. < Zipalign.exe 路径 >-v 4 < 机器人没有签名的 APK 名字 > < 机器人发布 APK 名称 >
##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

对于 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%

将它保存在 ptoproject 的目录中,您可以双击它或用 cmd 打开它。

好消息! 科尔多瓦10包括新的机器人版本与 app-release.aab