最近作了2個項目,所有要混淆,剛接觸,本身在網上找了還多資料,感受各有千秋,本身總結了一下, 第一次發帖,不喜勿噴。求各類指導!!!
android
應用程序的混淆打包規範
1.在工程文件
project.properties
中加入下
proguard.config=proguard.cfg
, 以下所示:
target=android-8
proguard.config=proguard.cfg
Eclipse
會經過此配置在工程目錄生成
proguard.cfg
文件,可是這隻能混淆不含第三方包的工程。
而咱們的項目中大量使用了第三方包,在用自動生成的混淆文件會致使打包不成功,或者打包成功不能運行的狀況,因此必須在基本代碼的基礎加上其餘的屬性將第三方庫隔離開來不被混淆。
2.
含有第三方庫的工程混淆,首先去看引用庫的官方文檔,通常會給出混淆方案,由於有時第三方庫中也許不僅有一個
jar
包,第三方庫自己可能也會用到其餘的
jar
包,一個個找出來去單獨混淆會很浪費時間。
3.
常見第三方庫混淆流程:
1.首先加入-dontwarn//
不用輸出警告,增大混淆的成功率
2.將對應的第三方庫的包名採用一樣的方法解除警告
-dontwarn com.slidingmenu.lib.app.**
-dontwarn com.actionbarsherlock.app.**
-dontwarn android.support.v4.**
-dontwarn com.slidingmenu.lib.**
-dontwarn cn.sharesdk.**
3.指明
lib
包的在工程中的路徑,-libraryjars
後面跟要編譯
in.jar 的其它類包,若是是多個,用多行列出
-libraryjars libs/gson-2.2.2.jar
4.
引入後,對項目使用到的入口類進行指定,-keep
後跟項目的 入口類
-keep class universal-image-loader-1.8.4-with-sources.** { *; }
-keep interface universal-image-loader-1.8.4-with-sources.** { *; }
-keep class lockSDK_3.3.** { *; }
-keep interface lockSDK_3.3.** { *; }
-keep class MobileProbe.jar.** { *; }
-keep interface MobileProbe.jar.** { *; }
-keep class android.net.http.SslError
-keep class android.webkit.**{*;}
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}
keep
就是 告訴
proguard
不用混淆這個包裏面的類
5.
有一些特殊包須要注意
若是加了
android.support
包的話,那麼要加上
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { ; }
若是加了
gson
包的話,那麼要加上
-libraryjars libs/gson-2.2.2.jar
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.* { ; }
-keep class com.google.gson.examples.android.model.* { ; }
-keep class com.google.gson.* { *;}
若是項目中含有引用接口的實體的話,那麼要加上
-keep public class * implements java.io.Serializable{
public protected private *;
}
若是項目中含有設值注入的實體的話,可能會在打包運行不報錯, 可是運行報錯,好比空指針異常,或者是反射的時候報錯是不 是實體類被混淆了。致使找不到實體類 沒法
get
或者
set
,那麼 要加上
-keep public class mypackage.MyBean { public void setMyProperty(int); public int getMyProperty();}
4.最後,咱們看一看混淆的過程
-libraryjars libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { ; }
解釋:
-libraryjars指明
lib
包的在工程中的路徑,而-dontwarn android.support.v4.**和-keep class android.support.v4.** { ; },這兩個參數用來保持第三方庫中的類而不亂,將
-dontwarn
和
-keep
結合使用,意思是保持android.support.v4.** { ; },這個包裏面的全部類和全部方法而不混淆,接着還叫
ProGuard
不要警告找不到android.support.v4.** { ; }這個包裏面的類的相關引用,防止可接受警告的出現影響到程序的運行。
注:混淆基本流程就是這樣,不一樣的第三方庫大同小異,均可以採用這種方法去處理!!!
|