Android 找不到签名配置的密钥库';发布';——自然反应

Android 找不到签名配置的密钥库';发布';——自然反应,android,react-native,mobile,signed-apk,Android,React Native,Mobile,Signed Apk,我正在尝试为react native项目生成一个签名的APK。 遵循android和react本机文档中的步骤 我的Build.gradle文件 android { compileSdkVersion 23 buildToolsVersion '26.0.2' defaultConfig { applicationId "com.appmobile" minSdkVersion 16 targetSdkVersion 22 versionCo

我正在尝试为react native项目生成一个
签名的APK
。 遵循android和react本机文档中的步骤

我的
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
目录中

`build/app/output/bundle/release/app-release.aab`
我的
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 assemblererelease

它的投掷建造失败了

任务“:app:validateSigningRelease”的执行失败。 找不到用于签名配置“release”的密钥库文件/Users/username/Projects/appMobile/android/app/sampleEleaseKeystore.jks


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

尝试从
MYAPP\u RELEASE\u STORE\u文件
中删除
.jks
,这对我很有效

MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore
这对我有用

  • 像图片一样打开终端(库->安卓->…)
  • keytool-genkey-v-keystore my-release-key.keystore-alias my key alias-keyalg RSA-keysize 2048-validity 10000
  • xxxx.keystore在当前文件夹中

  • 我注意到Gradle总是在android/app路径中查找此文件。(可能是硬编码的)

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

    /Users/username/Projects/appMobile/android/app/
    
    提示:只需查看错误并将文件放入错误中指定的文件夹中即可

  • 开放安卓工作室
  • 将密钥库文件拖放到应用程序文件夹上
  • 单击文件->同步项目

  • 只需将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
        }
    

    在我的例子中,这个错误是在我试图打开在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>
    
    MYAPP\u发布\u存储\u文件=
    MYAPP\u发布\u密钥\u别名=
    MYAPP\发布\存储\密码=
    MYAPP\u发布\u密钥\u密码=
    
    这种情况下的问题是路径。如上所述,在app文件夹中输入密钥。 然后在.properties中,不要命名整个路径,因为您已经在项目/应用中。。您只需输入密钥的名称:

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

    转到你的应用程序文件夹

    cd安卓
    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 android debugkey-keypass android-keyalg RSA-keysize 2048-validity 10000

    有时您可以同时使用
    'MYAPP\u UPLOAD\u STORE\u FILE'
    'MYAPP\u release\u STORE\u FILE'
    。确保
    gradles.properties
    build.gradle
    (对于所有属性)之间的名称匹配。

    //对于Mac用户 步骤1命令

    keytool -genkey -v -keystore ~/ksk.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ksk 
    
    keytool -genkey -v -keystore C:/Users/USER_NAME/ksk.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias ksk
    
    //适用于windows用户 步骤1命令

    keytool -genkey -v -keystore ~/ksk.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ksk 
    
    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”文件扩展名

    //注意:将其保存在您的projects 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\u 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))
    }
    
    //步骤6运行命令

    flutter Clean
    
    //第7步运行命令

    flutter build appbundle --release 
    
    //如果是菜单

    Build > Flutter > Build App Bundle
    
    //现在,它应该在项目目录中构建包

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

    //一切都很好。

    在我的react中,当没有.jks扩展时,本机项目问题就出现了。添加.jks扩展解决了这个问题

    MYAPP_UPLOAD_STORE_FILE=upload.keystore.jks
    MYAPP_UPLOAD_KEY_ALIAS=upload
    MYAPP_UPLOAD_STORE_PASSWORD=**
    MYAPP_UPLOAD_KEY_PASSWORD=**
    

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

    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'
        }
    }
    

    你确定sampleReleasekeyStore.jks在android/app上吗?是的,在那里。@TentenPonce@KartiikeyaBaleneni您解决了这个问题吗?运行上述命令后,系统会要求您输入密码,要输入密码,您应该查看build.gradle文件。尝试了所有操作,这是唯一有效的方法。谢谢。keytool-genkey-v-keystore release.keystore-storepass android-alias androiddebugkey-keypass android-keyalg RSA-keysize 2048-validity 10000