React Native Generated Signed APK "Файл KeyStore, не установленный для подписания версии конфигурации"
Я пытаюсь создать подписанный APK. У меня есть файл password.keystore, расположенный в \Dictionary\android\app, и когда я запускал gradlew assembleRelease
на cmd, ошибка:
Выполнение не выполнено для задачи ': app: validateSigningRelease'.
Файл Keystore не установлен для подписания версии конфигурации
Где я должен хранить свой файл password.keystore? Потому что, когда я прокомментировал if (project.hasProperty("password.keystore") {
он работает, но со следующей ошибкой:
Не удалось обработать входящее событие "ProgressComplete" (ProgressCompleteEvent)
Как мне написать условие if, или где я должен хранить файл password.keystore?
Исходный код выглядит следующим образом:
signingConfigs {
release {
if (project.hasProperty("password.keystore")) {
storeFile file("password.keystore")
storePassword "password"
keyAlias "username"
keyPassword "password"
}
}
}
Ответы
Ответ 1
Файл хранилища ключей должен находиться в папке android/app.
Сообщение "Файл Keystore, не установленный для подписания файла конфигурации", должно сделать так, чтобы в файле android/app/build.gradle не было подписания кода.
buildTypes {
release {
// other settings
signingConfig signingConfigs.release
}
}
Для тестирования вы можете просто закодировать настройки в android/app/build.gradle, а не устанавливать его в gradle.properties. Это было исправление для меня проблема с "Keystore была подделана, или пароль был неправильным"
signingConfigs {
release {
//if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file("key.keystore")
storePassword "****"
keyAlias "myKey"
keyPassword "****"
// }
}
}
Ответ 2
Я нашел решение!
Если вы следовали официальным инструкциям React Native, как и я, вы добавляете следующее в свои 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>
А потом наступает момент, который я совершенно не понял.
В app/build.gradle
-file вы не должны заменять строки. Если ваш gradle.properties
похож на тот, который я вставил, ваш app/build.gradle
должен выглядеть так:
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
}
}
}
Первоначально я заменил строки (то есть 'MYAPP_RELEASE_STORE_FILE' на путь к моему хранилищу ключей -file), но вы не должны заменять какие-либо переменные вообще. Я предполагаю, что вы могли видеть связь между строками, которые мы создали в gradle.properties
и выпуском-config, который мы сделали в app/build.gradle
.
Не забудьте также иметь свой .keystore
-file внутри android/app
.
Ответ 3
У меня была такая же проблема. Оказывается, я забыл изменить файл gradle.properties. Он должен выглядеть так:
android.useDeprecatedNdk=true
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
Ответ 4
В моем случае мой проект был на RN версии 0.59, в то время как я использовал документацию 0,60 RC. Так что внутри app/build.gradle
Если версия 0.59:
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
Если версия 0.60:
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
Разница заключается в переходе с RELEASE
на UPLOAD
Ответ 5
project.hasProperty
будет искать в вашем файле gradle.properties
переменную с именем password.keystore.
Перейдите в ~/.gradle
и посмотрите, есть ли у gradle.properties
файл gradle.properties
, убедитесь, что переменная password.keystore
существует, она должна указывать на файл хранилища ключей: password.keystore=password.keystore
.
Хотя вы должны назвать это чем-то другим, например MYAPP_RELEASE_STORE_FILE=password.keystore
. Затем, когда вы запустите ./gradlew assembleRelease
ваш проект будет иметь свойство, которое он ищет, и следующее будет разрешать true и разрешить gradlew устанавливать все свойства signConfigs.release:
if (project.hasProperty(MYAPP_RELEASE_STORE_FILE)) {
storeFile file(...)
storePassword your_password_property
...
}
Ответ 6
Изучив все ответы на эту проблему, ни один из ответов не помог!
Так что попробовали под эксперимент, и это помогло !!!!
Поместите файл my-release-key.keystore
в каталог android в папке проекта.
Ответ 7
Я предпочитаю хранить эти параметры вне репо приложения, используя переменные среды, поскольку он содержит конфиденциальную информацию, такую как пароль и т.д.
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
}
}
}
Как только это будет сделано, я могу просто загрузить скрипт bash, который имеет такие детали, как
# path to my keystore
export MYAPP_RELEASE_STORE_FILE=/path/to/key.file
# ...
Таким образом, конфиг подписания полностью изолирован от репо. Это мешает вам совершать случайные коммиты с вашими секретами.
Ответ 8
Убедитесь, что вы разместили файл .keystore внутри папки приложения и делаете изменения в градиенте, как показано ниже:
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
Ответ 9
Убедитесь, что псевдоним, используемый в gradle.properties
, совпадает с тем, который использовался при создании keystore
(с помощью keytool
)