Android 混淆反射带来的问题

3,143 阅读1分钟
  1. 这些日子看到一个培训的机构在讲如何减少apk的大小,其中提到了混淆。就是在build.gradle中添加
android {
	    buildTypes {
                release {
                 	minifyEnabled true
            		shrinkResources true
                   	proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

                    ...
                    }
                 }
		}
  1. 混淆后,首先发现好多第三方的库不能正常使用,于是去找寻三方混淆规则,添加到progurad-rules.pro中,默认的混淆规则则在proguard-android-optimize.txt({ANDROID_SDK_ROOT}/tools/proguard/)中。

  2. 运行中程序异常

Method inflate = cls.getDeclaredMethod("inflate", LayoutInflater.class, ViewGroup.class, boolean.class);

主要是这行报错,通过Debug和查日志发现,是inflate这个方法找不到,于是去网上找关于反射的混淆,通过查询说不要混淆调用这个方法的类,于是-keep *** ,发现还是异常,于是通过这个getDeclaredMethod这个方法去寻找突破,是不是这个类不能被混淆,混淆后就找不到类的inflate这个方法.

-keep public class * extends androidx.viewbinding.ViewBinding { *; }
  1. 最后大功告成了!所以无论发现什么事情,如果一时解决不了,不要着急,慢慢来!加油!加油!!加油!!!!