Android 工程混淆後報出如下錯誤:
10-19 13: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.AppPicsGallery in loader dalvik.system.PathClassLoader[/data/app/com
.neusoft.neuapp.ui-1.apk]
E/AndroidRuntime(13480): at dalvik.system.PathClassLoader.findClass(PathC
lassLoader.java:240)
E/AndroidRuntime(13480): at java.lang.ClassLoader.loadClass(ClassLoader.j
ava:551)
E/AndroidRuntime(13480): at java.lang.ClassLoader.loadClass(ClassLoader.j
ava:511)
E/AndroidRuntime(13480): at android.view.LayoutInflater.createView(Layout
Inflater.java:471)
E/AndroidRuntime(13480): at android.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 class packagename.** {*;}
這样就能完整保持原有class了。
留言列表