android build.dolast,在Android Studio中运行应用程序时,在Gradle任务processManifest.doLast中编辑AndroidManifest.xml无效...

我使用以下Gradle脚本在编译时对AndroidManifest.xml进行一些修改.在这个例子中,我想注入一个元素.代码基于这个答案.

android {

// ...

applicationVariants.all { variant ->

variant.outputs.each { output ->

output.processManifest.doLast {

def manifestOutFile = output.processManifest.manifestOutputFile

def newFileContents = manifestOutFile.getText('UTF-8').replace("", "")

manifestOutFile.write(newFileContents, 'UTF-8')

}

}

}

}

当我在Android Studio中执行Gradle同步或从命令行进行干净构建时,这可以正常工作:可以从应用程序中访问元数据.

但是当我从Android Studio运行▶应用程序时,修改后的清单似乎被忽略了,因为插入的元数据不是APK中编译清单的一部分,而且应用程序本身也无法在运行时找到它,元数据根本就不存在.

在所有的情况下,合并后的中间AndroidManifest.xml中(在/构建/中间体/舱单/)不包含的变化,但由于某种原因它看起来像它,如果我运行的应用程序被忽略.

为了使它更加明显,我尝试插入一些无效的XML:在这种情况下,由于清单中的语法错误,Gradle同步和干净构建按预期失败.但我仍然可以从Android Studio运行该应用程序,因此有效地修改了修改.

重现这一点的最简单方法是首先清理项目(在Android Studio中),这会导致清单被重新处理(如果出现语法错误,我会按预期失败),然后运行应用程序,即使使用无效的清单.

请注意,doLast每次都会执行println()任务:打印任务中的A ,中间清单包含更改.

就好像在我的任务执行之前将清单编译到APK中一样.

这里的问题在哪里?

我正在使用Android Studio 2.0和Android Gradle Plugin 2.0.0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值