Android Studio 混淆打包
2017-03-20 14:26
309 查看
混淆后请安装如这样的反编译工具 进行验证查看。
1.在build grade中添加代码:
2.修改文件:proguard-rules.pro请参考:官方文档
2.1 第三方lib包的混淆(不再有警告提醒)
2.2 某个包下的类不用混淆
2.3 android常用的混淆配置
详细原理请参考ProGuard
1.在build grade中添加代码:
buildTypes { debug { // 显示Log buildConfigField "boolean", "LOG_DEBUG", "true" versionNameSuffix "-debug" minifyEnabled false zipAlignEnabled false shrinkResources false signingConfig signingConfigs.debug } release { //不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" //混淆 minifyEnabled true //Zipalign优化 zipAlignEnabled true //移除无用的resource文件 shrinkResources true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //签名 signingConfig signingConfigs.release } }
2.修改文件:proguard-rules.pro请参考:官方文档
2.1 第三方lib包的混淆(不再有警告提醒)
#混淆保护自己项目的部分代码以及引用的第三方jar包library -libraryjars libs/umeng-analytics-v5.2.4.jar -libraryjars libs/alipaysecsdk.jar -libraryjars libs/alipayutdid.jar -libraryjars libs/weibosdkcore.jar
2.2 某个包下的类不用混淆
#应用中不需要混淆的代码- -keep class com.android.smarttouch.ctrl.** { *; }
2.3 android常用的混淆配置
-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #优化 不优化输入的类文件 -dontoptimize #预校验 -dontpreverify #混淆时是否记录日志 -verbose # 混淆时所采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #保护注解 -keepattributes *Annotation* # 保持哪些类不被混淆 -keep public class * extends android.app.Fragment -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -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.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService #如果有引用v4包可以添加下面这行 -keep public class * extends android.support.v4.app.Fragment #忽略警告 -ignorewarning ##记录生成的日志数据,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump proguard/class_files.txt #未混淆的类和成员 -printseeds proguard/seeds.txt #列出从 apk 中删除的代码 -printusage proguard/unused.tx 4000 t #混淆前后的映射 -printmapping proguard/mapping.txt ########记录生成的日志数据,gradle build时 在本项目根目录输出-end###### #如果引用了v4或者v7包 -dontwarn android.support.** ####混淆保护自己项目的部分代码以及引用的第三方jar包library-end#### #保持 native 方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } #保持自定义控件类不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } #保持自定义控件类不被混淆 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } #保持 Parcelable 不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #保持 Serializable 不被混淆 -keepnames class * implements java.io.Serializable #保持 Serializable 不被混淆并且enum 类也不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; !private <fields>; !private <methods>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #保持枚举 enum 类不被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * { public void *ButtonClicked(android.view.View); } #不混淆资源类 -keepclassmembers class **.R$* { public static <fields>; } #避免混淆泛型 如果混淆报错建议关掉 #-keepattributes Signature #gson #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。 -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.** { *; } -keep class com.google.gson.stream.** { *; } #mob -keep class android.net.http.SslError -keep class android.webkit.**{*;} -keep class cn.sharesdk.**{*;} -keep class com.sina.**{*;} -keep class m.framework.**{*;} -keep class **.R$* {*;} -keep class **.R{*;} -dontwarn cn.sharesdk.** -dontwarn **.R$* #butterknife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* <fields>; } -keepclasseswithmembernames class * { @butterknife.* <methods>; }
详细原理请参考ProGuard
相关文章推荐
- android Studio 混淆打包jar,已经添加其他文件到jar
- 如何使用Android Studio打包混淆的Jar
- Android Studio 混淆打包及常见第三方依赖的混淆配置
- Android Studio混淆打包错误
- 使用Android Studio应用打包+代码混淆
- Android Studio多模块的SDK项目打包和混淆
- 如何使用Android Studio打包混淆的Jar
- Android Studio混淆打包配置
- Android studio 打包、混淆
- 使用Android Studio手把手教你将应用打包+代码混淆
- Android笔记--Android Studio 引用第三方开源类okhttp、gson库时的打包混淆
- 【Android Studio】代码混淆与多渠道打包(二)
- Android studio 混淆+打包+验证是否成功
- Android Studio多渠道打包和代码混淆教程
- android studio中批量混淆打包
- Android studio 混淆打包安装后报错NullPointerException int java.util.List.size()
- Android Studio 混淆打包
- 关于Android Studio打包混淆以及上传mapping文件
- 关于Android Studio打包混淆以及上传mapping文件
- 使用Android Studio混淆打包