2步完成代碼混淆,2步代碼混淆

來源:互聯網
上載者:User

2步完成代碼混淆,2步代碼混淆

【第一步】:

修改module下的build.gradle
     buildTypes {
       release {
           // 是否進行混淆
           minifyEnabled true
           // 混淆檔案的位置
           // proguard是一個壓縮、最佳化和混淆Java位元組碼檔案的免費的工具
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
     }

【第二步】:

在proguard-rules.pro中添加:
#指定代碼的壓縮層級
-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 class_files.txt
#未混淆的類和成員
-printseeds seeds.txt
#列出從 apk 中刪除的代碼
-printusage unused.txt
#混淆前後的映射
-printmapping mapping.txt

########記錄產生的日誌資料,gradle build時 在本項目根目錄輸出-end######


#####混淆保護自己項目的部分代碼以及引用的第三方jar包library#######

#-libraryjars libs/umeng-analytics-v5.2.4.jar

#三星應用市場需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar
#-libraryjars libs/sdk-v1.0.0.jar
#-libraryjars libs/look-v1.0.1.jar

#如果不想混淆 keep 掉
-keep class com.lippi.recorder.iirfilterdesigner.** {*; }
#友盟
-keep class com.umeng.**{*;}
#項目特殊處理代碼

#忽略警告
-dontwarn com.lippi.recorder.utils**
#保留一個完整的包
-keep class com.lippi.recorder.utils.** {
*;
}

-keep class com.lippi.recorder.utils.AudioRecorder{*;}


#如果引用了v4或者v7包
-dontwarn android.support.**

####混淆保護自己項目的部分代碼以及引用的第三方jar包library-end####

-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*(...);
}

#保持 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);
}

#保持 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 class * implements java.io.Serializable即可
#-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

#移除log 測試了下沒有用還是建議自己定義一個開關控制是否輸出日誌
#-assumenosideeffects class android.util.Log {
# public static boolean isLoggable(java.lang.String, int);
# public static int v(...);
# public static int i(...);
# public static int w(...);
# public static int d(...);
# public static int e(...);
#}

#如果用用到Gson解析包的,直接添加下面這幾行就能成功混淆,不然會報錯。
#gson
#-libraryjars libs/gson-2.2.2.jar
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.