Android里,使用Ellispe混淆jar包的時候,如果jar包里沒有訪問資源文件的代碼,那么直接配置proguard即可,但是如果需要jar包里有訪問資源文件的代碼,那么直接混淆會有問題:
因為混淆jar包的時候,需要找到代碼內(nèi)的所有定義。
所以需要使用靜態(tài)的R,因為內(nèi)部如果沒有R的定義,混淆會失敗。
具體做法是,單獨保存R文件,在代碼里引用文件,例如:
public final classR {
public static final classattr {
}
public static final classcolor {
public static final intsolid_black=0x7f040001;
public static final intsolid_white=0x7f040000;
}
public static final classdimen {
public static final footer_max_length=0x7f050002;
}
}
然后在需要加載資源的時候,使用此類即可。這樣就不會出錯了。
但是在Android Studio下,這樣做就不行了。
因為Android Studio下使用靜態(tài)R會有問題,會報找不到資源的錯誤。那么在Android Studio下代碼混淆的時候,只混淆aar即可,不能使用靜態(tài)的R,還是使用Build里的R即可。