28

我正在开发托管在 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

4 回答 4

11

其他一些类似的问题表明这可能是用户错误。“/mnt/asec/...”表示应用程序正在从 sdcard 运行。如果 SD 卡被移除,可能会导致此错误。3rd 方应用程序或 root 设备可能会将应用程序移动到 sdcard,即使清单不允许。

类似问题

于 2013-01-18T08:21:56.720 回答
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();

安装的

     MyApplication application = (MyApplication) getApplication();

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

于 2012-04-27T06:32:00.437 回答
1

就我而言,我正在使用 Eclipse ADT 编译和签名(使用文件 > 导出 > 导出 Android 应用程序...),但如果我反编译我的 .apk,则会丢失一些类。为了解决这个问题,我使用“导出未签名的 APK”并使用 jarsigner 和 zipalign 对其进行签名。

于 2014-02-12T12:14:25.203 回答
0
 android:name=".MyApplication"

还可以考虑添加完整包

于 2012-04-25T07:53:57.177 回答