34

アプリの 1 つに問題があり、その原因について何か洞察を得ることができるかどうか疑問に思っていました。

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

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

現在、このアプリは 1 年以上前から公開されており、2 日前に 2 人の別々のユーザーからこの問題について連絡がありました。現在、デバイス (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

編集

ユーザーがこの質問への返信でコメントしたリンクのいくつかを調査すると、アクティビティをロードするために間違ったコンテキストを使用すると、この問題が発生する可能性があるようです。私が送信した2 つのログ レポートの1 つに、この例外の前に

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 で明らかに問題が発生する可能性があります。これがユーザーの電話で発生した場合、なぜこれを再現できないのかわかりません (他のほとんどのユーザーも再現できません)。

リンクから見つけた興味深いもう1つのことは、「apkのインストールが正しくない」ために問題が発生した人がいるということです。これは、再インストールすることで解決できます。問題が発生したユーザーに試してもらいました(違いはありません。また、問題が発生すると(最初の使用時)、それは持続するようです。

4

9 に答える 9

34

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

ひょっとして、ライブラリ プロジェクトで巧妙なことをしていませんか? コード内およびレイアウト xml 内の完全修飾クラス名には十分に注意する必要があります...

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

于 2011-02-15T20:36:28.043 に答える
7

私はすでにこの問題についてここで議論していまし.

このスレッドで問題を解決し、いくつかのアイデアを提供する人もいます。

お役に立てれば...

(ちなみに、私は別の囲碁プログラマーに会えてうれしく思います!)

于 2011-02-02T22:28:42.110 に答える
3

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

于 2011-06-08T16:52:18.517 に答える
3

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

于 2012-02-09T18:47:50.550 に答える
1

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

于 2012-10-24T13:25:07.960 に答える
1

同じ問題がありました。最終的に問題は、レイアウト 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"
    />
于 2012-11-23T20:36:54.637 に答える
1

私の経験では、Android SDK が更新され、サポート ライブラリへのリンクを更新する必要があった可能性があります。プロジェクト設定 > android に移動し、サポート ライブラリを再度ポイントします。

于 2013-06-20T06:22:34.747 に答える
0

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

于 2012-04-04T05:14:51.450 に答える