为Gradle和Cordova 5指定签名configuration

在符合cordova消息版本5.0.0准备就绪。 我试图升级所有我的Android项目,就像通常一样。

更新Cordova框架本身:

npm update -g cordova 

在Android项目中更新库:

 cordova platform update android 

使用“–release”选项构build新版本后:

 cordova build android --release 

我只有未签名的版本。 奇怪…
那么如何重新使用现有的keystore(以前由keytool生成并由Cordova 4.0.0使用)才能获得已签名的APK?

Solutions Collecting From Web of "为Gradle和Cordova 5指定签名configuration"

它看起来像cordova5.0.0使用Gradle构build自动化系统,而不是Ant 。 因此,在构build过程中将不会使用文件“/platforms/android/ant.properties”中定义的keystore的原始设置。 所以我们会得到未签名的APK。

为了解决这个问题,我们需要告诉Gradle也使用现有的密钥库。 build.gradle的调查为我们提供了有用的信息,我们需要提供signedConfigs。

但是在这个文件中这样做是不好的,因为它被标记为自动生成,并且应该没有任何编辑。

所以最后我find了解决的办法。 对象“signingConfigs”将由cdvReleaseSigningPropertiesFile中存储的文件构build 。 与文档一致,这个variables的默认值是“ release-signing.properties ”。 所以我们只需要在“ build.gradle ”文件所在的同一个文件夹中创build这样一个名字的新文件,并放入以下内容:

 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 

指定保存在项目根目录中的密钥库的示例中的path。 它有Windows风格…在Linux的情况下,你将需要使用单斜杠(而不是像上面的例子中的双反斜杠)。

另外,您可以设置自己的path来签名设置文件。 要阅读更多关于检查cordova文档的边缘版本。

根据官方文档 (v5.1.1 +),我刚刚添加了一个build.json

 { "android": { "release": { "keystore": "android.keystore", "storePassword": "storepassword", "alias": "mykey", "password" : "password", "keystoreType": "" } } } 

和我的现有android.keystore文件在根cordova文件夹中。

cordova build android --release会执行这个技巧,不需要钩子,然后可以在./platform/android/build/outputs/apk中find单独的apk文件,就像android-release.apk一样

对于cordova 5.1.1+,请参阅Ronny Elflein r11lein回答https://stackoverflow.com/a/30980293/2163398

目前的答案是好的(通过@maxim),但我们希望保持平台特定的文件夹不变,所以我们可以保持版本控制。 所以我创build了这个Hook来自动复制android文件夹中的“release-signing.properties”文件。

所以,首先将你的密钥库放在你的项目根目录下。 然后在cordova项目的根目录下的config文件夹中创build“release-signing.properties”。 内容(例子中的storeFilepath是为项目根目录中保存的keystore指定的,它具有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 

然后,添加如果不存在“hooks”文件夹内的“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并运行命令(这是可行的,你需要在你的项目根目录下创build一个packages.json文件):

 npm install ncp 

然后,你可以运行:

 cordova build android --release 

要自动执行构build发布过程,您应该在项目文件夹中创build“build.json”,并包含以下内容:

 { "android": { "release": { "keystore": "android.keystore", "storePassword": "storepassword", "alias": "mykey", "password" : "password", "keystoreType": "" } } } 

keytore是使用生成的

 keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 

如果你已经有一个keystore文件,只需运行下面的命令来知道所需的内容

 keytool -list -keystore .keystore 

那么你只需要跑步

 cordova build android --release 

步骤 – 1)生成密钥库证书

 Syntax - keytool -genkey -v -keystore C:\DIR\APPNAME.keystore -alias APPNAME -keyalg RSA -keysize 2048 -validity 10000 
  • 2)复制生成的密钥库文件并粘贴到cd平台\ android
  • 3)为Gradle指定签名configuration创build文件属性文件 – 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 
  • 4)build立cordova项目

cordova build android –release

  • 5)运行cordova项目

cordova运行android –release

  • 6)在下面的path创build的APK –

平台\机器人\编译\输出\ APK

在最新的gradle版本中,也可以在“\ platforms \ android \”文件夹中创build一个名为“release-signing.properties”的文件。 内容应该是:

 storeFile=<your key>.keystore storeType=jks keyAlias=<your_alias> keyPassword=<your_passwd> storePassword=<your_passwd> 

文件“.keystore”应该在同一个文件夹中。