web-dev-qa-db-fra.com

React Native Generating Signed APK "Fichier KeyStore non défini pour la signature de la version de configuration"

J'essaie de générer un fichier APK signé. J'ai mon fichier password.keystore situé dans\Dictionary\Android\app et quand j'ai exécuté gradlew assembleRelease sur cmd, l'erreur:

L'exécution a échoué pour la tâche ': app: validateSigningRelease'.

Fichier de clés non défini pour la signature de la version de configuration

Où devrais-je stocker mon fichier password.keystore? Parce que quand j'ai commenté la if (project.hasProperty("password.keystore") {, cela semble fonctionner, mais avec l'erreur suivante:

Impossible de traiter l'événement entrant 'ProgressComplete' (ProgressCompleteEvent)

Comment dois-je écrire ma condition si ou où dois-je stocker le fichier password.keystore?

Le code source est le suivant:

signingConfigs {
  release {
    if (project.hasProperty("password.keystore")) {
      storeFile file("password.keystore")
      storePassword "password"
      keyAlias "username"
      keyPassword "password"
    }
  }
}
7
Benjamin

Le fichier keystore doit se trouver dans le dossier Android/app .

Le message "Le fichier de clés non défini pour la signature de la version de configuration" doit faire en sorte qu'il n'y ait pas de signatureConfig dans le fichier Android/app/build.gradle.

buildTypes {
    release {
        // other settings
        signingConfig signingConfigs.release
    }
}

Pour tester, vous pouvez simplement coder en dur les paramètres dans Android/app/build.gradle, au lieu de les définir dans gradle.properties. Cela corrigeait pour moi le problème avec 'Keystore a été falsifié ou le mot de passe était incorrect'

  signingConfigs {
    release {
        //if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
            storeFile file("key.keystore")
            storePassword "****"
            keyAlias "myKey"
            keyPassword "****"
       // }
    }
}
14
Yoruba

J'ai trouvé une solution!

Si vous avez suivi les instructions officielles de Réagissez Native , comme moi, vous ajoutez ce qui suit à votre gradle.properties

MYAPP_RELEASE_STORE_FILE=<your-app>.keystore
MYAPP_RELEASE_KEY_ALIAS=<keystore-alias>
MYAPP_RELEASE_STORE_PASSWORD=<password>
MYAPP_RELEASE_KEY_PASSWORD=<password>

Et puis vient la partie que j'ai totalement mal comprise.

Dans le fichier app/build.gradle-, vous êtes pas censé remplacer les chaînes. Si votre gradle.properties est semblable à celui que j'ai collé, votre app/build.gradle devrait ressembler à ceci:

signingConfigs {
    release {
        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
    }
}

Ce que j’avais fait à l’origine, c’est que j'ai remplacé les chaînes (c'est-à-dire 'MYAPP_RELEASE_STORE_FILE' par le chemin d'accès à mon fichier de magasin de clés), mais vous n'êtes pas censé remplacer les variables. Je suppose que vous pouvez voir le lien entre les chaînes que nous avons créées dans gradle.properties et le release-config que nous avons créé dans app/build.gradle.

N'oubliez pas de placer également votre fichier .keystore- dans Android/app.

4
Ola Alsaker

J'ai eu exactement le même problème. J'ai oublié d'éditer le fichier gradle.properties. Ça devrait ressembler à ça:

Android.useDeprecatedNdk=true

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
2
Ankymtan

Après avoir exploré toutes les réponses concernant ce problème, aucune des réponses n’a été utile!

Donc essayé ci-dessous l'expérience et ça a aidé !!!!

Placez le fichier my-release-key.keystore sous le répertoire Android dans le dossier de votre projet.

1
Kishore Jethava

En fait, je préfère stocker ces paramètres en dehors du référentiel d’application à l’aide de variables d’environnement car il contient des informations sensibles telles que mot de passe, etc.

signingConfigs {
    release {
        if (System.env.MYAPP_RELEASE_STORE_FILE != null) {
            storeFile       file(System.env.MYAPP_RELEASE_STORE_FILE)
            storePassword   System.env.MYAPP_RELEASE_STORE_PASSWORD
            keyAlias        System.env.MYAPP_RELEASE_KEY_ALIAS
            keyPassword     System.env.MYAPP_RELEASE_KEY_PASSWORD
        }
    }
}

Une fois que cela est fait, je peux juste charger un script bash qui a les détails comme

# path to my keystore
export MYAPP_RELEASE_STORE_FILE=/path/to/key.file
# ...

De cette façon, la configuration de la signature est complètement isolée du repo. Cela vous empêche de faire des commits accidentels avec vos secrets.

1
EFreak

project.hasProperty recherchera dans votre fichier gradle.properties une variable nommée password.keystore.

Allez dans ~/.gradle et voyez si vous avez un fichier gradle.properties; si c'est le cas, assurez-vous que la variable password.keystore est présente, elle devrait pointer vers votre fichier de clés: password.keystore=password.keystore.

Bien que vous deviez nommer quelque chose de différent, comme MYAPP_RELEASE_STORE_FILE=password.keystore. Ensuite, lorsque vous exécuterez ./gradlew assembleRelease, votre projet aura la propriété recherchée et ce qui suit résoudra true et permettra à gradlew de définir toutes les propriétés deingerConfigs.release:

if (project.hasProperty(MYAPP_RELEASE_STORE_FILE)) {
    storeFile file(...)
    storePassword your_password_property
    ...
}
1
JmJ

Assurez-vous d’avoir placé votre fichier .keystore dans le dossier de l’application et effectuez les changements de niveau comme ci-dessous: 

    signingConfigs {
    release {
        storeFile file(RELEASE_STORE_FILE)
        storePassword RELEASE_STORE_PASSWORD
        keyAlias RELEASE_KEY_ALIAS
        keyPassword RELEASE_KEY_PASSWORD
    }
}
0
Sanjay Mallur

Assurez-vous que le nom d'alias utilisé dans gradle.properties est identique à celui utilisé lors de la création de keystore (en utilisant keytool)

0
Yuvraj Patil