android 混淆不起作用,Android代码混淆的写法总结

android 混淆不起作用,Android代码混淆的写法总结Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。1.使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆buildTypes{release{minifyEnabledture//是否开启代码混淆pro…

大家好,又见面了,我是你们的朋友全栈君。

Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。

1. 使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆

buildTypes {

release {

minifyEnabled ture //是否开启代码混淆

proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

}

}

混淆内容在proguard-android.txt文件中写。

2. 混淆设置参数

-optimizationpasses 4 代码混淆的压缩比例,值介于0-7

-dontusemixedcaseclassnames 混淆后类型都为小写

-dontskipnonpubliclibraryclasses 不去忽略非公共的库类

-dontoptimize 不优化输入的类文件

-dontpreverify 不做预校验的操作

-ignorewarnings 忽略警告

-verbose 混淆时是否记录日志

-keepattributes Annotation 保护注解

-printmapping proguardMapping.txt 生成原类名和混淆后的类名的映射文件

-optimizations !code/simplification/cast,!field/ ,!class/merging/ 指定混淆是采用的算法

3. 保持不被混淆的设置

保持实体类不混淆

-keep class 你的实体类所在的包.** { *; }

保持四大组件,Application,Fragment不混淆

-keep public class * extends android.app.Application

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Fragment

-keep public class * extends android.support.v4.app.Fragment

-keep public class * extends android.app.Fragment

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.preference.Preference

保持 native 方法不被混淆

-keepclasseswithmembernames class * {

native ;

}

保持枚举enum类不被混淆

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

保持第三方包不混淆,比如这里用到微信、支付宝支付第三方

#支付宝混淆

-keep class com.alipay.android.app.IAlixPay{*;}

-keep class com.alipay.android.app.IAlixPay$Stub{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}

-keep class com.alipay.sdk.app.PayTask{ public *;}

-keep class com.alipay.sdk.app.AuthTask{ public *;}

#微信支付混淆

-keep class com.tencent.mm.opensdk.** {*;}

-keep class com.tencent.wxop.** {*;}

-keep class com.tencent.mm.sdk.** {*;}

4. 完整混淆示例:

#指定代码的压缩级别

-optimizationpasses 5

#包名不混合大小写

-dontusemixedcaseclassnames

#不去忽略非公共的库类

-dontskipnonpubliclibraryclasses

#优化 不优化输入的类文件

-dontoptimize

#预校验

-dontpreverify

#混淆时是否记录日志

-verbose

#忽略警告

-ignorewarning

#保护注解

-keepattributes *Annotation*

-keep public class * extends android.app.Application

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Fragment

-keep public class * extends android.support.v4.app.Fragment

-keep public class * extends android.app.Fragment

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.preference.Preference

-keepclasseswithmembernames class * {

native ;

}

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

-keepclassmembers class **.R$* {

*;

}

-keep class * extends android.view.View{*;}

-keep class * extends android.app.Dialog{*;}

-keep class * implements java.io.Serializable{*;}

#butterknife

-keep class butterknife.** { *; }

-dontwarn butterknife.internal.**

-keep class **$$ViewBinder { *; }

#volley

-dontwarn com.android.volley.**

-keep class com.android.volley.**{*;}

#fastjson

-dontwarn com.alibaba.fastjson.**

-keep class com.alibaba.fastjson.**{*;}

#happy-dns

-dontwarn com.qiniu.android.dns.**

-keep class com.qiniu.android.dns.**{*;}

#okhttp

-dontwarn com.squareup.okhttp.**

-keep class com.squareup.okhttp.**{*;}

-keep class okio.**{*;}

-keep class android.net.**{*;}

-keep class com.android.internal.http.multipart.**{*;}

-keep class org.apache.**{*;}

-keep class com.qiniu.android.**{*;}

-keep class android.support.annotation.**{*;}

-keep class com.squareup.wire.**{*;}

-keep class com.ant.liao.**{*;}

#腾讯

-keep class com.tencent.**{*;}

-keep class u.aly.**{*;}

#ImageLoader

-keep class com.nostra13.universalimageloader.**{*;}

#友盟

-dontwarn com.umeng.**

-keep class com.umeng.**{*;}

#pulltorefresh

-keep class com.handmark.pulltorefresh.** { *; }

-keep class android.support.v4.** { *;}

-keep public class * extends android.support.v4.**{

public protected *;}

-keep class android.support.v7.** {*;}

自己试着用一个简单的项目加入混淆,打个包试试效果吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141901.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月24日 下午8:40
下一篇 2022年5月24日 下午8:40


相关推荐

  • DSP28335定时器

    DSP28335定时器定时器作用 定时器就是用来准确控制时间的工具 精确的控制时间 以满足控制某些特定事件的要求 例如 在电机控制中 要求为在系统启动 5S 后加载负载 这时候就能够利用定时器来精确控制 在 F28335 中 有 3 个 32 位的定时器 分别是 Timer0 Timer1 Timer2 其中 Timer1 Timer2 被系统保留 用于实时操作系统 如果不用于实时操作系统 用户也可以使用这两个定时器定时器工

    2026年3月26日
    2
  • 远程服务器虚拟显示器配置方法选择_自建远程桌面服务器

    远程服务器虚拟显示器配置方法选择_自建远程桌面服务器远程服务器配置虚拟显示器

    2022年8月21日
    10
  • Jmeter参数化实现永久递增

    Jmeter参数化实现永久递增介绍一下 Jmeter 永久递增的方法 相比 Jmeter 的函数 counter 简直完美到哭一 本机安装 mysql 数据库 或者直接用测试环境的测试库二 创建自动化数据库 CREATEDATABA 三 创建自增序列第一步 创建 Sequence 管理表 DROPTABLEIFE CREATETABL

    2026年3月18日
    2
  • C++学习之路—— C++异常处理机制

    C++学习之路—— C++异常处理机制例题:1.设计一个程序,根据输入的三边求三角形面积。2.要求设置异常处理机制,对不符合三角形条件提示错误信息,不做计算;对输入非正数的边提示错误,并重新输入。代码如下:class S{public: double s; S(double x, double y, double z) { a = x; b = y; c = z; } void TryS();pr…

    2022年8月18日
    16
  • c++二分法查找_二分法查找python代码

    c++二分法查找_二分法查找python代码二分法:二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。区间的定义:区间的定义不同代码就不同。1)定义target在[left,right]区间while(left<=right)要使用<=,因为left==right是有意义的,所以使用<=。if(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[mid

    2025年6月17日
    5
  • java 字符串乱码怎么解决?

    java 字符串乱码怎么解决?我尝试了所有的设置编码的方法:1.重新给字符串编码再解码name=URLEncoder.encode(name,"ISO-8859-1"); name=URLDecoder.decode(name,"UTF-8");2.设置编码name=newString(name.getBytes(),"UTF-8");3.设置编码 //利用getBytes将unic…

    2022年6月9日
    134

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号