Android如何优雅地防止Bean类混淆

来源:互联网 发布:淘宝点击率 编辑:程序博客网 时间:2024/05/17 06:30

相信大家在开发Android app都会遇到一个问题:在打release包时bean类常常被混淆,导致出现空指针进而引发crash

如何做到保持指定的类不被混淆?方法不止一个

1、 在混淆配置文件中添加bean类包名,这样该包下所有的bean类都可以不被混淆了

-keep public class yourBeanPackageName.**{*;}

2、 使用@keep注解(推荐

Android support library从19.1版本开始引入了一个新的注解库,它包含很多有用的元注解,你能用它们修饰你的代码,帮助你发现bug;你只要引用appcompat库或者support library就可以使用该注解了

dependencies {    compile 'com.android.support:support-annotations:versionNum'//两选一    compile 'com.android.support:appcompat-versionNum'//两选一}

keep注解的定义

@Retention(CLASS)@Target({PACKAGE,TYPE,ANNOTATION_TYPE,CONSTRUCTOR,METHOD,FIELD})public @interface Keep {}

我们可以看出keep注解可以作用于包、类、接口、注解类型、构造器、方法、字段上,@那里,那里就可以不混淆是不是很方便;

注意: 如果你的Android SDK Tools版本足够高(>24),那么在proguard-rules.pro文件其实不用做任何改动,因为Google已经帮我们在proguard-android.txt文件配置好了(如果较低就把下面代码拷贝到proguard-android.txt中),具体相关配置如下:

# The support library 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.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {    @android.support.annotation.Keep <methods>;}-keepclasseswithmembers class * {    @android.support.annotation.Keep <fields>;}-keepclasseswithmembers class * {    @android.support.annotation.Keep <init>(...);}

3、 自定义注解

自定义注解原理其实和Keep一样,这里不在阐述了

0 0