Android如何优雅地防止Bean类混淆
相信大家在开发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类混淆相关推荐
- 如何优雅的转换 Bean 对象?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 背景 我们的故事要从一个风和日丽的下午开始说起! 这天,外 ...
- 代码加密 android,Android 开发怎样做代码加密或混淆
原标题:Android 开发怎样做代码加密或混淆 对于Android开发技术人员来说,隐藏代码或是混淆代码至关重要.试想自己辛辛苦苦赶工出来的产品,被其他开发者反编译后轻松拿走.放在哪里都是一件让人崩 ...
- Android apk 安全措施详细说明(签名、混淆、加固、H5安全方案)
文章简介:当一个Android app 开发完成后,我们总是希望对app进行一些安全措施,防止自己开发的apk被别人二次打包和签名上传到应用市场,同时防止apk被别人拿到之后进行反编译进行二次开发.那 ...
- 错误: 找不到android.support.v7.app.AppCompatActivity的类文件
今天拉取了最新的代码,突然Android Studio 编译报错 错误:无法访问AppCompatActivity找不到android.support.v7.app.AppCompatActivity ...
- android 如何在线程缓存实体类
今天,简单讲讲在线程里把数据缓存起来. 如果在线程里有一些类变量,在run的代码里循环给这些变量赋值,然后缓存在一个list链表里,最后变量链表会发现数据有的不对. 原因很简单,对于基本数据类型,可以 ...
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- Spring框架如何加载和定义Spring Bean类?
本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器.通过本篇的学习,可以达成如下目标. ● 认识Spring Bean类 ● 掌握Bean类 ...
- 在Android开发中怎样使用Application类
转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...
- android开发监听媒体播放器,Android开发之媒体播放工具类完整示例
本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...
最新文章
- DSM: 域不变的立体匹配网络解析(Stereo Matching Networks)
- 如何让VB6代码编辑器垂直滚动条随鼠标滚轮滚动
- 避免jquery的click多次绑定方法
- html不同平台,基于H5端自定义平台怎么使用和H5端不一样的index.html?
- 后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如
- 第7章[7.19] Grid行选择的多种场景和实现方式
- 避免编写解决不存在问题的代码
- 如何提取明细表头_超全!197页建筑工程预算实例教程+241页预算明细表,造价轻松算...
- win10+Linux双系统安装
- 超标量处理器设计 姚永斌 第1章 超标量处理器概览 摘录
- navicat mysql 免安装_mysql免安装版配置+navicat测试
- 【02】Java进阶:17-单例设计模式、多例设计模式、枚举、工厂设计模式、Lombok
- Revit插件 | 建模助手 V1.8.52 爆炸式更新,你确定不来看看?
- 状态码 https dns解析过程
- 智齿调用a标签时触发绑定事件
- Excel演示神经网络原理(黑白数字0、1识别)
- 武则天用无字碑深切蔑视男人
- 计算机化自适应测验 英语,计算机化自适应测验选题策略研究
- 如何在模拟器里面脱360的壳
- 二手手机设备回收小程序开发
热门文章
- 五十一、结合百度API接口打造 Python小项目
- 十五、深入Python输入和输出
- 商汤 AI TECH DAY丨见大咖、拿OFFER、体验AI,一次就够!
- 线上直播 | NVIDIA TensorRT在神经机器翻译中的应用
- Python数据分析·读取CSV文件转为字典
- HDU 2063 过山车 二分图匹配 匈牙利算法
- poj 1664 放苹果 DPDFS
- seata+nacos出现failed to req API:/nacos/v1/ns/instance/beat after all servers([127.0.0.1:8848])
- IDEA出现Error during artifact deployment. See server log for details.
- java解决跨域问题