web-dev-qa-db-ja.com

Android ClassNotFoundException

私は自分のアプリの1つで問題が発生しているので、誰かがそれを引き起こしている可能性について洞察を与えてくれるかどうか疑問に思っていました。

ClassNotFoundExceptionを取得しています。以下の重要な行は

E/AndroidRuntime(21982): Caused by: Java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0

現在、このアプリは1年以上前に公開されており、2日前にこの問題に関して2人のユーザーから連絡がありました。1人はHTCの山火事(2.1)、もう1人はSamsung Galaxy S(?)です。デバイス(2.2および1.6)またはエミュレータ(2.1)でこの問題を再現できず、クラスローダーがこのクラスを見つけられない理由を実際に解決できません。私はしばらくの間グーグルで役に立たず、誰かがいくつかのポインタを持っていることを願っています! contentViewが設定されると、Viewクラスを拡張するGoBoardViewと呼ばれるカスタムビューを膨張させようとするアクティビティがロードされたときのみであるように見えます。パッケージ名の衝突などがあるサードパーティのライブラリまたはその他のクラスを使用します。

助けてください!ビルドの問題に備えて、1.6に対してビルドして古いADTを使用していたため、Eclipseを介してすべてのSDKとADTを更新していますが、これが試してみる価値があるかどうかはわかりません。どんなアドバイスでも大歓迎です! (編集については以下を参照)

E/AndroidRuntime(21982): Java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: Android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2596)
E/AndroidRuntime(21982): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2621)
E/AndroidRuntime(21982): at Android.app.ActivityThread.access$2200(ActivityThread.Java:126)
E/AndroidRuntime(21982): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1932)
E/AndroidRuntime(21982): at Android.os.Handler.dispatchMessage(Handler.Java:99)
E/AndroidRuntime(21982): at Android.os.Looper.loop(Looper.Java:123)
E/AndroidRuntime(21982): at Android.app.ActivityThread.main(ActivityThread.Java:4603)
E/AndroidRuntime(21982): at Java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21982): at Java.lang.reflect.Method.invoke(Method.Java:521)
E/AndroidRuntime(21982): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:860)
E/AndroidRuntime(21982): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:618)
E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(21982): Caused by: Android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:576)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:618)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:407)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:320)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:276)
E/AndroidRuntime(21982): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:207)
E/AndroidRuntime(21982): at Android.app.Activity.setContentView(Activity.Java:1629)
E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.Java:31)
E/AndroidRuntime(21982): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
E/AndroidRuntime(21982): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2544)
E/AndroidRuntime(21982): ... 11 more
E/AndroidRuntime(21982): Caused by: Java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.Java:243)
E/AndroidRuntime(21982): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:573)
E/AndroidRuntime(21982): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:532)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createView(LayoutInflater.Java:466)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:565)
E/AndroidRuntime(21982): ... 22 more

[〜#〜] edit [〜#〜]

OK、ユーザーがこの質問への回答としてコメントしたリンクの一部を調査すると、ロードアクティビティに間違ったコンテキストを使用するとこの問題が発生する可能性があります。私はこの興味深い結果を見つけましたone of two私が送信したログレポートは、この例外が先行しています

W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games }

これはまったく自明です-問題は、このアクティビティが非アクティビティコンテキストを使用する場所からどこから開始できるのかわからないので、ちょっと困惑して、奇妙なようなマルチタスクであり、フォアグラウンドに戻されると思う何かの 。これにより、明らかにclassLoaderで問題が発生する可能性があります。これがユーザーの携帯電話で起こっていた場合、なぜこれを再現できないのかわかりません(そして他のほとんどのユーザーもできません)。

興味深いリンクを介して私が見つけた他のことは、一部の人々が「間違ったapkインストール」のために問題に遭遇したことです。これは再インストールによって解決できます。 (違いはありません)また、問題が発生すると(最初に使用した場合)、問題は持続するようです。

34
Dori

あなたのアクティビティ名がcouk.doridori.goigoFull.Boardただし、欠落しているカスタムビュークラスはcouk.doridori.goigo.customUI.GoBoardView ... 2つの異なるパッケージ(goigoとgoigoFull)があるようです。

もしかして、図書館プロジェクトで賢いことをやっていますか?コード内およびレイアウトxml内の完全修飾クラス名には本当に注意する必要があります...

(そうでない場合は、プロジェクトのセットアップに関する情報を追加し、layoutinflaterが窒息しているレイアウトXMLを貼り付けてください)

34
Reuben Scratton

私はすでにここでこの問題について議論していました: Android:アクティビティをインスタンス化できません/ ClassNotFoundException しかし、明確な答えを見つけることができませんでした...しかし、コンテキストの正しい使用に関するジョン・J・スミスの答えは興味深いです。

また、一部の人々は このスレッド で問題を解決し、いくつかのアイデアを提供しています。

お役に立てれば...

(ところで、別のGoゲームプログラマに会えて嬉しいです!)

7
Dalmas

カスタムレイアウトを追加し、署名済みアプリケーションパッケージでのみClassNotFoundExceptionメッセージが表示されるようになりましたが、開発ビルドは正常に機能していました。 ProGuardを使用していて、追加した新しいレイアウトがProGuard構成の「除外」リストに含まれていませんでした。 ProGuard除外リストにカスタムレイアウトを含めたところ、問題が修正されました。

3
Kiran

パッケージ名を変更した後、通常は開発中にこの問題が発生します。プロジェクトをすばやく削除すると、問題が解決します。

2
Dan

私の経験では、Android sdkが更新されており、サポートライブラリへのリンクを更新する必要があります。プロジェクト設定>> Androidサポートライブラリをもう一度。

1
Yaojin

私にとって、問題は小さなCaps-Faultでした。私はすべてが大丈夫である時間にわたってコードを調べました。しばらくして.xml-Filesを調べたところ、次のようになりました。

Javaファイルでは、ViewPagerを使用しましたが、xmlの1つの厄介な小さな断片で、誤ってキャップを失い、viewPagerを入力しました。明らかに、これは見つかりませんでした...

「ClassNotFoundException」を引き起こす別のことがあります。しばらく前に、Androidプロジェクトは依存関係のためにlibsディレクトリを使用して開始しました。jarがlibsディレクトリにある場合、クラスパスに自動的にあるため、プロジェクトに追加する必要はありません。ただし、「libs」内のjarにはソースをアタッチできません(これはばかげています)。したがって、ソースをアタッチする場合は、jarを「libs」から「lib」に移動し、クラスパスに追加します。ソースをアタッチできますが、これによりクラスでClassNotFoundExceptionsがトリガーされることが何度かありますが、jarを戻すと問題は解決します。

1
Christine

同じ問題がありました。結局、問題はレイアウトxmlの表が欠落しているだけでした。

前:

    <org.osmdroid.views.MapView
    Android:id="@+id/mapview"
    Android:layout_width="fill_parent" 
    Android:layout_height="0dip"
    tilesource="MapquestOSM" 
    Android:layout_weight="1"
    />

次に、インデントを使用してclassNotFoundExceptionが再び表示されることはなく、マップは適切に表示されました。

    <org.osmdroid.views.MapView
        Android:id="@+id/mapview"
        Android:layout_width="fill_parent" 
        Android:layout_height="0dip"
        tilesource="MapquestOSM" 
        Android:layout_weight="1"
    />
1
roky

これはEclipseの新しいバージョンによるものです... buildpathからすべての外部依存関係を削除し、project-> properties-> builspath-> librariesタブを使用して再度追加します。ここで、すべての依存ライブラリを追加し直し、project-> properties-> builspath-の順序およびプロジェクトタブでクリックしてすべてのコンポーネントを選択します。これはうまくいきます!

0
rana