在Android中更改应用程序名称后的ClassNotFoundException

时间:2010-12-10 09:10:41

标签: android

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

完成编程后,我将应用名称更改为“JCall for jobs” 通过将app_name下的strings.xml更改为“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”,以及它为什么只在某些设备上发生?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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