当 debuggable 设置为 true 时,Proguard 不会缩小

Posted

技术标签:

【中文标题】当 debuggable 设置为 true 时,Proguard 不会缩小【英文标题】:Proguard not minifying when debuggable set to true 【发布时间】:2016-09-05 08:59:49 【问题描述】:

我正在尝试测试已超过 64K 限制的应用。

我已将 minify 设置为开启,但在启用可调试时它不起作用。但是,如果我构建一个关闭可调试的版本,那么它会缩小 2/3!

我错过了什么吗?这是我的 Gradle 文件的相关部分:

    buildTypes 
    release 
        minifyEnabled true
        debuggable false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
    debug 
        minifyEnabled true
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    

proguard-rules.pro:

    -keep class .R
-keep class **.R$* 
    <fields>;

-keepattributes *Annotation*
-keepclassmembers class ** 
    @org.greenrobot.eventbus.Subscribe <methods>;

-keep enum org.greenrobot.eventbus.ThreadMode  *; 

-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent 
    <init>(java.lang.Throwable);


-dontwarn com.google.**
-dontwarn com.squareup.picasso.**


-dontnote com.google.**
-dontnote com.squareup.picasso.**

【问题讨论】:

【参考方案1】:

启用 proguard 后,您的代码会被混淆,无法进行调试。这就是为什么当您想要调试并将标志设置为 true 时,proguard 不会激活,这就是为什么您看不到 apk 的缩小。

检查this post。它有一个类似的问题,将帮助您更好地了解条件。

【讨论】:

我在问之前实际上看过那个帖子。我的印象是它暗示它们可以混合。烦人的是,缩小后的方法少于29K。大部分被丢弃的来自谷歌。 我注意到的另一件事是,这只发生在我直接运行到设备时。如果我构建它(使用 Build->Build APK)然后缩小确实有效。

以上是关于当 debuggable 设置为 true 时,Proguard 不会缩小的主要内容,如果未能解决你的问题,请参考以下文章

过某P之KdEnteredDebugger检测

当 setAcceptDrops 设置设置为 True 时,如何检测 QListWidet 内部移动信号

当 watch 设置为 true 时,Webpack 运行不干净

当 edittext 设置为 setVisible(true) 时,带有选项卡的操作栏会上升

Swift/iOS 8,当 prefersStatusBarHidden() 设置为 true 时,状态栏不隐藏

当达到测试超时时,Maven 肯定会失败构建,即使失败时设置为 true