android studio apk混淆
来源:互联网 发布:windows 禁用服务命令 编辑:程序博客网 时间:2024/06/07 17:07
在Android Studio当中混淆APK实在是太简单了,借助SDK中自带的Proguard工具,只需要修改app module 下的build.gradle中的一行配置即可。可以看到,现在build.gradle中minifyEnabled的值是false,这里我们只需要把值改成true,编译出来的APK包就会是混淆过的了。如下所示:
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.release } debug { signingConfig signingConfigs.debug } }
其中:
minifyEnabled用于设置是否启用混淆;
shrinkResources用于设置删除无效的Resources,shrinkResources依赖于minifyEnabled,必须一起使用;
proguardFiles用于选定混淆配置文件。注意这里是在release闭包内进行配置的,因此只有编译出正式版的APK才会进行混淆,Debug版的APK是不会混淆的。当然这也是非常合理的,因为Debug版的APK文件我们只会用来内部测试,不用担心被人破解。
proguard-android.txt混淆配置文件,该文件存放于android studio的sdk目录下androidsdk\tools\proguard,打开文件如下:
# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * { native;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends android.view.View { void set*(***); *** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR;}-keepclassmembers class **.R$* { public static ;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.-dontwarn android.support.**# Understand the @Keep support annotation.-keep class android.support.annotation.Keep-keep @android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * { @android.support.annotation.Keep ;}-keepclasseswithmembers class * { @android.support.annotation.Keep ;}-keepclasseswithmembers class * { @android.support.annotation.Keep (...);}
我就问你 是不是感觉头很大,哈哈 别着急下面还有解释。
这个就是默认的混淆配置文件了,我们来一起逐行阅读一下。
好了,这就是proguard-android.txt文件中所有默认的配置,而我们混淆代码也是按照这些配置的规则来进行混淆的。经过我上面的讲解之后,相信大家对这些配置的内容基本都能理解了。
回到Android Studio项目当中,APK虽然已经成功混淆了,但是混淆的规则都是按照proguard-android.txt中默认的规则来的,当然我们也可以修改proguard-android.txt中的规则,但是直接在proguard-android.txt中修改会对我们本机上所有项目的混淆规则都生效,那么有没有什么办法只针对当前项目的混淆规则做修改呢?当然是有办法的了,你会发现任何一个Android Studio项目在app模块目录下都有一个proguard-rules.txt(proguard-rules.pro)文件,这个文件就是用于让我们编写只适用于当前项目的混淆规则的。自定义混淆通用模板如下:
empty
# AndroidEventBus-keep class org.simple.** { *; }-keep interface org.simple.** { *; }-keepclassmembers class * { @org.simple.eventbus.Subscriber;}# 百度地图(jar包换成自己的版本,记得签名要匹配)-libraryjars libs/baidumapapi_v2_1_3.jar-keep class com.baidu.** {*;}-keep class vi.com.** {*;}-keep class com.sinovoice.** {*;}-keep class pvi.com.** {*;}-dontwarn com.baidu.**-dontwarn vi.com.**-dontwarn pvi.com.**# Bugly-dontwarn com.tencent.bugly.**-keep class com.tencent.bugly.** {*;}# ButterKnife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* ;} -keepclasseswithmembernames class * { @butterknife.* ;}# EventBus-keepattributes *Annotation*-keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe ;}-keep enum org.greenrobot.eventbus.ThreadMode { *; }# Facebook-keep class com.facebook.** {*;}-keep interface com.facebook.** {*;}-keep enum com.facebook.** {*;}# FastJson-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *; }-keepattributes Signature-keepattributes *Annotation*# Fresco-keep class com.facebook.fresco.** {*;}-keep interface com.facebook.fresco.** {*;}-keep enum com.facebook.fresco.** {*;}# 高德相关依赖# 集合包:3D地图3.3.2 导航1.8.0 定位2.5.0-dontwarn com.amap.api.**-dontwarn com.autonavi.**-keep class com.amap.api.**{*;}-keep class com.autonavi.**{*;}# 地图服务-dontwarn com.amap.api.services.**-keep class com.map.api.services.** {*;}# 3D地图-dontwarn com.amap.api.mapcore.**-dontwarn com.amap.api.maps.**-dontwarn com.autonavi.amap.mapcore.**-keep class com.amap.api.mapcore.**{*;}-keep class com.amap.api.maps.**{*;}-keep class com.autonavi.amap.mapcore.**{*;}# 定位-dontwarn com.amap.api.location.**-dontwarn com.aps.**-keep class com.amap.api.location.**{*;}-keep class com.aps.**{*;}# 导航-dontwarn com.amap.api.navi.**-dontwarn com.autonavi.**-keep class com.amap.api.navi.** {*;}-keep class com.autonavi.** {*;}# Glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}# Gson-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。# 将下面替换成自己的实体类-keep class com.example.bean.** { *; }# Jackson-dontwarn org.codehaus.jackson.**-dontwarn com.fasterxml.jackson.databind.**-keep class org.codehaus.jackson.** { *;}-keep class com.fasterxml.jackson.** { *; }# 极光推送-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }# OkHttp3-dontwarn com.squareup.okhttp3.**-keep class com.squareup.okhttp3.** { *;}-dontwarn okio.**# Okio-dontwarn com.squareup.** -dontwarn okio.** -keep public class org.codehaus.* { *; } -keep public class java.nio.* { *; }# OrmLite-keepattributes *DatabaseField* -keepattributes *DatabaseTable* -keepattributes *SerializedName* -keep class com.j256.**-keepclassmembers class com.j256.** { *; }-keep enum com.j256.**-keepclassmembers enum com.j256.** { *; }-keep interface com.j256.**-keepclassmembers interface com.j256.** { *; }# Realm-keep class io.realm.annotations.RealmModule-keep @io.realm.annotations.RealmModule class *-keep class io.realm.internal.Keep-keep @io.realm.internal.Keep class * { *; }-dontwarn javax.**-dontwarn io.realm.**# Retrofit-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions# Retrolambda-dontwarn java.lang.invoke.*# RxJava RxAndroid-dontwarn sun.misc.**-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { long producerIndex; long consumerIndex;}-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { rx.internal.util.atomic.LinkedQueueNode producerNode;}-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { rx.internal.util.atomic.LinkedQueueNode consumerNode;}# 微信支付-dontwarn com.tencent.mm.**-dontwarn com.tencent.wxop.stat.**-keep class com.tencent.mm.** {*;}-keep class com.tencent.wxop.stat.**{*;}# 信鸽-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep class com.tencent.android.tpush.** {* ;}-keep class com.tencent.mid.** {* ;}-keepattributes *Annotation*# 新浪微博-keep class com.sina.weibo.sdk.* { *; } -keep class android.support.v4.* { *; } -keep class com.tencent.* { *; } -keep class com.baidu.* { *; } -keep class lombok.ast.ecj.* { *; } -dontwarn android.support.v4.** -dontwarn com.tencent.**s -dontwarn com.baidu.** # 讯飞语音-dontwarn com.iflytek.**-keep class com.iflytek.** {*;}# 银联-dontwarn com.unionpay.**-keep class com.unionpay.** { *; }# 友盟统计分析-keepclassmembers class * { public (org.json.JSONObject); }-keepclassmembers enum com.umeng.analytics.** { public static **[] values(); public static ** valueOf(java.lang.String);}# 友盟自动更新-keepclassmembers class * { public (org.json.JSONObject); }-keep public class cn.irains.parking.cloud.pub.R$*{ public static final int *; }-keep public class * extends com.umeng.**-keep class com.umeng.** { *; }# 支付宝钱包-dontwarn com.alipay.**-dontwarn HttpUtils.HttpFetcher-dontwarn com.ta.utdid2.**-dontwarn com.ut.device.**-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.alipay.mobilesecuritysdk.*-keep class com.ut.*
- android studio apk混淆
- Android Studio上如何混淆打包apk
- Android studio 代码混淆和破解apk
- Android Studio代码混淆和破解apk
- Android studio 代码混淆和破解apk
- Android studio 代码混淆及打包apk
- Android Studio 混淆打包apk【简单可行】
- Android studio 代码混淆及打包apk
- 混淆apk:Android中使用eclipse混淆apk和studio混淆app的不同
- 【Android】Android Studio 进行代码混淆,打包release APK
- Android Studio下做打包apk加代码混淆
- Android Studio(十一):代码混淆及打包apk
- Android studio 使用心得(五)---代码混淆和破解apk
- Android studio 使用---代码混淆和破解apk
- Android studio gradle 代码混淆和破解apk
- Android Studio(十一):代码混淆及打包apk
- Android Studio(十一):代码混淆及打包apk
- Android Studio(十一):代码混淆及打包apk
- 20160805冯天鹤笔记
- 20160808 笔记 ubuntu,vim简单命令在ubuntu下编写nodejs
- 20160809 笔记 nodejs文件和URL操作
- 20160810笔记 nodejs交互
- setField()方法
- android studio apk混淆
- 从Windows用scp往linux里传输文件
- 20160811(公开课)配置小规模服务器集群
- 20160812mongodb增删改查和express的理解
- 20160815 nodejs对mongodb的操作
- 20160816 JQueryMobile的使用
- 20160817(公开课)通往架构师之路--全栈工程师
- Oracle 如何在sql语句中获得随机数
- 20160818 短信接口和ajax请求