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

相关推荐

  • Linux tar 打包排除某些文件夹[通俗易懂]

    Linux tar 打包排除某些文件夹[通俗易懂]场景想要将以前的程序打包下来,但是发现有log日志,而且比较大,有几G大。解决思路打包的时候,将某些文件夹给排除掉,只打包自己想要的文件。解决方法使用tar命令来进行打包,并使用-exclude这个参数来排除一个文件夹。如果存在多个排除文件夹,就要写多个参数。示例tar-zcvfscheduler_20180508.tar.gz–exclude=s…

    2022年5月29日
  • 关于gitlab Web IDE功能使用

    关于gitlab Web IDE功能使用gitlabWebIDE使用1,进入gitlab项目路径,可以看到有个WebIDE按钮2,点击WebIDE按钮,跳到下面的界面 2.1.在这里可以建新的文件夹或者文件。 2.2.选中新建的文件夹newfoldr,点击右边的按钮,选择上传文件, 2.3.点击commit 2.4.下面要选择合并到master分支。(如果你们需要每个人需要创建新的分支去合并到 master分支,也可以选下面的createanewbranch)。再点击commit

    2022年10月17日
  • contentWindow属性是指指定的frame或者iframe所在的window对象

    contentWindow属性是指指定的frame或者iframe所在的window对象contentWindow属性是指指定的frame或者iframe所在的window对象在IE中iframe或者frame的contentWindow属性可以省略,但在Firefox中如果要对iframe对象进行编辑则必须指定contentWindow属性。function EnableEdit(){     var editor;     editor = documen

    2022年10月20日
  • c语言ioctl函数_min函数用法

    c语言ioctl函数_min函数用法ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: intioctl(intfd,indcmd,…);    其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的…

    2022年10月18日
  • html5之本地存储localStorage示例

    html5之本地存储localStorage示例

    2021年9月12日
  • mapState与mapGetters语法糖

    mapState与mapGetters语法糖vuex中的mapState,mapGetters属于辅助函数,其实就是vuex的一个语法糖,使代码更简洁更优雅。<script>import{mapState,mapGetters}from”vuex”exportdefault{computed:{ //原先templateInfo(){ returnthis.$store.state.templateInfo},//现在

    2022年5月17日

发表回复

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

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