詳細講解Android對本身的應用代碼進行混淆加密防止反編譯

1.查看項目中有沒有proguard.cfg。html

 

2.若是沒有那就看看這個文件中寫的什麼吧,看完後將他複製到你的項目中。java

-optimizationpasses 5android

-dontusemixedcaseclassnamesapp

-dontskipnonpubliclibraryclasseside

-dontpreverify加密

-verbosespa

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*code

-keep public class * extends android.app.Activityhtm

-keep public class * extends android.app.Applicationblog

-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

 

-keepclasseswithmembernames class * {

    native ;

}

 

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet);

}

 

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet, int);

}

 

-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

}

3.複製到項目中後打開project.properties文件

4.打開後在項目中加上一句話:proguard.config=proguard.cfg

5.這樣就開始按照正常的簽名對本身的應用進行簽名,生成後的apk通過反編譯後就會和源代碼有很大的不同,不過這一步你會遇到不少問題,根本就簽名不成功。例如:①若是工程引入了android-support-v4的jar類庫,那麼在工程打包混淆時,就會出現報錯提示你:You may need to specify additional library jars (using '-libraryjars')。②引用第三方包等問題

 

6.那就詳細講解5中出現的問題

若是工程引入了android-support-v4的jar類庫,那你就在proguard.cfg裏的後面,添加以下內容:

-libraryjars /android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep public class * extends android.support.v4.**

-keep public class * extends android.app.Fragment

而後你再打包看看,應該能夠正常生成apk安裝包了。

 

若是出現:"類1 can't find referenced class 類2" 字面上的意思就是類1找不到類2的引用;它會建議你:"You may need to specify additional library jars (using '-libraryjars').";

須要使用-libraryjars加上項目中使用到的第三方庫就OK了。

例如:-libraryjars /android-support-v4.jar

注意:這裏引用方式是當前工程的根目錄(也能夠配置其餘目錄),也就是說,你要把第三方jar放到當前目錄下,不然就會警告說找不到jar文件!

 

若是出現: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator,碰到這樣的狀況,能夠使用-dontwarn com.xx.yy.**,不對錯誤提出警告。

注意:使用這個方式的話,要確保本身沒有用到這個庫裏面的類!不然就會拋ClassNotFoundException!

 

若是在工程中確實用到了該類,採用上面方式仍是不行。這個時候就要再增長一項:-keep class com.xx.yy.** { *;},讓當前類不混淆。

 

總結:

對於引用第三方包的狀況,能夠採用下面方式避免打包出錯:

-libraryjars /aaa.jar

-dontwarn com.xx.yy.**

-keep class com.xx.yy.** { *;}

最後打包成功,祝君成功混淆加密!

 

7.附上完整的proguard.cfg

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

 

-dontwarn com.slidingmenu.**

-keep class com.slidingmenu.** { *;}

 

-libraryjars /libs/android-support-v4.jar

-dontwarn android.support.v4.**

-keep class android.support.v4.** { *; }

-keep public class * extends android.support.v4.**

-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

 

-keepclasseswithmembernames class * {

    native ;

}

 

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet);

}

 

-keepclasseswithmembers class * {

    public (android.content.Context, android.util.AttributeSet, int);

}

 

-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

 

-keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

}

轉自http://blog.sina.com.cn/s/blog_6e334dc70101d5sh.html

相關文章
相關標籤/搜索