Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle Android:如何在apk签名之前添加自定义apk任务?_Android_Gradle - Fatal编程技术网

Gradle Android:如何在apk签名之前添加自定义apk任务?

Gradle Android:如何在apk签名之前添加自定义apk任务?,android,gradle,Android,Gradle,我尝试使用gradle来构建我的android应用程序,到目前为止还不错,我能够使用dependsOn、doLast等在基本构建流中的默认任务之间添加自定义任务。 但似乎有一些内部任务彼此紧密联系,很难定制它们。。。例如,我可以在“dex”任务或“packageApplication”任务之后添加我的任务,但打包和签名任务似乎很难拆分。 出于安全原因,我的应用程序需要使用第三方库,在签名和zipaligned之前对APK进行一些预处理。 我该怎么做?如果我在“dex”之后添加自定义任务-太早了(

我尝试使用gradle来构建我的android应用程序,到目前为止还不错,我能够使用dependsOn、doLast等在基本构建流中的默认任务之间添加自定义任务。 但似乎有一些内部任务彼此紧密联系,很难定制它们。。。例如,我可以在“dex”任务或“packageApplication”任务之后添加我的任务,但打包和签名任务似乎很难拆分。 出于安全原因,我的应用程序需要使用第三方库,在签名和zipaligned之前对APK进行一些预处理。 我该怎么做?如果我在“dex”之后添加自定义任务-太早了(还没有apk),如果我在“packageApplication”任务之后添加自定义任务-太迟了(apk已经签名)。 也许有一种方法可以破解任务树,但查看任务树似乎并不那么容易。
如果将packageApp任务与签名任务分离,那就太好了…

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


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

谢谢您的建议,我将尝试这样做。。。如果任务更加原子化和可重用,那就太好了,也许在android插件的未来版本中:)我试图将BasePlugin packageApp任务(与sign&zipalign相关的任务)的一部分复制到我的项目中,以便添加我的自定义sign&zipalign,但我遇到了一些问题-getSdkParser()方法似乎具有包访问权限,我无法像默认任务那样设置路径,因为该方法不可见:zipAlignTask.conventionMapping.zipAlignExe={getSdkParser().zipAlign}您知道如何解决此问题吗?不管怎样)我通过环境变量manualZipAlignTask.zipAlignExe=new File成功地完成了此操作(System.env.ANDROID_HOME,“tools${File.separator}zipalign.exe”);是的,自定义签名任务很有效,但这并不容易:)我必须首先从apk中删除签名,因为插件使用调试证书对调试变体进行签名,我没有找到禁用它的方法。