web-dev-qa-db-fra.com

Spécifier la configuration de la signature pour Gradle et Cordova 5

En correspondance avec Cordova news la version 5.0.0 est prête. J'ai essayé de mettre à jour tous mes projets Android comme d'habitude.

Pour mettre à jour le framework Cordova lui-même:

npm update -g cordova

Pour mettre à jour la bibliothèque dans le projet Android:

cordova platform update Android

Après avoir construit la nouvelle version en utilisant l’option "--release":

cordova build Android --release

Je n'ai que la version non signée. Étrange...
Alors, comment est-il possible de réutiliser le magasin de clés existant (précédemment généré par keytool et utilisé par Cordova 4.0.0) pour obtenir un APK signé?

26
Maxim

Il semble que Cordova 5.0.0 utilise le système d’automatisation de la construction Gradle au lieu de Ant. Par conséquent, les paramètres d'origine du fichier de clés définis dans le fichier "/platforms/Android/ant.properties" ne seront pas utilisés lors de la construction. Nous aurons donc un fichier APK non signé en conséquence. 

Pour résoudre ce problème, nous devons dire à Gradle d'utiliser également le magasin de clés existant. L'enquête sur build.gradle nous fournit des informations utiles dont nous avons besoin pour fournir des signatures de signature. 

Mais c’est une mauvaise idée de le faire dans ce fichier car il est étiqueté comme généré automatiquement et il devrait être exempt de toute édition. 

Alors finalement j'ai trouvé le moyen de le résoudre. L'objet "signatureConfigs" sera construit à partir d'un fichier avec le nom de fichier stocké dans cdvReleaseSigningPropertiesFile. En correspondance avec la documentation, la valeur par défaut de cette variable est "release-signing.properties _". Il suffit donc de créer un nouveau fichier avec ce nom dans le même dossier que le fichier "build.gradle" et de le placer dans le contenu suivant:

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

Le chemin dans l'exemple est spécifié pour le magasin de clés enregistré dans le répertoire racine du projet. Il a le style de Windows ... Dans le cas de Linux, vous devrez utiliser des barres obliques simples (et non des barres obliques inverses comme dans l'exemple ci-dessus).

De plus, vous pouvez définir votre propre chemin pour la signature du fichier de paramètres . Pour en savoir plus à ce sujet, consultez la version Edge de cordova documentation .

50
Maxim

Selon documentation officielle (v5.1.1 +), je viens d’ajouter un build.json 

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

et mon fichier Android.keystore existant dans le dossier racine Cordova.

cordova build Android --release fera l'affaire, aucun crochet n'est nécessaire, le fichier apk singned peut alors être trouvé dans ./platform/Android/build/outputs/apk comme Android-release.apk .

43

Pour Cordova 5.1.1+, reportez-vous à Ronny Elflein r11lein answer https://stackoverflow.com/a/30980293/2163398

La réponse actuelle est bonne (par @maxim), mais nous voulons garder le dossier spécifique à la plate-forme intact, afin de pouvoir le conserver en dehors du contrôle de version. J'ai donc créé ce crochet pour copier automatiquement le fichier "release-signing.properties" dans le dossier Android.

Alors, commencez par placer votre magasin de clés dans la racine de votre projet. Créez ensuite le "release-signing.properties" dans le dossier config, à la racine de votre projet cordova. Contenu (le chemin storeFile dans l'exemple est spécifié pour le fichier de clés enregistré dans le répertoire racine du projet. Il a le style Windows ... Dans le cas de Linux, vous devrez utiliser des barres obliques simples):

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

Ajoutez ensuite, s’il n’existe pas, le dossier "after_prepare" dans le dossier "hooks" et créez-y un fichier appelé "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 + ' ======');
  });
});

Si vous ne possédez pas de ncp dans votre projet, ouvrez une commande de commande dans la racine du dossier de projet et exécutez-la (vous pouvez éventuellement créer un fichier packages.json à la racine de votre projet):

npm install ncp

Ensuite, vous pouvez exécuter:

cordova build Android --release
8
Sebastián Rojas

Pour automatiser le processus de version, vous devez créer "build.json" dans le dossier de votre projet et inclure le contenu suivant:

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

Le keytore est généré en utilisant

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

Si vous avez déjà un fichier de magasin de clés, exécutez la commande ci-dessous pour connaître le contenu requis.

keytool -list -keystore .keystore

Ensuite, il suffit de courir

cordova build Android --release
3
Filipe Pinto

Étapes - 1) Générer un certificat de magasin de clés 

Syntax -  keytool -genkey -v -keystore C:\DIR\APPNAME.keystore -alias APPNAME -keyalg RSA -keysize 2048 -validity 10000
  • 2) Copiez le fichier de magasin de clés généré et collez-le sur les plates-formes cd\Android. 
  • 3) Spécifiez la configuration de signature pour Gradle Créer un fichier de propriétés de fichier - release-signing.properties (nom de fichier) Écrivez les clés et les valeurs ci-dessous

    Syntaxe 

            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
    

Exemple 

        storeFile= abc.keystore
        storePassword=mypass
        storeType=jks
        keyAlias=abc
        keyPassword=mypass
  • 4) Construire le projet Cordova 

cordova construire Android - libération

  • 5) Exécuter le projet Cordova 

cordova run Android - release

  • 6) Relese APK créé dans le chemin suivant -

plates-formes\Android\build\sorties\apk

2
Ravi

Dans la dernière version de Gradle, il est également possible de créer un fichier nommé "release-signing.properties" dans le dossier "\ plateformes\Android \". Le contenu devrait être:

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

Le fichier ".keystore" devrait se trouver dans le même dossier.

0
Filipe Pinto