【问题标题】:How to generate signed and unsigned APK's using gradle?如何使用 gradle 生成签名和未签名的 APK?
【发布时间】:2015-08-25 08:57:30
【问题描述】:

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

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

【问题讨论】:

  • 抱歉我最初的回答,我误读了问题
  • 运行gradle clean assemble(这将执行assembleDebugassembleRelease。确保debug buildType没有singingConfig,但release buildType有一个。
  • 那么,你的问题解决了吗?

标签: android gradle apk android-gradle-plugin


【解决方案1】:

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

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

【讨论】:

  • 帮助像我这样的人永远不会迟到:D 谢谢!
  • 这比添加新的构建变体更轻。谢谢!
【解决方案2】:

我觉得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

【讨论】:

  • 你在哪里添加assembleRelease.dependsOn assembleReleaseUnsigned这一行?
  • @KhaledOsman 在 app/build.gradle 中的任何位置,在依赖项 {} 或其他自定义任务之后。
【解决方案3】:

您链接的答案是正确的 - 如果您选择的变体(即构建类型 + 风味组合)未使用“签名就绪”签名配置,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

【讨论】:

  • 我认为signingConfig应该发生在buildTypes中,flavors是针对应用逻辑的
【解决方案4】:

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

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

这将创建未签名的 apk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2020-07-10
    • 2013-07-02
    相关资源
    最近更新 更多