数か月間ゲームに取り組んでいましたが、突然問題が発生しました。
昨日から、NoClassDefFound
エラーが発生しています。コードの変更はまったくありません。夜は働いていて、朝は働いていませんでした。まったく変化なし。正確なスタックトレースは次のとおりです。
06-23 23:12:19.746: E/ACRA(29146): Blue Boy fatal error : com.appaholics.blueboy.BlueBoy
06-23 23:12:19.746: E/ACRA(29146): java.lang.NoClassDefFoundError: com.appaholics.blueboy.BlueBoy
06-23 23:12:19.746: E/ACRA(29146): at com.appaholics.blueboy.LoadingScreen.loadTextures(LoadingScreen.java:125)
06-23 23:12:19.746: E/ACRA(29146): at com.appaholics.blueboy.LoadingScreen.load(LoadingScreen.java:85)
06-23 23:12:19.746: E/ACRA(29146): at com.appaholics.blueboy.LoadingScreen.onCreate(LoadingScreen.java:40)
06-23 23:12:19.746: E/ACRA(29146): at android.app.Activity.performCreate(Activity.java:4465)
06-23 23:12:19.746: E/ACRA(29146): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-23 23:12:19.746: E/ACRA(29146): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-23 23:12:19.746: E/ACRA(29146): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-23 23:12:19.746: E/ACRA(29146): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-23 23:12:19.746: E/ACRA(29146): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-23 23:12:19.746: E/ACRA(29146): at android.os.Handler.dispatchMessage(Handler.java:99)
06-23 23:12:19.746: E/ACRA(29146): at android.os.Looper.loop(Looper.java:137)
06-23 23:12:19.746: E/ACRA(29146): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-23 23:12:19.746: E/ACRA(29146): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 23:12:19.746: E/ACRA(29146): at java.lang.reflect.Method.invoke(Method.java:511)
06-23 23:12:19.746: E/ACRA(29146): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-23 23:12:19.746: E/ACRA(29146): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-23 23:12:19.746: E/ACRA(29146): at dalvik.system.NativeStart.main(Native Method)
例外が発生するメソッド:
private void loadTextures() {
BlueBoy.sTextures = new HashMap<String,TextureRegion>();
BlueBoy.sTiledTextures = new HashMap<String,TiledTextureRegion>();
BlueBoy.sTextureHolders = new ArrayList<Texture>();
BlueBoy.sHitVoiceSounds = new Sound[4];
BlueBoy.sHitSounds = new Sound[4];
BlueBoy.sWinSounds = new Sound[8];
BlueBoy.sLoseSounds = new Sound[4];
Texture texture;
TextureRegionFactory.setAssetBasePath("gfx/");
BufferObjectManager.setActiveInstance(new BufferObjectManager());
}
ただし、クラス BlueBoy は確実に存在します。確実に確認するために、私は自分のアプリを逆コンパイルしましたclasses.dex
。.apk の作成中に生成されたものと .apk 自体の両方を逆コンパイルしました。クラスは両方に存在します。にも存在し/bin/classes/com/appaholics/blueboy/
ます。逆コンパイルすると、当然のことながら、クラスの完全なソースが表示されます。
私はそれを修正するために考えてネット上で見つけることができるすべてを試しました。私は持っている:
- その上でクリーンビルドを行いました
- Eclipse でソースから新しいプロジェクトを作成しました
- 新しいプロジェクトを作成し、手動ですべてをそれにシフトしました
- クラスの名前を変更しようとしました
- パッケージの名前を変更しようとしました
- コマンドラインからコンパイルしてみました
- コマンドラインからクリーニングしようとしました
ワークスペース内の他のすべてのプロジェクトは正常に動作します。
BlueBoy が正常に動作する前に起動される、スプラッシュ画面や読み込み画面などの他のクラス。Android はそれらを見つけることができます。
なぜこれが起こるのか、誰にも分かりますか?クラスは私が存在するのと同じくらい確実に存在しますが、Android は同意しません。
編集: duffymo の提案に従って、スプラッシュ スクリーンに以下を追加して、このクラスの存在についてクラス パスを確認します。
try {
Class.forName("com.appaholics.blueboy.BlueBoy", false, null);
} catch (ClassNotFoundException e1) {
Log.d("ClassCheck", "Not found.");
e1.printStackTrace();
}
Not Found
LogCat でメッセージを取得します。クラスがクラスパスにないことがわかったので、どうすれば修正できますか? このクラスは、スプラッシュ スクリーンと読み込みクラスと同じパッケージにあり、それらの両方が存在します。この 1 つのクラスが存在しない原因は何ですか?どうすれば修正できますか?
EDIT2: FWIW、System.getProperties("java.class.path");
" " を返します.
。