【问题标题】:Gradle Android: how to add custom apk task before apk sign?Gradle Android:如何在apk签名之前添加自定义apk任务?
【发布时间】:2013-07-19 14:21:15
【问题描述】:

我尝试使用 gradle 来构建我的 android 应用程序,到目前为止一切都很好,我能够使用dependsOn、doLast 等在基本构建流程中的默认任务之间添加我的自定义任务。 但似乎有一些内部任务相互紧密联系并且很难自定义它们......例如,我可以在“dex”任务之后添加我的任务,或者在“packageApplication”任务之后添加我的任务,但是打包和签名任务似乎很难分开。 出于安全原因,我的应用程序需要使用第三方库来对 APK 进行一些预处理,然后才能对其进行签名和压缩。 我怎样才能做到这一点?如果我在“dex”之后添加我的自定义任务——它太早了(还没有 apk),如果我在“packageApplication”任务之后添加它——它太晚了(apk 已经签名)。 也许有办法破解任务树,但查看https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy 似乎并不容易做到。 如果 packageApp 任务与签名任务分开就好了...

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    唯一的解决方案是不设置任何签名,以便 packageApplication 任务生成一个未签名的 apk。

    然后您可以添加一个 apk 处理任务,之后您必须添加一个自定义 apk 签名步骤,然后将 zipalign 任务链接到其输出。

    【讨论】:

    • 感谢您的建议,我会尝试这样做...如果任务更具原子性和可重用性会很棒,也许在某些未来版本的 android 插件中:)
    • 我尝试将 BasePlugin packageApp 任务的一部分(与签名和 zipalign 相关的任务)复制到我的项目中,以便添加我的自定义签名和 zipalign,但我遇到了一些问题 - getSdkParser( ) 方法似乎具有包访问权限,我无法像默认任务那样设置路径,因为该方法不可见: zipAlignTask.conventionMapping.zipAlignExe = { getSdkParser().zipAlign } 你有任何想法如何解决这个问题吗?
    • 没关系)我设法通过环境变量 manualZipAlignTask.zipAlignExe = new File(System.env.ANDROID_HOME, "tools${File.separator}zipalign.exe");
    • 是的,自定义签名任务有效,虽然它不是很容易 :) 我必须先从 apk 中删除签名,因为插件使用调试证书对调试变体进行签名,我没有找到方法禁用它。
    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2017-08-02
    • 2018-09-14
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多