簡體   English   中英

找不到用於簽署配置“release”的密鑰庫。-- React native

[英]keystore not found for signing config 'release'.-- 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 用於簽署配置“release”。

我正在使用 Mac 環境。 請讓我知道我哪里出錯了。

這種情況下的問題是路徑。 正如您上面已經提到的,在應用程序文件夾中輸入密鑰。 然后在您的 .properties 中,不要命名整個路徑,因為您已經在您的項目/應用程序中..您只需要輸入密鑰的名稱:

storePassword=my_password
keyPassword=my_password
keyAlias=key
storeFile=key.jks
  1. 打開安卓工作室
  2. 將您的密鑰庫文件拖放到應用程序文件夾上
  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。

在此處輸入圖片說明

// 對於 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 文件夾中。

//步驟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
    }
}

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

//一切順利。

嘗試從MYAPP_RELEASE_STORE_FILE刪除.jks ,它對我MYAPP_RELEASE_STORE_FILE

MYAPP_RELEASE_STORE_FILE=sampleReleasekeyStore

我注意到 Gradle 總是在 android/app 路徑中尋找這個文件。 (可能是硬編碼)

在您的情況下,將 sampleReleasekeyStore.jks 放在路徑中;

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

提示:只需查看錯誤並將您的文件放在錯誤中指定的文件夾中。

就我而言,當我嘗試在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>

轉到您的應用程序文件夾

光盤安卓
光盤應用程序

並使用此命令生成您的調試密鑰

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

有時您可能會同時使用'MYAPP_UPLOAD_STORE_FILE''MYAPP_RELEASE_STORE_FILE' 確保gradles.propertiesbuild.gradle之間的名稱匹配(對於所有屬性)。

在我的情況下,當沒有 .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
                   }

          }
     }
    ```

在終端/命令提示符下鍵入以下命令:

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

就我而言,文件 key.properties 有空格。

我的案例:關閉 VS 代碼 => 再次打開 Android 工作室 => 再次打開 VS 代碼 => flutter 構建 apk。

注意:確保 key.properties 文件的行中沒有空格。

只需將 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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM