Ben*_*min 16 gradle gradlew build.gradle android-gradle-plugin react-native
我正在尝试生成已签名的APK.我的密码.keystore文件位于\ Dictionary\android\app中,当我gradlew assembleRelease在cmd上运行时,错误:
任务':app:validateSigningRelease'的执行失败.
密钥库文件未设置为签名配置版本
我应该在哪里存储我的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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
Yor*_*uba 22
该密钥库文件必须在Android设备/应用程序文件夹中.
消息'未设置签名配置版本的密钥库文件'必须这样做,android/app/build.gradle文件中没有signedConfig.
buildTypes {
release {
// other settings
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
对于测试,你可以硬编码android/app/build.gradle中的设置,而不是在gradle.properties中设置它.这给我解决了'Keystore被篡改或密码不正确'的问题
signingConfigs {
release {
//if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file("key.keystore")
storePassword "****"
keyAlias "myKey"
keyPassword "****"
// }
}
}
Run Code Online (Sandbox Code Playgroud)
Sca*_*der 12
就我而言,我的项目使用的是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
小智 9
我找到了解决方案!
如果您像我一样按照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>
Run Code Online (Sandbox Code Playgroud)
然后是我完全误解的部分。
在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我最初所做的是用我的密钥库文件的路径替换字符串(即“ MYAPP_RELEASE_STORE_FILE”),但是您根本不应替换任何变量。我想您会看到我们在其中创建的字符串与我们在其中创建gradle.properties的release-config 之间的联系app/build.gradle。
记住也要包含.keystore-file文件android/app。
实际上,我更喜欢使用环境变量将这些参数存储在应用程序存储库之外,因为它包含密码等敏感信息。
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我可以加载一个 bash 脚本,其中包含以下详细信息
# path to my keystore
export MYAPP_RELEASE_STORE_FILE=/path/to/key.file
# ...
Run Code Online (Sandbox Code Playgroud)
这样签名配置就与存储库完全隔离。这可以防止您意外泄露您的秘密。
project.hasProperty将在您的gradle.properties文件中查找名为password.keystore的变量。
进入~/.gradle并查看是否有gradle.properties文件,如果有,请确保变量password.keystore存在,它应该指向您的密钥库文件:password.keystore=password.keystore。
尽管您应该将其命名为不同的名称,例如MYAPP_RELEASE_STORE_FILE=password.keystore. 然后,当您运行./gradlew assembleRelease项目时,将具有它正在寻找的属性,并且以下内容将解析为 true 并允许 gradlew 设置所有signingConfigs.release属性:
if (project.hasProperty(MYAPP_RELEASE_STORE_FILE)) {
storeFile file(...)
storePassword your_password_property
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25990 次 |
| 最近记录: |