?
Android 工程混淆后报出如下错误:
?
10-1913:26:19.750: E/AndroidRuntime(13654): Caused by:android.view.InflateException: Binary XML file line #193: Error inflating
… …
E/AndroidRuntime(13480):Caused by: java.lang.ClassNotFoundException: com.neusof
t.neuapp.ui.AppPicsGalleryin loader dalvik.system.PathClassLoader[/data/app/com
.neusoft.neuapp.ui-1.apk]
E/AndroidRuntime(13480):??????? atdalvik.system.PathClassLoader.findClass(PathC
lassLoader.java:240)
E/AndroidRuntime(13480):??????? atjava.lang.ClassLoader.loadClass(ClassLoader.j
ava:551)
E/AndroidRuntime(13480):??????? atjava.lang.ClassLoader.loadClass(ClassLoader.j
ava:511)
E/AndroidRuntime(13480):??????? atandroid.view.LayoutInflater.createView(Layout
Inflater.java:471)
E/AndroidRuntime(13480):??????? atandroid.view.LayoutInflater.createViewFromTag
(LayoutInflater.java:570)
E/AndroidRuntime(13480):??????? ... 24 more
?
在xml文件中自定义了下面一个插件:
?
对应的View实现定义如下:
?
?
解决方案:
android在用proguard混淆时,一般情况下使用系统自带的配置文件就可以保持大部分外部需要引用的类,比如Activity,view扩展等等,但是在本项目的proguard文件中没有保存AppPicsGallery所引用的Gallery类,所以要在proguard.cfg文件中加入?
-keep public class *extends android.widget.Gallery{
??? public *;
}
另外,有些情况下一些引入的外部lib,如果被混淆也会出现各种各样的问题,如果不想混淆这些包,就要加上
-keep classpackagename.** {*;}
这样就能完整保持原有class了。