您上传了一个在调试模式下签名的 APK。您需要在发布模式下签署 APK 错误

问题描述 投票:0回答:9

我正在尝试在 Google Play 商店上传应用程序。我正在构建 .apk 并使用 Maven 对其进行签名。我使用 maven-jarsigner-plugin 来签署 .apk 文件。我正在使用通过 Eclipse 向导创建的密钥来签署另一个 Android 应用程序。我使用以下命令压缩 .apk 文件: zipalign [-f] [-v] infile.apk outfile.apk

当我尝试在 Playstore 上上传应用程序时,收到错误“您上传了在调试模式下签名的 APK”。您需要在发布模式下签署 APK。谁能告诉我如何在发布模式下对 apk 进行签名?我是 Maven 新手(今天开始使用它)。 谢谢

android maven google-play jarsigner
9个回答
89
投票

更改为: 签名配置签名配置.release

来自 签名配置签名配置.debug

在你的 build.gradle 应用级别


27
投票

转到android/app/build.gradle

文件末尾:

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug <==== change this to release
    }
}

结果应该是这样的:

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.release
    }
}

15
投票

我不知道你如何在 Maven 中做到这一点,但你需要使用发布密钥库来编译你的应用程序。您可以使用

keytool
创建一个,它位于您的 Java bin 文件夹中:

$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

创建时,您必须提供两个密码,一个用于密钥库,一个用于密钥。创建密钥库后,您可以使用 Eclipse 导出向导以发布模式编译您的应用程序。

更多详情,请参阅 http://developer.android.com/tools/publishing/app-signing.html#releasemode


9
投票

对于颤振错误, 默认情况下,flutter 创建如下所示的构建类型

  buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug
    }
}

你应该更改签名配置行

        signingConfig signingConfigs.release

7
投票

始终创建名称和别名包含“release”而不是“debug”的密钥库。如果您遇到“您上传了在调试模式下签名的 APK。您需要在发布模式下签署您的 APK 错误”,则可以肯定您正在使用默认密钥库,即“debug.keystore”,因此会在调试模式下生成 apk。

解决方案

  1. 生成新的密钥库
  2. 在build.gradle文件中给出参考
  3. 将构建变体更改为“发布”
  4. 构建

这应该可以解决问题。


6
投票

我的 flutter 应用程序也遇到了同样的问题,

将这些添加到您的 android/app/build.gradle 文件中。摇篮:

在安卓之前{ 编译SdkVersion 30

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

在defaultConfig之后{

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

3
投票

按照此文档完全正确,它会起作用(至少对我有用......)


0
投票

使用 -genkeypair 而不是 -genkey 解决了我的问题。

所以:keytool -genkeypair -keystore name.keystore -alias nameapp -keyalg RSA


0
投票

确保你的 android/app/build.gradle 看起来像这样:

plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}

// Initialize keystoreProperties as an empty Properties object
def keystoreProperties = new Properties()

// Load the keystore.properties file if it exists
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    namespace = "com.roscode.concentrationcalc"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8
}

defaultConfig {
    applicationId = "com.roscode.concentrationcalc"
    minSdk = flutter.minSdkVersion
    targetSdk = flutter.targetSdkVersion
    versionCode = flutter.versionCode
    versionName = flutter.versionName
}

signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile keystoreProperties['storeFile'] ? 
file(keystoreProperties['storeFile']) : null
        storePassword keystoreProperties['storePassword']
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
    }
}

flutter {
    source = "../.."
}

更深入的答案:

1。构建并签署应用程序:

  • 创建一个
    key.properties
    文件来存储应用程序的签名信息:
    storePassword=<your-password>
    keyPassword=<your-password>
    keyAlias=upload
    storeFile=<keystore-location>
    
  • 使用以下命令生成上传密钥:
    • Linux/Mac:
      keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
      
    • Windows:
      keytool -genkey -v -keystore "C:\Users\<your-username>\upload-keystore.jks" -keyalg RSA -keysize 2048 -validity 10000 -alias upload
      
  • upload-keystore.jks
    文件复制到
    android/app
    并在
    key.properties
    中引用。
  • build.gradle
    中添加以下配置:
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    
  • 运行以下命令来构建您的应用程序:
    flutter clean
    flutter pub get
    flutter build appbundle
    

2。发布到 Google Play 商店:

  • 创建一个 Google Play Console 开发者帐户并支付一次性费用。
  • 在控制台中,创建一个新应用程序并配置应用程序详细信息:
    • 上传位于
      .aab
      build/app/outputs/bundle/release/app-release.aab
      捆绑包。
    • 完成所需的元数据,包括应用程序图标、特征图形和屏幕截图。
    • 填写内容分级、隐私政策和其他声明。
  • 提交您的应用程序以供审核。

Google 将在大约 48 小时内审核您的应用。

来源: 将 Flutter 应用发布到 Play 商店 2024

© www.soinside.com 2019 - 2024. All rights reserved.