android studio 代码混淆
google在14年底发布了首款AndroidStudio1.0正式版,我们终
于可以摆脱Eclipse的卡顿,进而体验Studio的快感,之前有用过
Studio的朋友都应该知道,之前的Studio用起来还是不是很爽,但
是1.0正式版解决了之前版本的足,很容易上手,
比Eclipse的
代码混淆,android Studio 的代码混淆太爽了,几乎没有太多需要
我们去写的混淆配置文件,我们先来看一下Eclipse的混淆文件
- # To enable ProGuard in your project, edit project.properties
- # to define the proguard.config property as described in that file.
- #
- # Add project specific ProGuard rules here.
- # By default, the flags in this file are appended to flags specified
- # in ${sdk.dir}/tools/proguard/proguard-android.txt
- # You can edit the include path and order by changing the ProGuard
- # include property in project.properties.
- #
- # For more details, see
- # http://developer.android.com/guide/developing/tools/proguard.html
- # Add any project specific keep options here:
- # If your project uses WebView with JS, uncomment the following
- # and specify the fully qualified class name to the JavaScript interface
- # class:
- #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
- # public *;
- #}
- ##########################混淆配置文件开始##################################
- -optimizationpasses 5
- -dontusemixedcaseclassnames
- -dontskipnonpubliclibraryclasses
- -dontoptimize
- -verbose
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
- -dontwarn
- -dontskipnonpubliclibraryclassmembers
- -libraryjars ../WeSchool-api/libs/android-support-v4.jar
- -libraryjars ../WeSchool-api/libs/android-support-v7-recyclerview.jar
- -libraryjars ../WeSchool-api/libs/fastjson-1.1.42.android.jar
- -libraryjars ../WeSchool-api/libs/nineoldandroids-2.4.0.jar
- -libraryjars ../WeSchool-api/libs/umeng-analytics-v5.2.4.jar
- -libraryjars ../WeSchool-api/libs/universal-image-loader-1.9.3.jar
- -libraryjars libs/bean.jar
- # 保持哪些类不被混淆
- -keep class android.** {*; }
- -keep public class * extends android.view
- -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.pm
- -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
- -keep class com.bank.pingan.model.** { *; }
- -dontwarn com.android.volley.**
- -keep class com.android.volley.** {*;}
- -dontwarn com.why.photoaibum.**
- -keep class com.why.photoaibum.** {*;}
- -dontwarn com.nineoldandroids.**
- -keep class com.nineoldandroids.** {*;}
- -dontwarn android.support.v7.widget.**
- -keep class android.support.v7.widget.** {*;}
- -dontwarn android.support.v4.**
- -keep class android.support.v4.** {*;}
- -dontwarn com.nostra13.universalimageloader.**
- -keep class com.nostra13.universalimageloader.** {*;}
- -dontwarn com.umeng.analytics.**
- -keep class com.umeng.analytics.** {*;}
- -dontwarn u.aly.**
- -keep class u.aly.** {*;}
- -dontwarn com.alibaba.fastjson.**
- -keep class com.alibaba.fastjson.** {*;}
- #ACRA specifics
- # we need line numbers in our stack traces otherwise they are pretty useless
- -renamesourcefileattribute SourceFile
- -keepattributes SourceFile,LineNumberTable
- # ACRA needs "annotations" so add this...
- -keepattributes *Annotation*
- -keep class org.apache.commons.lang.**{*;}
- # 保持 native 方法不被混淆
- -keepclasseswithmembernames class * {
- native <methods>;
- }
- # 保持自定义控件类不被混淆
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);
- }
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet, int);
- }
- -keepclasseswithmembers class * {
- void onClick*(...);
- }
- -keepclasseswithmembers class * {
- *** *Callback(...);
- }
- # 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*();
- }
- # 保持自定义控件类不被混淆
- -keepclassmembers class * extends android.app.Activity {
- public void *(android.view.View);
- }
- # 保持 Parcelable 不被混淆
- -keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
- }
- -keepclassmembers class **.R$* {
- public static <fields>;
- }
- # fastjson
- -keep class com.alibaba.fastjson.**{*;}
- # keep 所有的 javabean
- -keep class com.goldnet.mobile.entity.**{*;}
- # keep 泛型
- -keepattributes Signature
- -keep public class * implements java.io.Serializable {
- public *;
- }
- -keepclassmembers class * implements java.io.Serializable {
- static final long serialVersionUID;
- private static final java.io.ObjectStreamField[] serialPersistentFields;
- private void writeObject(java.io.ObjectOutputStream);
- private void readObject(java.io.ObjectInputStream);
- java.lang.Object writeReplace();
- java.lang.Object readResolve();
- }
- <p>##########################混淆配置文件结束##################################</p>
我们再来看下Studio 的混淆
第1步,我们将模式改为打包发布模式 点击build Variants(在studio的左下角方向)
第2步 修改模式 修改为 release
第3步 检查那个jar包需要进行混淆排除,我们来看一下libs里面的jar ,展开jar,我们
明显可以看出已经混淆了的jar,然后进行混淆排除,其他的就不要管了直接默认混
淆
第4步 我们来到studio的混淆文件里面进行混淆相应的排除,打开此文件进行配置
打开之后可以看到和Eclipse的非常相似,不过这次我们只需要排除不需要混淆的,我的项目是需要排除友盟的SDK,如下图
是的,就只需要这样就可以了,是不是很简单呢,不过我的项目里面使用了fastjson 所有的常量类都需要排除,由于我的常量类都实现了序列化所以我需要这样给排除一下
如果有需要可以配置以下参数
第5步 好了这次大工告成,配置的混淆文件OK了,接下来就可以开启混淆配置的属性