Укажите конфигурацию подписи для 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" должен находиться в одной папке.