一、问题背景
在一次需求会议上,测试组提出了一个测试开发需求,需要APP能够在Android7.0的手机上抓取Https的报文,抓包方案根据这篇博客(
https://blog.csdn.net/u011045726/article/details/76064048)可以实现。但是修改后引入的问题是,在res资源文件中增加了一个证书和一个xml文件。
![](https://i-blog.csdnimg.cn/blog_migrate/ae94859610b6a6bee635a0ca0b060fb9.png)
另外对AndroidManifest.xml文件进行了修改,修改后的结果是编译出来的APP只能在抓包环境下运行,不能在正常环境下运行。
二、解决方案
原有方案
根据掌握的gradle的知识,会制作两份AndroidManifest.xml放置在不同的目录下,然后编译时用不同的参数选择不同的AndroidManifest.xml文件进行编译。但是这需要在gradle编译时传入参数,另外抓包用的证书和xml文件也会被编译进行正式APP中,方法很low。
使用productFlavors
将抓包用的资源文件和改写的AndroidManifest.xml文件单独放置在一个文件夹,比如在我的项目中命令为Charles,该目录与main目录同级,目录详情如下:
![](https://i-blog.csdnimg.cn/blog_migrate/74e15f86afaf0500a656509055e132ae.png)
然后在productFlavors下加入与目录名相对应得渠道名即可
android {
compileSdkVersion
26
buildToolsVersion
"26.0.0"
defaultConfig {
....
}
buildTypes {
....
}
sourceSets {
....
}
//创建productFlavors
productFlavors {
charles
{
}
}
}
|
三、总结
该文只是用来记录平时工作中遇到的小的问题的解决过程用于积累,希望对恰巧遇到类似问题的你有帮助。