【问题标题】:keystore not found for signing config 'release'.-- React native未找到用于签署配置“发布”的密钥库。-- 反应原生
【发布时间】:2017-12-29 04:24:41
【问题描述】:

我正在尝试为 react native 项目生成Signed APK。 遵循 android 和 react-native 文档中的步骤。

我的Build.gradle 文件

android {
compileSdkVersion 23
buildToolsVersion '26.0.2'

defaultConfig {
    applicationId "com.appmobile"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
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
        }
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
        // minifyEnabled enableProguardInReleaseBuilds
        // proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86"
    }
}
// buildTypes {
//     release {
//         minifyEnabled enableProguardInReleaseBuilds
//         proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
//     }
// }
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

}

我已将密钥库文件放在Android/app 目录中

我的grade.properties

    android.useDeprecatedNdk=true
MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore.jks
MYAPP_RELEASE_KEY_ALIAS=*****
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

执行cd android && ./gradlew assembleRelease时。

它的抛出构建失败

任务“:app:validateSigningRelease”执行失败。 未找到用于签署配置“发布”的密钥库文件 /Users/username/Projects/appMobile/android/app/sampleReleasekeyStore.jks。

我使用的是 Mac 环境。请让我知道我哪里出错了。

【问题讨论】:

  • 你确定sampleReleasekeyStore.jks在android/app上吗?
  • 是的。它在那里。@Tenten Ponce
  • @KartiikeyaBaleneni 你解决了这个问题吗?

标签: android react-native mobile signed-apk


【解决方案1】:

这种情况下的问题是路径。正如您上面已经提到的,在 app 文件夹中输入密钥。 然后在你的 .properties 中,不要命名整个路径,因为你已经在你的项目/应用程序中了。你只需要输入密钥的名称:

storePassword=my_password
keyPassword=my_password
keyAlias=key
storeFile=key.jks

【讨论】:

    【解决方案2】:
    1. 打开 Android Studio
    2. 将您的密钥库文件拖放到应用文件夹中
    3. 点击文件 -> 同步项目

    【讨论】:

    • 尝试了一切,这是唯一有效的方法。谢谢。
    • 对我不起作用
    【解决方案3】:

    这对我有用!

    1. https://facebook.github.io/react-native/docs/signed-apk-android.html
    2. 如图所示打开终端(库 -> Android -> ...)
    3. keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
    4. 当前文件夹中的 xxxx.keystore。

    【讨论】:

    • 运行上述命令后,系统会要求您输入密码,要输入该密码,您应该查看 build.gradle 文件
    【解决方案4】:

    // 对于 Mac 用户 第 1 步命令。

    keytool -genkey -v -keystore ~/ksk.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ksk 
    

    //对于windows用户 第 1 步命令。

    keytool -genkey -v -keystore C:/Users/USER_NAME/ksk.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias ksk
    

    //注意:请在终端中运行上述命令。输入每个输入值,例如名字和姓氏、组织名称、密码、城市、国家代码等。

    //第二步。适用于 Mac 和 Windows。创建文件key.properties“key”文件名和“properties”文件扩展名。

    //注意:保存在你的项目android文件夹中。

    //第三步。适用于 Mac 和 Windows // 编辑 key.properties 文件。在您创建 jks 文件时,使用终端中使用的适当值插入以下行。

    storePassword=storepassword
    keyPassword=password
    keyAlias=ksk
    storeFile=C:\\Users\\USER_NAME\\Desktop\\ksk.jks
    

    //注意如果是Mac用户,storeFile应该是storeFile=/Users/USER_NAME/ksk.jks

    // 第四步编辑 build.gradle 文件。在你的 defaultConfig 块之后复制粘贴以下两个块,替换现有的 builtTypes 时钟

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
        
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    

    //第5步编辑build.gradle文件在android { ...

    之前添加以下块
    def keystoreProperties = new Properties()
    def keystorePropertiesFile = rootProject.file('key.properties')
    if (keystorePropertiesFile.exists()) {
        keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    }
    

    //第六步运行命令

    flutter Clean
    

    //第7步运行命令。

    flutter build appbundle --release 
    

    //如果是AS菜单

    Build > Flutter > Build App Bundle
    

    //现在它应该在项目目录中构建包

    `build/app/output/bundle/release/app-release.aab`
    

    //一切顺利。

    【讨论】:

      【解决方案5】:

      尝试从MYAPP_RELEASE_STORE_FILE 中删除.jks,它对我有用。

      MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore
      

      【讨论】:

        【解决方案6】:

        我注意到 Gradle 总是在 android/app 路径中寻找这个文件。 (可能是硬编码)

        在你的情况下,将 sampleReleasekeyStore.jks 放在路径中;

        /Users/username/Projects/appMobile/android/app/
        

        提示:只需查看错误并将您的文件放在错误中指定的文件夹中。

        【讨论】:

          【解决方案7】:

          转到您的应用程序文件夹

          cd 安卓
          光盘应用程序

          并使用此命令生成您的调试密钥

          keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

          用于发布 APK

          keytool -genkey -v -keystore release.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

          【讨论】:

          • keytool -genkey -v -keystore release.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000
          【解决方案8】:

          在我的情况下,当我尝试在 MacOS 上打开在 Windows 中创建的项目时触发了此错误。

          即使将密钥库文件添加到应用程序文件夹,也会显示错误。

          Android Studio 似乎完全忽略了 myProject/android/gradle.properties 文件

          我必须如下设置本地~/.gradle/gradle.properties文件

          MYAPP_RELEASE_STORE_FILE=<file-release.keystore>
          MYAPP_RELEASE_KEY_ALIAS=<key-alias>
          MYAPP_RELEASE_STORE_PASSWORD=<password>
          MYAPP_RELEASE_KEY_PASSWORD=<keyPassword>
          

          【讨论】:

            【解决方案9】:

            有时您可以同时使用'MYAPP_UPLOAD_STORE_FILE''MYAPP_RELEASE_STORE_FILE'。确保名称在 gradles.propertiesbuild.gradle 之间匹配(对于所有属性)。

            【讨论】:

              【解决方案10】:

              在我的情况下,当没有 .jks 扩展名时,React Native 项目问题就来了。添加 .jks 扩展名解决了问题

              MYAPP_UPLOAD_STORE_FILE=upload.keystore.jks
              MYAPP_UPLOAD_KEY_ALIAS=upload
              MYAPP_UPLOAD_STORE_PASSWORD=**
              MYAPP_UPLOAD_KEY_PASSWORD=**
              
               signingConfigs {
              
                        release {
                                 if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                                     storeFile file(MYAPP_UPLOAD_STORE_FILE)
                                     storePassword MYAPP_UPLOAD_STORE_PASSWORD
                                     keyAlias MYAPP_UPLOAD_KEY_ALIAS
                                     keyPassword MYAPP_UPLOAD_KEY_PASSWORD
                                 }
              
                        }
                   }
                  ```
              

              【讨论】:

                【解决方案11】:

                在终端/命令提示符下键入以下命令:

                keytool -genkey -v -keystore your_keystore_fileName.keystore -alias your_alias -keyalg RSA -keysize 2048 -validity 10000
                

                输入提示的详细信息。

                确保生成的文件在 android/app.如果没有,请将文件剪切并粘贴到android/app下。

                在android/app下-> build.gradle:

                signingConfigs {
                    release {
                        storeFile file('your_keystore_fileName.keystore')
                        storePassword 'password_that_you_set'
                        keyAlias 'Partnerkey0'
                        keyPassword 'password_that_you_set'
                    }
                }
                

                【讨论】:

                  【解决方案12】:

                  只需将 rootProject.File 添加到 storeFile 即可访问密钥库。

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

                  【讨论】:

                    猜你喜欢
                    • 2020-09-22
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-04-27
                    • 1970-01-01
                    • 2012-07-05
                    • 2020-09-08
                    • 2015-05-17
                    • 2021-05-25
                    相关资源
                    最近更新 更多