Android 打包 工程混淆后 报错 无法找到自定义控件类的 解决方案

来源:互联网 发布:数据库系统有哪些特点 编辑:程序博客网 时间:2024/05/21 08:49

 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


解决方案:

android在用proguard混淆时,一般情况下使用系统自带的配置文件就可以保持大部分外部需要引用的类,比如Activity,view扩展等等,可以参考sdk\tools\proguard\proguard-android.txt


如果自定义控件不在proguard-android继承上面的类中,如自定义相册类MyGallery,这时就要加上:

-keep public class * extends android.widget.Gallery{

    public *;

}


如果自定义控件(MyView)继承上面的类,还报错的话,那自己再重新加上:

-keep public class yourpackagename.MyView{*;}  //单个控件

如果自很多定义控件统一放在一个包名下的话,可以这样加:

-keep public class yourpackagename.**{*;}  //整个包下的所有类


另外,有些情况下使用了aidl,也要记得加上

如果是库文件,这样加:

-libraryjars libs/android-support-v4.jar


ps.今天通过ant打包,安装时遇到证书失败的情况,是由于jdk是1.7导致,重新安装1.6就可以了




原创粉丝点击