37

我正在尝试生成一个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 环境。请让我知道我哪里出错了。

4

12 回答 12

15

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

storePassword=my_password
keyPassword=my_password
keyAlias=key
storeFile=key.jks
于 2019-07-23T15:11:38.157 回答
9
  1. 打开安卓工作室
  2. 将您的密钥库文件拖放到应用文件夹上
  3. 单击文件->同步项目
于 2019-04-27T16:59:52.060 回答
5

它对我有用!

  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 在当前文件夹中。

在此处输入图像描述

于 2018-07-20T04:20:55.073 回答
3

// 对于 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

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

//第2步。适用于 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

// 第 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
    }
}

//Step 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 

//如果是AS菜单

Build > Flutter > Build App Bundle

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

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

//一切顺利。

于 2020-10-27T18:17:26.990 回答
2

尝试从中删除.jksMYAPP_RELEASE_STORE_FILE它对我有用。

MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore
于 2018-03-11T13:28:09.003 回答
2

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

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

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

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

于 2019-04-02T05:38:00.907 回答
2

转到您的应用程序文件夹

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 androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

于 2019-09-23T11:28:04.113 回答
1

在我的情况下,当没有 .jks 扩展名时,反应原生项目问题就来了。添加 .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
                   }

          }
     }
    ```
于 2020-12-11T08:53:47.337 回答
1

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

于 2019-12-01T21:22:28.193 回答
1

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

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'
    }
}
于 2021-04-06T17:41:49.693 回答
1

在我的情况下,当我尝试在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>
于 2019-07-02T14:04:06.930 回答
-1

只需将 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
    }
于 2019-05-02T17:31:27.653 回答