Android无法实例化应用程序java.lang.ClassNotFoundException:

时间:2012-04-25 07:52:17

标签: android

我正在研究Android市场上主机的应用程序。有时(每月一次)我收到了崩溃报告:

  

无法实例化应用程序java.lang.ClassNotFoundException

应用下载量在10,000-50,000之间。我不知道为什么在某些设备上出现这种异常并不是全部(我在3种不同的设备上进行了测试,并且我无法在我的端部重新生成它)。

我在不同的Android论坛上阅读有关该问题的文章/建议,但我没有成功解决它。有没有人面临类似的问题&建议我该怎么办?

注意: 我正在扩展这样的应用程序类

public class MyApplication extends Application {

}

我在manifest.xml中注册它,就像这样

<application android:icon="@drawable/app_icon"
    android:label="@string/my_app_name" android:name="MyApplication">

堆栈追踪:

java.lang.RuntimeException: Unable to instantiate application  com.xyz.MyApplication      java.lang.ClassNotFoundException: com.xyz.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.xyz-1/pkg.apk]
at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:650)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4238)
at android.app.ActivityThread.access$3000(ActivityThread.java:126)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2076)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.xyz.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.xyz-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newApplication(Instrumentation.java:942)
at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:645)

我不知道为什么应用程序崩溃在某些设备上并非全部。

4 个答案:

答案 0 :(得分:11)

其他一些类似问题表明这可能是用户错误。 “/ mnt / asec / ...”表示应用程序正在从SD卡运行。如果删除了SD卡,则可能导致此错误。第三方应用程序或有根设备可能会将应用程序移动到SD卡,即使清单不允许这样做。

Similar Question

答案 1 :(得分:6)

我认为问题在于我在10个不同的地方使用过的getApplication()。所以我使用单例模式来解决这个问题。

public class MyApplication extends Application {
    private static MyApplication me;

    @Override
    public void onCreate() {        
        super.onCreate();
        me = this ;

    }
    public static MyApplication getInstance() {
         return me;
    }
}

现在我使用了像这样的getApplication()

     MyApplication application = MyApplication.getInstance();

insted of

     MyApplication application = (MyApplication) getApplication();

我已经在市场上发布了固定版本&amp;现在正在等待,如果再有这种崩溃。如果一切顺利(如果2周内没有更多的崩溃),那么我将结束这个问题。同时,任何人都有更好的想法或知道解决方案,请分享。
感谢,

答案 2 :(得分:1)

就我而言,我正在使用Eclipse ADT进行编译和签名(使用File&gt; Export&gt; Export Android Application ...)但是如果我反编译我的.apk,则会遗漏一些类。 为了解决这个问题,我使用“导出未签名的APK”并使用jarsigner和zipalign进行签名。

答案 3 :(得分:0)

 android:name=".MyApplication"

还考虑添加完整包