android混淆工具-金沙1005

android混淆工具_android框架有哪些1、日常开发debug包时不用混淆,正式发布release包前开启代码混淆; 2、混淆好处①→类、方法、变量名变成短且无意义的名字,提高反编译后代码的阅读成本; 3、混淆好处②→删除无用的类、方法与属性,缩减了apk包的大小; 4、混淆好处③→对字节码进行优化,移除无用指令,应用运行更快; 5、怎么混淆→主项目的build.gradle设置minifyenabledtrue,proguard-rules.pro加入混淆规则; 6、混淆规则哪里来→网上搜索通用混淆模板复

  • 1、日常开发debug包时不用混淆,正式发布release包前开启代码混淆;
  • 2、混淆好处① → 类、方法、变量名变成短且无意义的名字,提高反编译后代码的阅读成本;
  • 3、混淆好处② → 删除无用的类、方法与属性,缩减了apk包的大小;
  • 4、混淆好处③ → 对字节码进行优化,移除无用指令,应用运行更快;
  • 5、怎么混淆 → 主项目的 build.gradle 设置 minifyenabled trueproguard-rules.pro 加入混淆规则;
  • 6、混淆规则哪里来 → 网上搜索通用混淆模板复制粘贴,项目依赖到的第三方库官方文档复制粘贴;

 

app层级的build.gradle加下release的签名和编译配置:

signingconfigs {
    release {
        storefile file('../test.jks')
        storepassword '123456'
        keyalias 'test'
        keypassword '123456'
    }
}
buildtypes {
    release {
        // 启用代码压缩、优化及混淆
        minifyenabled true
        // 启用资源压缩,需配合 minifyenabled=true 使用
        shrinkresources true
        // 指定混淆保留规则
        proguardfiles getdefaultproguardfile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        // 包签名
        signingconfig signingconfigs.release
    }
}
android混淆工具_android框架有哪些

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活clion
datagrip dataspell
dotcover dotmemory
dottrace goland
phpstorm pycharm
resharper reshac
rider rubymine
webstorm 全家桶


 

1. 混淆设置参数

-optimizationpasses 5                       # 代码混淆的压缩比例,值介于0-7,默认5
-verbose                                    # 混淆时记录日志
-dontoptimize                               # 不优化输入的类文件
-dontshrink                                 # 关闭压缩
-dontpreverify                              # 关闭预校验(作用于java平台,android不需要,去掉可加快混淆)
-dontoptimize                               # 关闭代码优化
-dontobfuscate                              # 关闭混淆
-ignorewarnings                             # 忽略警告
-dontwarn com.squareup.okhttp.**            # 指定类不输出警告信息
-dontusemixedcaseclassnames                 # 混淆后类型都为小写
-dontskipnonpubliclibraryclasses            # 不跳过非公共的库的类
-printmapping mapping.txt                   # 生成原类名与混淆后类名的映射文件mapping.txt
-useuniqueclassmembernames                  # 把混淆类中的方法名也混淆
-allowaccessmodification                    # 优化时允许访问并修改有修饰符的类及类的成员
-renamesourcefileattribute sourcefile       # 将源码中有意义的类名转换成sourcefile,用于混淆具体崩溃代码
-keepattributes sourcefile,linenumbertable  # 保留行号
-keepattributes *annotation*,innerclasses,signature,enclosingmethod # 避免混淆注解、内部类、泛型、匿名类
-optimizations !code/simplification/cast,!field/ ,!class/merging/   # 指定混淆时采用的算法
复制代码

2. 保持不被混淆的设置

语法组成

[保持命令] [类] {
    [成员] 
}
复制代码

保持命令

-keep                           # 防止类和类成员被移除或被混淆;
-keepnames                      # 防止类和类成员被混淆;
-keepclassmembers	            # 防止类成员被移除或被混淆;
-keepclassmembernames           # 防止类成员被混淆;
-keepclasseswithmembers         # 防止拥有该成员的类和类成员被移除或被混淆;
-keepclasseswithmembernames     # 防止拥有该成员的类和类成员被混淆;
复制代码

  • 具体的类
  • 访问修饰符 → public、private、protected
  • 通配符(*) → 匹配任意长度字符,但不包含包名分隔符(.)
  • 通配符(**) → 匹配任意长度字符,且包含包名分隔符(.)
  • extends → 匹配实现了某个父类的子类
  • implements → 匹配实现了某接口的类
  • $ → 内部类

成员

  • 匹配所有构造器
  • 匹配所有域
  • 匹配所有方法
  • 访问修饰符 → public、private、protected
  • 除了 *** 通配符外,还支持 *** 通配符,匹配任意参数类型
  • ... → 匹配任意长度的任意类型参数,如void test(…)可以匹配不同参数个数的test方法

常用自定义混淆规则范例

# 不混淆某个类的类名,及类中的内容
-keep class cn.coderpig.myapp.example.test { *; }
# 不混淆指定包名下的类名,不包括子包下的类名
-keep class cn.coderpig.myapp*
# 不混淆指定包名下的类名,及类里的内容
-keep class cn.coderpig.myapp* {*;}
# 不混淆指定包名下的类名,包括子包下的类名
-keep class cn.coderpig.myapp**
# 不混淆某个类的子类
-keep public class * extends cn.coderpig.myapp.base.basefragment
# 不混淆实现了某个接口的类
-keep class * implements cn.coderpig.myapp.dao.daoimp
# 不混淆类名中包含了"entity"的类,及类中内容
-keep class **.*entity*.** {*;}
# 不混淆内部类中的所有public内容
-keep class cn.coderpig.myapp.widget.customview$onclickinterface {
    public *;
}
# 不混淆指定类的所有方法
-keep cn.coderpig.myapp.example.test {
    public ;
}
# 不混淆指定类的所有字段
-keep cn.coderpig.myapp.example.test {
    public ;
}
# 不混淆指定类的所有构造方法
-keep cn.coderpig.myapp.example.test {
    public ;
}
# 不混淆指定参数作为形参的方法
-keep cn.coderpig.myapp.example.test {
    public (java.lang.string);
}
# 不混淆类的特定方法
-keep cn.coderpig.myapp.example.test {
    public test(java.lang.string);
}
# 不混淆native方法
-keepclasseswithmembernames class * {
    native ;
}
# 不混淆枚举类
-keepclassmembers enum * {
  public static **[] values();
  public static ** valueof(java.lang.string);
}
#不混淆资源类
-keepclassmembers class **.r$* {
    public static ;
}
# 不混淆自定义控件
-keep public class * entends android.view.view {
    *** get*();
    void set*(***);
    public ;
}
# 不混淆实现了serializable接口的类成员,此处只是演示,也可以直接 *;
-keepclassmembers class * implements java.io.serializable {
    static final long serialversionuid;
    private static final java.io.objectstreamfield[] serialpersistentfields;
    private void writeobject(java.io.objectoutputstream);
    private void readobject(java.io.objectinputstream);
    java.lang.object writereplace();
    java.lang.object readresolve();
}
# 不混淆实现了parcelable接口的类成员
-keep class * implements android.os.parcelable {
    public static final android.os.parcelable$creator *;
}
# 注意事项:
# 
# ① jni方法不可混淆,方法名需与native方法保持一致;
# ② 反射用到的类不混淆,否则反射可能出问题;
# ③ 四大组件、application子类、framework层下的类、自定义的view默认不会被混淆,无需另外配置;
# ④ webview的js调用接口方法不可混淆;
# ⑤ 注解相关的类不混淆;
# ⑥ gson、fastjson等解析的bean数据类不可混淆;
# ⑦ 枚举enum类中的values和valuesof这两个方法不可混淆(反射调用);
# ⑧ 继承parceable和serializable等可序列化的类不可混淆;
# ⑨ 第三方库或sdk,请参考第三方提供的混淆规则,没提供的话,建议第三方包全部不混淆;


 
来源: https://juejin.cn/post/6966526844552085512

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/141424.html

(0)

相关推荐

  • android attributeset 工具类,android attributeset总结一般是当项目中遇到这样的场景需要自定义控件的attributeset属性:一个自定义控件的有些属性内容是随着外部条件而动态改变的,forexample:一个自定义的listview控件,需要在底部添加一个view,而这个view在不同的模块使用中传入的view是不同的,这时候有两种方法,一种方法就是在自定义listview控件类中提供一个公开的接口给外部调用从而将view动态的传入进去;另外一种…

  • 第十章 进程间的通信 之 java/android多线程开发(二)(一)java多线程开发(二)android多线程开发2.1)基础使用1、继承thread类(1)简介thread类是java中实现多线程的具体类,封装了所需线程操作。在android开发中用于实现多线程。注:线程对象&运行线程区别线程对象是运行线程的实体,用来控制线程行为的唯一方式。线程对象通过线程类实例化创建,负责控制线程的状态,如:运行、睡眠、挂起/停止。优点…

  • android打包、签名与混淆「建议收藏」前几天实习上要打包出一个apk,然后上头就发了我一个.keystore文件,叫我打包的时候用这个签名。当时我在想啊,原来我只是在学习计算机网络的时候了解公钥、密钥的区别,在复习https后又加深了解了一下,但总之这些都不是我直接接触的,都是些理论知识了解而过,现在遇到了,我就在…

  • 安卓 多线程_安卓多线程有几种实现方法前言多线程的应用在android开发中是非常常见的,常用方法主要有:继承thread类实现runnable接口handlerasynctaskhandlerthread今天,我将全面解析多线程其中一种常见用法:handlerthread由于本文涉及多线程知识和handler源码解析,所以阅读本文前建议先看:android开发:handler异步通信机制全面解…

    2022年12月13日
  • android基础入门教程本教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了android基础入门的大部分知识,由于当时能力局限,虽已竭尽全力,但对于一些问题的分析难免有所纰漏,敬请读者海涵!it技术更新换代很快,想想2015年还是android5.1横行,如今到了2018年都已经android8.0了,开发工具androidstudio也更新到了androidstudio3.0.1。本系列的教程可能有些地方已经过时了,比如6.0以后的动态权限申请。一个人的力量是有限的,而且也有自己的工作忙,不可能去另外整一个

  • android怎么打开_android怎么用okhttp和okio文本将介绍okhttp和okio基本使用okhttphttp是现在app访问网络最流行的方式。通过它我们可以交换数据和媒体信息。而高效的使用http可以让你的加载数据更快并且节省带宽。okhttp就是一种http客户端连接,它有如下特性:http/2多路复用socket到同一个主机,共享链接。采用连接池技术,可以有效的减少http链接数量。无缝集成gzip压缩技术。支持re…

  • 路由器框架_android frameworkbutterfly – 蝴蝶 小巧而强大的武器,拥有它,让你的android开发如虎添翼,carry全场!

  • android – navigation「终于解决」androidnavigation

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图