2017-06-05 32 views
1

我正尝试生成已签名的APK。我的密码.keystore文件位于\ Dictionary \ android \ app,当我在cmd上运行gradlew assembleRelease时,错误:React Native生成已签名APK未设置用于签署配置版本的KeyStore文件

任务':app:validateSigningRelease'的执行失败。

密钥库文件中未设置签名配置版本

我应该在哪里存储我的password.keystore文件?因为当我评论关闭if (project.hasProperty("password.keystore") {似乎工作,但与下面的错误,而不是:

无法处理传入的事件“ProgressComplete”(ProgressCompleteEvent)

我应该如何写我的,如果条件或我应该在哪里存储password.keystore文件?

的源代码如下:

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

看来你正在尝试生成签名APK ..对不对? – Codesingh

+0

@Codesingh是的,似乎'project.hasProperty(“password.keystore”)'返回false,所以当我排除if语句时,代码运行。但是我清楚在\ Dictionary \ android \ app中有一个名为password.keystore的文件。 – Benjamin

+0

一旦我在应用程序开发的这一部分也是struct,那么我开始从android studio窗口顶部的build选项生成签名的apk。 – Codesingh

回答

0

project.hasProperty会看着你的gradle.properties文件中的变量命名password.keystore。

走进~/.gradle,看看是否有一个gradle.properties文件,如果你这样做,确保变量password.keystore是存在的,它应该指向密钥存储文件:password.keystore=password.keystore

尽管您应该将其命名为不同的东西,例如MYAPP_RELEASE_STORE_FILE=password.keystore。然后,当你运行你的./gradlew assembleRelease项目将有它寻找的属性和下面将解决真实,让gradlew设定所有signingConfigs.release属性:

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

密钥库文件必须在android/app文件夹。

消息'Keystore file not set for signing config release'必须这样做,android/app/build.gradle文件中没有签名配置。

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

为了测试你可以在Android /应用/的build.gradle硬编码的设置,而不是关在gradle.properties设置。这与固定我的问题“密钥库被篡改,或密码不正确”

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

我有完全一样的问题。转出我忘了编辑gradle.properties文件。它应该看起来像这样:

android.useDeprecatedNdk=true 

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore 
MYAPP_RELEASE_KEY_ALIAS=my-key-alias 
0

在探索了关于此问题的所有答案后,没有任何答案有帮助!

所以尝试下面的实验,它有助于!

my-release-key.keystore文件放在您的项目文件夹中的android目录下。

+0

'my-release-key.keystore'表示文件的路径,更具体地说是'。/ my-release-key.keystore'。它在android目录下工作,因为这是Gradle的工作目录,用于特定的执行。你可以硬编码一个绝对路径,如果你想 – EFreak

+0

这不适合我 –

0

其实我更喜欢使用环境变量来存储应用外回购这些参数,因为它包含了诸如密码的敏感信息等

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 
# ... 

这种方式签署配置是从回购完全隔离。这可以防止你意外提交你的秘密。

相关问题