【问题标题】:ClassNotFoundException after changing app's name in Android在 Android 中更改应用程序名称后出现 ClassNotFoundException
【发布时间】:2010-12-10 09:10:41
【问题描述】:

我有一个主类名为 com.quarlityaq.quarlityaqcall.QuarlityaqCall 的应用程序。

完成编程后,我将应用名称更改为“JCall for jobs” 通过将strings.xml 下的app_name 更改为“JCall for jobs”

android:label="@string/app_name"   
android:name="@string/app_name"

在我的设备上它工作得很好,但在其他一些设备上它崩溃并抛出:

java.lang.RuntimeException: Unable to instantiate application com.quarlityaqcall.QuarlityaqCall.JCall for jobs: 
java.lang.ClassNotFoundException: com.quarlityaqcall.QuarlityaqCall.JCall for jobs 
in loader dalvik.system.PathClassLoader[/data/app-private/com.quarlityaqcall.QuarlityaqCall-1.apk]


Caused by: java.lang.ClassNotFoundException: 
com.quarlityaqcall.QuarlityaqCall.JCall for jobs in loader
dalvik.system.PathClassLoader[/data/app-private/com.quarlityaqcall.QuarlityaqCall-1.apk]

我不明白为什么它会查找类名“JCall for jobs”而不是“QuarlityaqCall”,以及为什么它只出现在某些设备上?

【问题讨论】:

  • 也许,你改变了 packageName ?

标签: android


【解决方案1】:

清单中的应用程序名称是指您的应用程序类。如果您尚未实现自己的 Application 类,则清单文件中不应包含 name 属性。如果您已经实现了一个,您应该确保该属性引用了正确的类。

您不应将 name 属性导出到 strings.xml,因为它是您应用的技术参数。标签是对用户可见的标签。

【讨论】:

  • 谢谢。所以你说name属性一定是app_name,一定是QuarlityaqCall,标签可以是app_name_readable之类的?
  • 是的。您可以在此处找到有关属性的更多信息:developer.android.com/guide/topics/manifest/…
  • 字符串中有app_name,真是误国际化了。我也是这么做的。
【解决方案2】:

此错误也可能是由于在应用程序类的声明方法中调用 getApplicationContext()(或需要此上下文的类似练习,例如通过 getSharedPreferences 连接对象)引起的。

将这些调用移至“onCreate”方法(或类似方法)的覆盖。如果在应用程序上下文完全实例化之前调用它,您将获得一个指向应用程序上下文的空指针 - 通过将此代码移动到“实例化堆栈”中的方法/函数“更深”,您将访问非空上下文(已经完全实例化的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多