2012-04-25 22 views
28

私はアンドロイドマーケットのホストであるアプリケーションで作業しています。時々(月に一度)私はクラッシュレポートを得た:Androidからアプリケーションをインスタンス化できません。java.lang.ClassNotFoundException:

アプリケーションにjava.lang.ClassNotFoundExceptionをインスタンス化できません

アプリのダウンロードは10,000〜50,000の間です。なぜ私はこの例外がすべてではないいくつかのデバイス上で発生するのか分かりません(私は3つの異なるデバイスでそれをテストしました&私は私の最後にそれを再現できませんでした)。

問題についてはアンドロイドのフォーラムで記事や提案を読みましたが、解決には至りませんでした。誰も似たような問題に直面していますか&私は何をすべきですか?

注:

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) 
: 私はこの

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

スタックトレースのようなのmanifest.xmlに登録この

public class MyApplication extends Application { 

} 

のようなアプリケーションクラスを拡張しています

一部のデバイスでアプリケーションがクラッシュする理由がわかりません。

+0

完全なスタックトレースを追加できますか? –

+0

ADTのバージョンは何ですか? – Akram

+0

@Akki ADTバージョンは12 – junto

答えて

6

を追加することを検討してください。だから私はこれを解決するためにシングルトンパターンを使用しました。今、私はこの種はもう存在している場合は、今待っている市場&に固定されたバージョンをアップロードした

 MyApplication application = (MyApplication) getApplication(); 

のこの

 MyApplication application = MyApplication.getInstance(); 

instedようgetApplicationを()を使用している

public class MyApplication extends Application { 
    private static MyApplication me; 

    @Override 
    public void onCreate() {   
     super.onCreate(); 
     me = this ; 

    } 
    public static MyApplication getInstance() { 
     return me; 
    } 
} 

クラッシュのすべてが完璧になったら(2週間でクラッシュしなければ)、私は質問を終わらせます。その間に誰かが良いアイデアや解決策を知っている、それを共有してください。
ありがとう、

+0

新しいリリースを市場にアップロードして以来、「アプリケーションjava.lang.ClassNotFoundExceptionをインスタンス化できません」というクラッシュレポートを取得しなかったので、問題は解決されたと思います。皆様のご提案にとても感謝しています。 – junto

+0

私はこの最初のリリースからこのaproachを使用しましたが、私はまだ1か月に2回ClassNotFoundExceptionを取得します。あなたの言うことが当てはまる場合、ClassNotFoundではなくClassCast例外がクラッシュするはずです。 – Alexey

+1

ええ、私はこのようなユーザーの小さな%からクラッシュを取得します。私はキャスティングのアプローチを使用しますが、シングルトンアプローチを使用するときに違いが生じる理由はわかりません。少数の人に起こるので、あなたが実際に問題を解決したときを知るのは難しいかもしれません。 @juntoシングルトンアプローチに変更して以来、このようなクラッシュがあったのですか? – Fraggle

0
android:name=".MyApplication" 

も、私は、問題は、私は10の異なる場所で使用されてきたgetApplication()であると思います完全なパッケージ

+0

申し訳ありませんが、実際のコードにスペースはありません。スペースはここの編集に起因していましたが、残念です。御時間ありがとうございます。以前のビルドでは完全なpakcageパスを使用しましたが、同じクラッシュレポートがあります。 – junto

11

他の類似の質問には、これがユーザーエラーである可能性があることが示されています。 "/ mnt/asec/..."は、アプリケーションがsdcardから実行されていることを示します。 sdcardが削除されると、このエラーが発生する可能性があります。サードパーティのアプリやルートデバイスでは、マニフェストで許可されていない場合でも、おそらくアプリをSDカードに移動できます。私の場合は

Similar Question

+2

私はこれが問題の根源だと思っています。私のアプリは現在installLocation = "auto"を持っています。私は「内部」から切り替えたので問題はなかった。 SDカードで他の問題が発生しました.SDカードは、ユーザーの端末からアプリが消えるだけです。 Androidが壊れていた:( – Fraggle

+0

合意...私の場合、エラーは380kのアクティブユーザーの44回の報告でした。私のアプリは場所の自動インストールを行っています。興味のあることに、このエラーはNexusで一度も報告されていませんでしたが、「/ mnt/asec/...」と表示されているかどうかはわかりませんが、 – petrsyn

1

私は私の.apkをコンパイルすると、私はコンパイルとEclipse ADTと契約(ファイル付き]> [エクスポート]> [エクスポート]のAndroidアプリケーション...)が、いくつかのクラスが欠落していました。 これを解決するには、「署名されていないAPKをエクスポートする」を使用し、jarsignerとzipalignを使用して署名します。

+0

署名されたパッケージを再度エクスポートするだけで済み、jarsignerとzipalignを手動で使用する必要はありませんでした。 – faizal

関連する問題