Укажите конфигурацию подписи для Gradle и Cordova 5

В соответствии с 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?

Ответ 1

Похоже, что Cordova 5.0.0 использует Gradle систему автоматизации сборки вместо Ant. Поэтому исходные настройки для хранилища ключей, определенные в файле "/platforms/android/ ant.properties", не будут использоваться во время строительства. В результате мы получим unsigned APK.

Чтобы решить эту проблему, нам нужно сказать Gradle, чтобы использовать существующее хранилище ключей. Исследование build.gradle дает нам полезную информацию, которую мы должны предоставить для подписания.

Но это плохая идея сделать это в этом файле, потому что она помечена как автоматически сгенерированная, и она не должна содержать никаких изменений.

Итак, наконец, я нашел способ его решить. Объект "signConfigs" будет создан из файла с именем файла, хранящегося в 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 вам нужно будет использовать одиночные слэши (а не двойные обратные черты, как в приведенном выше примере).

Кроме того, вы можете установить свой собственный путь для подписания файла настроек. Чтобы узнать больше об этом, проверьте версию кордовой документации.

Ответ 2

Согласно официальной документации (v5.1.1 +), я только что добавил build.json

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

и мой существующий файл android.keystore в корневой папке кордовы.

cordova build android --release выполнит трюк, никаких перехватов не потребуется, а также файл apk файла можно найти в. /platform/android/build/outputs/apk как Android-релиз .apk .

Ответ 3

Для кордовы 5.1.1+ обратитесь к Ronny Elflein r11lein answer fooobar.com/questions/25532/...

Текущий ответ хорош (by @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" внутри папки "hooks", и создайте в ней файл с именем "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 + ' ======');
  });
});

Если вы не используете ncp в своем проекте, откройте команду promt в корне папки проекта и запустите команду (возможно, вам нужно создать файл package.json в корне вашего проекта):

npm install ncp

Затем вы можете запустить:

cordova build android --release

Ответ 4

Чтобы автоматизировать процесс выпуска сборки, вы должны создать "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

Если у вас уже есть файл хранилища ключей, просто запустите приведенную ниже команду, чтобы узнать требуемый контент

keytool -list -keystore .keystore

Тогда вам просто нужно запустить

cordova build android --release

Ответ 5

Steps - 1) Создать сертификат хранилища ключей

Syntax -  keytool -genkey -v -keystore C:\DIR\APPNAME.keystore -alias APPNAME -keyalg RSA -keysize 2048 -validity 10000
  • 2) Скопируйте созданный файл хранилища ключей и вставьте в cd-платформы\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

corova build android --release

  • 5) Запустите проект cordova

Кордова запускает андроид - освобождение

  • 6) Relese APK, созданный по следующему пути -

платформы\Android\сборка\выходы\APK

Ответ 6

В последней версии gradle также возможно создать файл с именем "release-signing.properties" в папке "\ platform\android". Содержимое должно быть:

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

Файл ".keystore" должен находиться в одной папке.