打release包时,混淆自动把log的代码清除了

打release包时,混淆自动把log的代码清除了

proguard-android-optimize.txt-4.1.2

没有加入下面的去log.d混淆配置:

相关代码:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
}

然后打release包,反编译,发现log的相关被自动清除了,我认为是安卓4.1.2编译器的默认混淆配置里有清除log相关代码的混淆配置

https://img1.sycdn.imooc.com//climg/6187f1c8097754dc09430371.jpg

请问老师,是哪句混淆配置把log相关的代码清除的?

下面是4.1.2的默认混淆配置文件proguard-android-optimize.txt-4.1.2

相关代码:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

# Preserve some attributes that may be required for reflection.
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod

-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}

# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
    void set*(***);
    *** get*();
}

# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**

# This class is deprecated, but remains for backward compatibility.
-dontwarn android.util.FloatMath

# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep class androidx.annotation.Keep

-keep @android.support.annotation.Keep class * {*;}
-keep @androidx.annotation.Keep class * {*;}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep <init>(...);
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <init>(...);
}

# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**

# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2021-11-08 10:32:39

同学你好,可以找一下BuildConfig.DEBUG中的设置,是不是它起的作用。祝:学习愉快

  • 提问者 Kristen_0409 #1

    老师,BuildConfig.DEBUG没有去除某一行代码的功能吧,BuildConfig.DEBUG的功能是:如果为false,让log代码块不执行,也就不会打印。

    课程中对release包进行反编译,得到的代码中有BuildConfig.DEBUG的相关代码,把它手动改为true,再打成release包,安装在手机上,此时系统发现BuildConfig.DEBUG是true,就会把整个项目的log在控制台输出,这样信息全部对外暴露了。所以课程里在混淆中设置了:

    -assumenosideeffects class android.util.Log {     public static *** d(...); }

    这样即使被反编译,log.d相关的代码块不会显示。


    我现在遇到的情况是:我没有进行如上的混淆配置,反编译release包后,也没有显示log相关的代码,结果是安全的。但是为什么log相关的代码消失了呢?所以我认为是默认的混淆配置文件里有配置对log的混淆,但是我不知道是哪一段,能否帮我看一下?

    下面是4.1.2的默认混淆配置文件proguard-android-optimize.txt-4.1.2

    https://img1.sycdn.imooc.com//climg/61889738099eb98212690708.jpg

    https://img1.sycdn.imooc.com//climg/6188976409d303a712630659.jpg

    https://img1.sycdn.imooc.com//climg/6188978209e8963a09840708.jpg

    https://img1.sycdn.imooc.com//climg/6188978a0928df0e00000000.jpg

    https://img1.sycdn.imooc.com//climg/618897ed09fe98ea11750228.jpg

    2021-11-08 11:23:00
  • 好帮手慕雪 回复 提问者 Kristen_0409 #2

    是的,BuildConfig.DEBUG没有此功能。另外上图中没有对log进行设置。另外你也可以手动的删除APP,在某java文件中,多加一个空行,保存,再重新安装进行测试,看是不是没有重新编译导致的。

    2021-11-08 14:53:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师