与Cordova news版本对应5.0.0已准备好。我尝试升级我通常的所有Android项目。
更新Cordova框架本身:
npm update -g cordova
更新Android项目中的库:
cordova platform update android
使用“--release”选项构建新版本后:
cordova build android --release
我只有未签名的版本。奇怪...
那么如何重用现有的密钥库(之前由keytool生成并由Cordova 4.0.0使用)来获取签名的APK?
答案 0 :(得分:50)
Cordova 5.0.0 使用 Gradle 构建自动化系统而不是 Ant 。因此,在构建期间不会使用文件“/platforms/android/ant.properties”中定义的密钥库的原始设置。因此,我们将获得未签名的APK。
要解决此问题,我们需要告诉Gradle也使用现有的密钥库。对build.gradle的研究为我们提供了有用的信息,我们需要提供signatureConfigs。
但是在这个文件中这样做是不明智的,因为它被标记为自动生成,它应该没有任何编辑。
所以最后我找到了解决它的方法。对象“signingConfigs”将从文件构造,文件名存储在 cdvReleaseSigningPropertiesFile 中。与文档相对应,此变量的默认值为“ release-signing.properties ”。因此,我们只需要在与“ build.gradle ”文件相同的文件夹中创建具有此类名称的新文件,并将其放在以下内容中:
storeFile=..\\..\\some-keystore.keystore
storeType=jks
keyAlias=some-key
// if you don't want to enter the password at every build, you can store it with this
keyPassword=your-key-password
storePassword=your-store-password
为项目根目录中保存的密钥库指定了示例中的路径。它具有Windows风格...如果是Linux,则需要使用单斜杠(不是上面示例中的双反斜杠)。
此外,您可以设置自己的签名设置文件路径。 要了解更多相关信息,请查看cordova documentation的边缘版本。
答案 1 :(得分:43)
根据official documentation(v5.1.1 +),我刚刚添加了 build.json
{
"android": {
"release": {
"keystore": "android.keystore",
"storePassword": "storepassword",
"alias": "mykey",
"password" : "password",
"keystoreType": ""
}
}
}
和我现有的 android.keystore 文件位于root cordova文件夹中。
cordova build android --release
可以解决这个问题,不需要钩子,然后可以在 ./ platform / android / build / outputs / apk中找到已知的apk文件 as android-release.apk
答案 2 :(得分:8)
对于cordova 5.1.1+,请参阅Ronny Elflein r11lein回答https://stackoverflow.com/a/30980293/2163398
目前的答案是好的(通过@maxim),但我们希望保持平台特定的文件夹不受影响,因此我们可以将其保持在版本控制之外。所以我创建了这个Hook来自动复制" release-signing.properties"文件在android文件夹中。
首先,将您的密钥库放在项目根目录中。然后创建" release-signing.properties"在您的cordova项目的根目录中的文件夹配置中。内容(示例中的storeFile路径是为保存在项目根目录中的密钥库指定的。它具有Windows样式...如果是Linux,则需要使用单斜杠):
storeFile=..\\..\\some-keystore.keystore
storeType=jks
keyAlias=some-key
// if you don't want to enter the password at every build, you can store it with this
keyPassword=your-key-password
storePassword=your-store-password
然后,添加如果不存在" after_prepare" "钩子里面的文件夹"文件夹,并在其中创建一个名为" copy_assets.js" .Contents:
的文件#!/usr/bin/env node
// Files to be copied, with source and destination
var ncp = require('ncp').ncp,
transfers = [
{
'source': './config/android/release-signing.properties',
'destination': './platforms/android/release-signing.properties'
}
];
ncp.limit = 16;
transfers.forEach(function(transfer) {
ncp(transfer.source, transfer.destination, function (err) {
if (err) {
return console.error(err);
}
console.log('====== Assets moved from ' + transfer.source + ' to ' + transfer.destination + ' ======');
});
});
如果您没有在项目中使用ncp,请在项目文件夹根目录中打开命令promt并运行命令(您需要在项目根目录中创建一个packages.json文件) :
npm install ncp
然后,您可以运行:
cordova build android --release
答案 3 :(得分:3)
要自动化构建发布过程,您应该在项目的文件夹中创建“build.json”并包含以下内容:
{
"android": {
"release": {
"keystore": "android.keystore",
"storePassword": "storepassword",
"alias": "mykey",
"password" : "password",
"keystoreType": ""
}
}
}
使用
生成关键字keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
如果您已有密钥库文件,只需运行以下命令即可了解所需内容
keytool -list -keystore .keystore
然后你必须运行
cordova build android --release
答案 4 :(得分:2)
步骤 - 1)生成密钥库证书
Syntax - keytool -genkey -v -keystore C:\DIR\APPNAME.keystore -alias APPNAME -keyalg RSA -keysize 2048 -validity 10000
3)为Gradle指定签名配置 创建文件属性文件 - release-signing.properties(文件名) 写下波纹管键和值
语法
storeFile=..\\..\\some-keystore.keystore
storeType=jks (pkcs12 for p12,jks for keystore)
keyAlias=some-key
// if you don't want to enter the password at every build, you can store it with this
keyPassword=your-key-password
storePassword=your-store-password
示例
storeFile= abc.keystore
storePassword=mypass
storeType=jks
keyAlias=abc
keyPassword=mypass
cordova build android --release
cordova运行android --release
平台\机器人\构建\输出\ APK
答案 5 :(得分:0)
在最新的gradle版本中,还可以创建名为" release-signing.properties"的文件。在" \ platforms \ android \"夹。内容应为:
storeFile=<your key>.keystore
storeType=jks
keyAlias=<your_alias>
keyPassword=<your_passwd>
storePassword=<your_passwd>
文件&#34; .keystore&#34;应该在同一个文件夹中。