2012-04-25 88 views
28

我正在開發android市場上的應用程序。有時(每月一次)我得到了一個崩潰報告:Android無法實例化應用程序java.lang.ClassNotFoundException:

無法實例化應用拋出java.lang.ClassNotFoundException

應用下載量達到10,000-50,000之間。我不知道爲什麼這些例外在一些設備上不是全部提升(我在3個不同的設備上測試過它,我不能在我的最終產品上重新生成它)&。

我讀過關於這個問題的不同android論壇上的文章/建議,但我沒有成功解決它。有沒有人遇到類似的問題&建議我該怎麼辦?

注: 我推廣應用類這樣

public class MyApplication extends Application { 

} 

我註冊它在這樣

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

堆棧跟蹤的manifest.xml:

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) 

我不知道爲什麼某些設備上的應用程序崩潰不是全部。

+0

您可以添加完整的堆棧跟蹤嗎? – 2012-04-25 07:54:41

+0

ADT的版本是什麼? – Akram 2012-04-25 09:25:32

+0

@Akki ADT版本是12 – junto 2012-04-25 09:31:12

回答

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的的

 MyApplication application = (MyApplication) getApplication(); 

我已經上傳了固定的版本市場&現在在等待,如果有再這樣的崩潰。如果一切順利(如果兩週內不再發生故障),那麼我將結束這個問題。同時任何人都有更好的想法或知道解決方案,請分享。
謝謝,

+0

我已經在市場上上傳了新版本,從那以後我沒有收到與「無法實例化應用程序java.lang.ClassNotFoundException」有關的崩潰報告,所以我認爲問題已經解決。我非常感謝大家的建議。 – junto 2012-05-09 12:57:50

+0

自從我第一次發佈以來,我已經使用了這個aproach,但是我仍然每個月都會遇到一次或兩次ClassNotFoundException。如果你說的是這種情況,它應該與ClassCast異常而不是ClassNotFound崩潰。 – Alexey 2012-07-01 06:16:14

+1

是的,我從一小部分用戶那裏得到這樣的崩潰。我使用鑄造方法,但我不明白爲什麼它會使用單例方法時有所作爲。由於它發生在一小部分人身上,因此很難知道你什麼時候解決了問題。 @junto是否因爲更改爲單例方法而崩潰? – Fraggle 2013-03-30 16:03:48

0
android:name=".MyApplication" 

也考慮加入全包

+0

對不起,實際的代碼中沒有空間,這個空間是由於編輯在這裏&我很抱歉。謝謝你的時間。在我以前的版本中,我使用了完整的pakcage路徑,但是我得到了相同的崩潰報告。 – junto 2012-04-25 07:58:03

11

一些其他類似的問題表明,這可能是一個用戶錯誤。 「/ mnt/asec/...」表示應用程序正在從SD卡運行。如果SD卡被移除,可能會導致此錯誤。第三方應用程序或有根設備可能可以將應用程序移動到SD卡,即使它不被清單允許。

Similar Question

+2

我在想這是問題的真正根源。我的應用目前有installLocation =「auto」。自從我從「內部」轉換以來一直存在問題。有SD卡的其他問題,應用程序簡單地從用戶設備中消失。 Android破解:( – Fraggle 2013-03-30 16:06:23

+0

同意...在我的情況下,錯誤報告了380次活動用戶的44次,我的應用程序已安裝位置自動,具體的設備報告這是DROID Razr HTC Evo,One,Desire,Sensation,Sony Xperia。然後各種三星Galaxy S 2,3,4和注意:以上所有手機似乎都有微型SD卡,有趣的是,任何Nexus都沒有報告錯誤,但我不確定是否「/ mnt/asec/...」只指向microSD卡而不指向USB存儲器 – petrsyn 2014-02-11 19:58:34

1

以我爲例,我是編譯和使用Eclipse ADT簽名(與文件>導出>導出Android應用程序...),但缺少一些類,如果我反編譯我的apk文件。 要解決它,我使用「導出未簽名的APK」並使用jarsigner和zipalign對其進行簽名。

+0

我只需要再次導出已簽名的軟件包,我不需要手動使用jarsigner和zipalign。 – faizal 2014-11-11 05:10:01

相關問題