为Gradle和Cordova 5指定签名配置

Max*_*xim 26 android gradle cordova

与Cordova对应的新闻 5.0.0版已经准备就绪.我试图升级我的所有Android项目,就像通常那样.

要更新Cordova框架本身:

npm update -g cordova
Run Code Online (Sandbox Code Playgroud)

要在Android项目中更新库:

cordova platform update android
Run Code Online (Sandbox Code Playgroud)

使用"--release"选项构建新版本后:

cordova build android --release
Run Code Online (Sandbox Code Playgroud)

我只有未签名的版本.奇怪......
那么如何重用现有的密钥库(以前由keytool生成并由Cordova 4.0.0使用)来获取签名APK?

Max*_*xim 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
Run Code Online (Sandbox Code Playgroud)

为保存在项目根目录中的密钥库指定了示例中的路径.它具有Windows风格...在Linux的情况下,您将需要使用单斜杠(不像上面的示例中那样使用双反斜杠).

此外,您可以设置自己的签名设置文件路径.要了解更多信息,请查看cordova文档的边缘版本.

  • 澄清我们需要把配置放在`platform/android/release-signing.properties`中 (3认同)

Ron*_*ein 44

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

{
     "android": {
         "release": {
             "keystore": "android.keystore",
             "storePassword": "storepassword",
             "alias": "mykey",
             "password" : "password",
             "keystoreType": ""
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

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

cordova build android --release会做的伎俩,不需要钩子,然后可以在./platform/android/build/outputs/apk中找到已知的apk文件作为android-release.apk .

  • 你把这个 build.json 放在哪个文件夹了? (2认同)
  • 这工作,但似乎密钥库的路径始终被认为是相对于构建文件,即你不能把"D:\\ SomeFolder \\ mystore.keystore",你必须使用相对path("..\..\SomeFolder\mystore.keystore"或类似) (2认同)
  • 这非常有效,感谢分享!您知道是否有办法自动更改生成的.apk文件的名称? (2认同)

Seb*_*jas 8

对于cordova 5.1.1+,请参阅Ronny Elflein r11lein回答/sf/answers/2168620541/

目前的答案是好的(通过@maxim),但我们希望保持平台特定的文件夹不受影响,因此我们可以将其保持在版本控制之外.所以我创建了这个Hook来自动复制android文件夹中的"release-signing.properties"文件.

因此,首先,将您的密钥库放在项目根目录中.然后在cordova项目的根目录中的文件夹config中创建"release-signing.properties".内容(示例中的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
Run Code Online (Sandbox Code Playgroud)

然后,添加如果不存在"hooks"文件夹中的"after_prepare"文件夹,并在其中创建一个名为"copy_assets.js"的文件.内容:

#!/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 + ' ======');
  });
});
Run Code Online (Sandbox Code Playgroud)

如果您没有在项目中使用ncp,请在项目文件夹根目录中打开命令promt并运行命令(您需要在项目根目录中创建一个packages.json文件):

npm install ncp
Run Code Online (Sandbox Code Playgroud)

然后,您可以运行:

cordova build android --release
Run Code Online (Sandbox Code Playgroud)