相信大家在开发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一样,这里不在阐述了

Android如何优雅地防止Bean类混淆相关推荐

  1. 如何优雅的转换 Bean 对象?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 背景 我们的故事要从一个风和日丽的下午开始说起! 这天,外 ...

  2. 代码加密 android,Android 开发怎样做代码加密或混淆

    原标题:Android 开发怎样做代码加密或混淆 对于Android开发技术人员来说,隐藏代码或是混淆代码至关重要.试想自己辛辛苦苦赶工出来的产品,被其他开发者反编译后轻松拿走.放在哪里都是一件让人崩 ...

  3. Android apk 安全措施详细说明(签名、混淆、加固、H5安全方案)

    文章简介:当一个Android app 开发完成后,我们总是希望对app进行一些安全措施,防止自己开发的apk被别人二次打包和签名上传到应用市场,同时防止apk被别人拿到之后进行反编译进行二次开发.那 ...

  4. 错误: 找不到android.support.v7.app.AppCompatActivity的类文件

    今天拉取了最新的代码,突然Android Studio 编译报错 错误:无法访问AppCompatActivity找不到android.support.v7.app.AppCompatActivity ...

  5. android 如何在线程缓存实体类

    今天,简单讲讲在线程里把数据缓存起来. 如果在线程里有一些类变量,在run的代码里循环给这些变量赋值,然后缓存在一个list链表里,最后变量链表会发现数据有的不对. 原因很简单,对于基本数据类型,可以 ...

  6. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  7. Spring框架如何加载和定义Spring Bean类?

    本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器.通过本篇的学习,可以达成如下目标. ● 认识Spring Bean类 ● 掌握Bean类 ...

  8. 在Android开发中怎样使用Application类

    转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...

  9. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

最新文章

  1. DSM: 域不变的立体匹配网络解析(Stereo Matching Networks)
  2. 如何让VB6代码编辑器垂直滚动条随鼠标滚轮滚动
  3. 避免jquery的click多次绑定方法
  4. html不同平台,基于H5端自定义平台怎么使用和H5端不一样的index.html?
  5. 后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如
  6. 第7章[7.19] Grid行选择的多种场景和实现方式
  7. 避免编写解决不存在问题的代码
  8. 如何提取明细表头_超全!197页建筑工程预算实例教程+241页预算明细表,造价轻松算...
  9. win10+Linux双系统安装
  10. 超标量处理器设计 姚永斌 第1章 超标量处理器概览 摘录
  11. navicat mysql 免安装_mysql免安装版配置+navicat测试
  12. 【02】Java进阶:17-单例设计模式、多例设计模式、枚举、工厂设计模式、Lombok
  13. Revit插件 | 建模助手 V1.8.52 爆炸式更新,你确定不来看看?
  14. 状态码 https dns解析过程
  15. 智齿调用a标签时触发绑定事件
  16. Excel演示神经网络原理(黑白数字0、1识别)
  17. 武则天用无字碑深切蔑视男人
  18. 计算机化自适应测验 英语,计算机化自适应测验选题策略研究
  19. 如何在模拟器里面脱360的壳
  20. 二手手机设备回收小程序开发

热门文章

  1. 五十一、结合百度API接口打造 Python小项目
  2. 十五、深入Python输入和输出
  3. 商汤 AI TECH DAY丨见大咖、拿OFFER、体验AI,一次就够!
  4. 线上直播 | NVIDIA TensorRT在神经机器翻译中的应用
  5. Python数据分析·读取CSV文件转为字典
  6. HDU 2063 过山车 二分图匹配 匈牙利算法
  7. poj 1664 放苹果 DPDFS
  8. seata+nacos出现failed to req API:/nacos/v1/ns/instance/beat after all servers([127.0.0.1:8848])
  9. IDEA出现Error during artifact deployment. See server log for details.
  10. java解决跨域问题