如何使用gradle生成签名和未签名的APK?

问题描述 投票:11回答:4

我需要使用gradle命令行生成unsigned和signed release apks(gradlew assembleRelease是我现在使用的命令)

apks必须对齐。我检查了这个:Build Unsigned APK with Gradle但它似乎是一种老式的方法来实现这一点,现在它不起作用,并且在最新版本的android和gradle编译中发生了一些变化。而且我还需要同时生成两个apks,不仅仅是发布模式或无符号模式

android gradle apk android-gradle
4个回答
7
投票

我认为buildTypesproductFlavors更合适。 您可以使用替换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

6
投票

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

android {
  signingConfigs {
    release { ... }
  }

  productFlavors {
    signed { 
      signingConfig (checkUnsigned() ? null : signingConfigs.release)

    }
}

def checkUnsigned ()  {
    return project.hasProperty("unsigned")
}

为了使用它只是使用

gradle assembleRelease

要么

gradle assembleRelease '-Punsigned'

用于创建无符号(CI的引号,否则可能不需要)

解决方案的缺点就是当你想在一行中组装几种口味时

gradle assembleRelease assembleDebug assembleRelease '-Punsigned'

assembleRelease检查命令行中的所有属性,因此第一个assembleRelease也将使用参数'-Punsigned'来调用我通过使用2个命令解决了这个CI问题 - 一个用于签名,另一个用于无符号版本

gradle assembleRelease assembleOtherFlavour '-Punsigned'
gradle assembleDebug assembleRelease assembleOtherFlavour

4
投票

您链接的答案是正确的 - 如果您选择的变体(即构建类型+风味组合)未使用“签名就绪”签名配置,则gradle将创建未签名的APK。

所以你可以定义这样的设置:

android {
  signingConfigs {
    release { ... }
  }

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

    unsigned {} // use the default options
  }
}

然后运行./gradlew :app:assembleRelease将创建您的APK:

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

0
投票

它定义新的buildType对我不起作用。但它适用于调试/发布:

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

这将创建未签名的apks

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