Android 如何生成有符号和无符号APK';他在用gradle吗?

Android 如何生成有符号和无符号APK';他在用gradle吗?,android,gradle,apk,android-gradle-plugin,Android,Gradle,Apk,Android Gradle Plugin,我需要使用gradle命令行生成未签名和签名的发布APK(gradlew assembleRelease是我现在使用的命令) APK必须对齐。我对此进行了检查:但这似乎是一种实现这一点的老方法,现在它不起作用了,而且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个APK,不仅是发布模式或未签名模式您链接到的答案是正确的-如果您选择的变体(即构建类型+风格组合)没有使用“签名准备”签名配置,gradle将创建一个未签名的APK 因此,您可以定义如下设置: an

我需要使用gradle命令行生成未签名和签名的发布APK(
gradlew assembleRelease
是我现在使用的命令)


APK必须对齐。我对此进行了检查:但这似乎是一种实现这一点的老方法,现在它不起作用了,而且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个APK,不仅是发布模式或未签名模式

您链接到的答案是正确的-如果您选择的变体(即构建类型+风格组合)没有使用“签名准备”签名配置,gradle将创建一个未签名的APK

因此,您可以定义如下设置:

android {
  signingConfigs {
    release { ... }
  }

  productFlavors {
    signed { 
      signingConfig signingConfigs.release // defined above
    }

    unsigned {} // use the default options
  }
}
然后运行
/gradlew:app:assembleerelease
将创建您的APK:

app/build/outputs/apk
├── app-signed-release.apk
├── app-signed-release-unaligned.apk
└── app-unsigned-release-unsigned.apk

我认为
buildTypes
productFlavors
更合适
您可以通过替换signingConfig来扩展发布版本

buildTypes {
    release {
        ....
        signingConfig signingConfigs.release
    }

    releaseUnsigned.initWith(buildTypes.release)
    releaseUnsigned {
        signingConfig null
    }
}
然后,对于生成两个APK文件:

./gradlew assemble
或者如果您只希望发布版本

./gradlew assembleRelease assembleReleaseUnsigned
or ./gradlew assR assRU
如果您真的只想使用assembleRelease任务,您可以创建此依赖项

assembleRelease.dependsOn assembleReleaseUnsigned
用正义的力量建造

./gradlew assembleRelease

我知道这是一个非常古老的答案,但它仍然可以帮助某人在不增加额外味道的情况下实现你的目标(即使在我的例子中,这可能是一个挑战,因为项目中存在许多依赖项)

为了使用它,只需使用

gradle assembleRelease

用于创建未签名(CI的引号,否则可能不需要)

该解决方案的缺点是,当您想要在一条生产线中装配多种口味时 即

assembleRelease检查命令行中的所有属性,因此第一个assembleRelease也将使用param'-Punsigned'调用 我通过使用两个命令解决了这个CI问题—一个用于已签名版本,另一个用于未签名版本

gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour

定义新的构建类型对我来说不起作用。但它适用于调试/发布:

 buildTypes {
         release {
                signingConfig null
            }
         debug {
                signingConfig null
            }
    }

这将产生未签名的APK

为我的初始答案道歉,我误读了问题Run
gradle clean Assembly
(这将执行
assembleDebug
assembleRelease
。确保调试构建类型没有singingConfig,但发布构建类型有一个。那么,你解决了你的问题了吗?我认为签名配置应该在构建类型中进行,并且是应用程序逻辑的口味永远不会迟到,以帮助像我这样的其他人:D谢谢!这很轻松,我们比添加一个新的构建变量更合适。谢谢!在app/build.gradle中的任意位置,在依赖项{}或其他自定义任务之后,在哪里添加行
assembleerelease.dependsOn assembleerelease unsigned
?@KhaledOsman。
gradle assembleRelease assembleDebug assembleRelease '-Punsigned'
gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour
 buildTypes {
         release {
                signingConfig null
            }
         debug {
                signingConfig null
            }
    }