安卓代碼混淆注意事項
安卓代碼混淆時經常會出現各種問題,下面羅列一些注意事項1.依賴的工程中使用的jar包若和工程自身中的jar包一樣的話,直接刪除依賴工程中相同的jar包即可2.native方法要阻止混淆 例:# natvie 方法不混淆-keepclasseswithmembernames class * { native ;} 3.若自訂基類Activity中有根據名稱為控制項注入值的要採用如下方法阻止欄位被混消如 基類Activity中有如下控制項注入方法 protected void smartInject() { Class clz=getClass(); Field[] fs=clz.getDeclaredFields(); Resources res = getResources(); String packageName = getPackageName(); for (Field field : fs) { if (!View.class.isAssignableFrom(field.getType())) {continue;} int viewId = res.getIdentifier(field.getName(), id, packageName); if (viewId==0) continue; field.setAccessible(true); try { View v=findViewById(viewId); field.set(this,v); Class c=field.getType(); Method m=c.getMethod(setOnClickListener, android.view.View.OnClickListener.class); m.invoke(v, this); } catch (Throwable e) { // e.printStackTrace(); } field.setAccessible(false); } } -keep class 應用程式套件名.R$id{*;} -keep public class * extends 包名.基類Activity { ;}3.常見的一些阻止代碼混淆的寫法-keep class com.iflytek.**{*;}-libraryjars libs/BaiduLBS_Android.jar-libraryjars libs/fastjson-1.1.39.jar -libraryjars libs/bcprov-jdk15-143.jar-libraryjars libs/android-support-v4.jar -keep class com.baidu.** { *; } -keep class vi.com.gdi.bgl.android.**{*;} -keep class okio.** {*;}-dontwarn okio.**-dontwarn com.alibaba.**-dontwarn org.bouncycastle.**-keepattributes Signature-keepattributes *Annotation*