最近遇到一个比较奇葩的事情,就是编译出来的APK
的AndroidManifest.xml
中的application
标签中一直包含android:debuggable="true"
。不管是release
版本,还是debug
版本,不管如何设置,最终生成的文件中的调试选项一直是处于开启状态。
一时间竟然有些无从下手的感觉。首先确认我们自己的配置文件是没有问题的,那么这个现象一定是引入了某个aar
中引入的AndroidManifest.xml
中存在这个android:debuggable="true"
,导致Android Studio
在最终合并AndroidManifest.xml
文件的时候,把这个选项给合并进来了。
那么我们既然已经知道引入的地方,因此就只需要针对这种情况进行剖析即可了。
执行gradlew build
之后,我们在app\build\intermediates\exploded-aar
目录下面可以找到我们引入的全部的依赖的aar
。我们只需要逐个分析引入的aar
包的AndroidManifest.xml
文件即可。
那么比较奇葩,是奇葩在哪里呢? 正常情况下,我们引入一个aar
包,需要在build.gradle
中声明如下:
1 |
compile 'com.taobao.android:new-cache:2.3.0.73@aar' |
但是我们从真正的配置选项中看到的却是
1 |
compile 'com.taobao.android:new-cache:2.3.0.73' |
按照一般的理解,我们如果没有设置@aar
,那么Android Studio
应该去下载对应的jar
包才对。但是我们从实际的编译过程中看到,Android Studio
在没有指定@aar
的情况下,依旧默认去服务器上先尝试下载对应的aar
,只有当aar
找不到的时候才会去下载对应的jar
包。而恰好,我们服务器上面两者都是存在的。于是出现了乌龙事件,本来只是需要下载jar
包,结果却引入了一个莫名的aar
包。而这个aar
的开发同学又没有考虑到这种情况,以为用户只会用他提供的jar
包。
解决方法还是比较简单的,就是明确告知Android Studio
,我们需要的是jar
包,也就是增加@jar
。如下:
1 |
compile 'com.taobao.android:new-cache:2.3.0.73@jar' |