为Gradle和Cordova 5指定签名配置

时间:2015-05-07 16:12:31

标签: android cordova gradle

与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?

6 个答案:

答案 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
  • 2)复制生成的密钥库文件并粘贴到cd platforms \ android
  • 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
  • 4)建立cordova项目

cordova build android --release

  • 5)运行cordova项目

cordova运行android --release

  • 6)在以下路径中创建的Relese APK -

平台\机器人\构建\输出\ 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;应该在同一个文件夹中。