发布配置中未找到用于签名的密钥库--React Native

42

我正在尝试为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”失败。 签名配置“release”的密钥库文件/Users/username/Projects/appMobile/android/app/sampleReleasekeyStore.jks未找到。

我正在使用Mac环境。请告诉我哪里出了问题。


1
你确定 sampleReleasekeyStore.jks 文件在 android/app 目录下吗? - Tenten Ponce
是的,它在那里。@Tenten Ponce - Kartiikeya
@KartiikeyaBaleneni,你解决了这个问题吗? - Zuha Karim
14个回答

23

这种情况的问题在于路径。正如您之前已经提到过的那样,将密钥输入应用程序文件夹中。 然后在您的 .properties 文件中,不要命名整个路径,因为您已经在项目/应用程序中了..您只需要输入密钥的名称:

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

另外,名称前面不应该有任何“\”。 - Hamed Rahimvand

9
  1. 打开Android Studio
  2. 将您的密钥库文件拖放到应用程序文件夹中
  3. 单击文件->同步项目

2
尝试了所有的方法,只有这个有效。谢谢。 - Rob
1
没对我起作用。 - David S

5

运行上述命令后,系统会要求您输入密码。为了输入密码,您应该查看build.gradle文件。 - Akshay Vijay Jain

5

// 适用于Mac用户 第一步:输入命令。

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

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

//步骤2. 适用于Mac和Windows。创建一个名为key.properties的文件,“key”是文件名,“properties”是文件扩展名。

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

//步骤3. 适用于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
//步骤4:编辑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

//第七步运行命令。

flutter build appbundle --release 

//如果AS菜单存在

Build > Flutter > Build App Bundle

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

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

//祝一切顺利。


2

前往您的应用程序文件夹

cd android
cd app

使用以下命令生成您的调试密钥

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

enter image description here

对于发布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 - Keshav Gera

2
尝试从MYAPP_RELEASE_STORE_FILE中移除.jks,对我有效。
MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore

2
在我的情况下,当我尝试在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>

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

1
我注意到Gradle总是在android/app路径中查找此文件。(可能已硬编码)
在您的情况下,请将sampleReleasekeyStore.jks放置在该路径中;
/Users/username/Projects/appMobile/android/app/

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

1
在我的情况下,key.properties文件中有一行带有空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接