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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows常用端口号,以及服务对应的端口号「建议收藏」

    windows常用端口号,以及服务对应的端口号「建议收藏」查看端口在windows2000/xp/server2003中要查看端口,可以使用netstat命令:依次点击“开始→运行”,键入“cmd”并回车,打开命令提示符窗口。在命令提示符状态下键入“netstat-a-n”,按下回车键后就可以看到以数字形式显示的tcp和udp连接的端口号及状态。小知识:netstat命令用法命令格式:netstat-a-e…

    2025年8月27日
    8
  • 最受欢迎的网管工具集「建议收藏」

    最受欢迎的网管工具集「建议收藏」最受欢迎的网管工具集★★★日前,美国《NetworkWorld》通过读者调查,选出了最受读者欢迎的网络管理工具,我们也将它们推荐给国内的网管员们,希望能助他们一臂之力,使他们轻松排除网络故障。工具名称:SolarWindsEngineerEdition网址:www.solarwinds.net推荐理由:有读者说:“在不到一小时的时间内,我从网站上下载并安装了SolarWinds的授权版

    2022年10月6日
    5
  • HTTPClient和CloseableHttpClient

    使用HttpClient发送请求的一般步骤(1)创建HttpClient对象。(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。(3)如果需要发送请求参数,可调用HttpGet同的setParams(HetpParamsparams)方法来添加请求参数;对于HttpPost对象而言,可调…

    2022年4月9日
    269
  • Microsoft Office 2007 中文专业版密钥

    Microsoft Office 2007 中文专业版密钥MicrosoftOffice2007中文专业版(微软原版)正版密钥MicrosoftOfficeVisio2007简体中文专业版:简介:    便于IT和商务专业人员就复杂信息、系统和流程进行可视化处理、分析和交流。使用具有专业外观的OfficeVisio2007图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知识做出更好的业务决策。迅雷下载    …

    2022年7月19日
    21
  • 查看项目安装的webpack版本

    查看项目安装的webpack版本如何查看项目的webpack版本解决方法:在package中”webpack”:”^3.6.0″,只知道项目使用的webpack的版本号大于3.6.0,所以执行以下命令即可看到项目正在使用的版本号命令可参考:http://www.yayihouse.com/yayishuwu/chapter/2731…

    2022年8月10日
    45
  • Java中如何通过键盘输入一个数组

    Java中如何通过键盘输入一个数组有时候在编写Jave的时候需要键盘输入一个数组,本小白也是看了几篇博客后才知道了如何在自己的程序中进行键盘输入,废话不多说,直接上代码:第一种方法:(不限制输入数组的长度)System.out.println("请输入几个数并用逗号隔开:");Scannersc=newScanner(System.in);Stringstr=sc.next().toString();…

    2022年6月26日
    43

发表回复

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

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