proguar在Android混淆中的用法
作者:laozhang 发布时间:2021-10-01 01:12:12
标签:proguar,Android,混淆
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段。
proguard 基本语法
// 保留native方法的方法的方法名和包含native方法的类的类名不变
-keepclasseswithmembernames class {
native<methods>;
}
// 保留继承与View的类中的set*和get*方法
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
// 保留继承与Activity的类中以View为参数的方法
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
// 保留实现了Parcelable 接口的类的类名以及实现了 Parcelanle$Creator 的内部类
-keep class * implemenets android.os.Parcelable {
public static final android.os.Parcelanle$Creator *;
}
// 保留 R$*类中静态字段的字段名
-keep class **.R$* {
public static <fields>;
}
也就是
类名不混淆 用keep
方法名不混淆 用keepclassmembers 或者 keepclasseswithmembernames(后者用于native不混淆)
不混淆的情况:
1 jni 调用java方法
2 四大组件
3 R文件
4 某些通过反射调用的类或方法
5 第三jar包(一般情况下不要混淆)
混淆去掉log
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String,int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
assumenosideeffects,proguard 配置文件里的参数。assume no side effects;假定无效;该属性也就是标识无效代码。我们就是通过这个参数来让proguard删除日志代码。
来源:https://www.cnblogs.com/622698abc/p/7894815.html
0
投稿
猜你喜欢
- 本文实例讲述了Java日期操作方法工具类。分享给大家供大家参考,具体如下:package com.gcloud.common;import
- 前言由于现在网络层已经升级到RxJava2.x相关的了,所以需要做些调整。虽然RxJava1.x和RxJava2.x同属RxJava系列,但
- 本文浅析了C#的复制和克隆技术,对于有需要的朋友可以参考下。在C#中,用HashTable,DataTable等实现复制和克隆,下面直接看例
- 我就废话不多说了,大家还是直接看代码吧~//执行的是删除信息的操作 String a=request.getParameter("
- import java.lang.reflect.InvocationHandler;import java.lang.reflect.Me
- Java中为什么需要Callable在java中有两种创建线程的方法:一种是继承Thread类,重写run方法:public class T
- java数组初始化赋初值方法一int[] vis1;//声明未初始化 vis1=new in
- Java公众号【Java技术迷】一个在互联网领先地位,微信搜索【Java技术迷】第一时间阅读最新文章,通过下面下载链接,即可获得我精心整理的
- 介绍跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing)当页面发出跨域请求
- 今天学习到sql中的ResultSet,用到了获取总函数,网上百度说是使用getRow()方法,但是一值返回0.后台调试才发现getRow(
- 会报错如下:org.springframework.web.util.NestedServletException: Request pro
- 一、题目描述题目实现:使用套接字实现了服务器端与客户端的通信。运行程序,在服务器端的文本框中输入信息,然后按回车键,客户端就会收到服务器端发
- Visual Studio 2022 默认.net framework4.8,而4.6~4.7版本的.net framework可以通过方法
- 1. 公共字段自动填充1.1 问题分析在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间、修改人等字
- 概述ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。ArrayList不是
- java中初始化MediaRecorder实现代码:private boolean initializeVideo() { &
- Strut2判断是否是AJAX调用1. AJAX与传统Form表单实际上,两者一般都是通过HTTP的POST请求。区
- 导读本文主体为单项链表和双向链表的反转以及简单的测试,以便于理解链表相关的算法题目。链表特点便于增删数据,不便于寻址在内存中属于跳转结构单链
- 由于我经常下载一些pdf格式的电子书,有的时候一些好书下载下来没有书签,读起来感觉没有整体的感觉,所以决定自己写一个小工具,将特定格式的文本
- Controller @RequestMapping作用@RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上。