Android Studio编译出的APK中一直包含android:debuggable="true"

最近遇到一个比较奇葩的事情,就是编译出来的APKAndroidManifest.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中声明如下:

compile 'com.taobao.android:new-cache:2.3.0.73@aar'

但是我们从真正的配置选项中看到的却是

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。如下:

compile 'com.taobao.android:new-cache:2.3.0.73@jar'

相关参考链接


Android Studio: Why is Release Build debuggable?

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注