【问题标题】:Android to Unable to instantiate Application java.lang.ClassNotFoundException:Android 无法实例化应用程序 java.lang.ClassNotFoundException:
【发布时间】:2012-05-05 21:27:27
【问题描述】:

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

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

【问题讨论】:

  • 你能添加完整的堆栈跟踪吗?
  • 您的 ADT 版本是多少?
  • 尝试从你的项目中移除 proguard。
  • 我没有更改“proguard.cfg”中的任何内容。你的意思是我必须删除“proguard.cfg”?
  • 是的,我的意思完全一样。试试吧。

标签: android


【解决方案1】:

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

Similar Question

【讨论】:

  • 我认为这是问题的真正根源。我的应用目前有 installLocation="auto"。自从我从“内部”切换后就遇到了问题。 SD 卡有其他问题,应用程序从用户设备中消失。安卓坏了:(
  • 同意...在我的情况下,对于 380k 活跃用户,该错误被报告了 44 次。我的应用程序具有自动安装位置。报告此情况的具体设备是 DROID Razr。 HTC Evo,一,欲望,感觉。索尼Xperia。然后是各种三星 Galaxy S 2、3、4 和 Note。以上所有手机似乎都有micro SD卡。有趣的是,任何 Nexus 都从未报告过该错误。但是我不确定“/mnt/asec/...”是否仅指向 microSD 卡而不是 USB 存储。
【解决方案2】:

我认为问题在于我在 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 周内不再崩溃),那么我将结束这个问题。同时任何人有更好的想法或知道解决方案,请分享。
谢谢,

【讨论】:

  • 我已经在市场上上传了新版本,从那以后我没有收到任何与“无法实例化应用程序 java.lang.ClassNotFoundException”相关的崩溃报告,所以我认为问题已经解决。非常感谢大家的建议。
  • 我从第一个版本开始就使用这种方法,但我仍然每月收到一两次 ClassNotFoundException。如果你说的是这种情况,它应该会因 ClassCast 异常而不是 ClassNotFound 而崩溃。
  • 是的,我从一小部分用户那里遇到了这样的崩溃。我使用强制转换方法,但我不明白为什么在使用单例方法时会有所不同。由于它发生在一小部分人身上,因此可能很难知道您何时真正解决了问题。 @junto 自从更改为单例方法后,您是否遇到过这样的崩溃?
  • 是的,我想知道这个。似乎崩溃应该发生在应用程序尚未启动之前。
  • 也认为这与选角无关。我一直在使用单例方法,拥有 44 份报告和 38 万活跃用户。
【解决方案3】:

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

【讨论】:

  • 我只需要再次导出签名包。我不需要手动使用 jarsigner 和 zipalign。
【解决方案4】:
 android:name=".MyApplication"

也可以考虑加全包

【讨论】:

  • 对不起,实际代码中没有空格,空格是由于在这里编辑而造成的,对此我深表歉意。谢谢你的时间。在我之前的构建中,我使用了完整的 pakcage 路径,但我得到了相同的崩溃报告。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2011-08-17
  • 2016-03-02
  • 2014-03-30
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多