2

Mapsforge を使用してアプリケーションにマップ ビューを追加しようとしています。私は次のことをしました:

  • jarファイルをダウンロードしてlibs/フォルダ に配置
    • mapsforge-core-0.4.0.jar
    • mapsforge-map-0.4.0.jar
    • mapsforge-map-android-0.4.0.jar
    • mapsforge-map-reader-0.4.0.jar
  • ファイルを右クリックし、Build Path > Add to Build Path を選択します。
  • Project Propertiesで、 4つの jar をエクスポート済みとしてマークします。

ただし、アプリを実行すると、ライブラリからのクラスへの最初の呼び出しでクラッシュします。

E/AndroidRuntime(21265): java.lang.NoClassDefFoundError: org.mapsforge.map.android.graphics.AndroidGraphicFactory

Android SDK ツールはすべてバージョン 17 以上です。Maven は関係ありません。

私は答えを探していましたが、役に立ちませんでした。私は jar ファイルをリストの上位に移動して、プロジェクトをクリーンアップしようとしました。これと、私が既に行ったことは、ネット上で提案されているものの本質です。何も助けませんでした。

bin/dexedLibs の内容を調べると、mapsforge の jar が作成されているが、マニフェスト ファイルと (maps jar の場合) osmarender リソースを除いて、実質的に空であることがわかります。特に、classes.dex ファイルがありません。そのフォルダー内の Android サポート ライブラリには、classes.dex ファイルが含まれています。

手がかりはありますか?

編集:元の jar ファイルを調べました。.class ファイルを見ると、それぞれが で始まることに気付きましたCA FE BA BE 00 00 00 33。つまり、Java 7 形式です。

ネットで見つけた情報によると、Java 7 は Android SDK でサポートされていません。今でもそうですか?これにより、何も機能しない理由が説明されますが、Mapsforge の開発者が Java 7 を使用して、Android で使用される jar をコンパイルする理由がわかりません...

4

2 に答える 2

2

NoClassDefFound は、解決するのが本当に難しい例外です。回避策を試すことができます。

回避策: Java ビルド パス -> Oeder とエクスポート -> yourPath/src の上に sur 3rd.jar を作成します。

Android が java7 をサポートしていることは知っていますが、19 以上のバージョンを使用している場合のみです。

于 2014-05-11T04:16:43.157 に答える
1

@Ninjaは正しい方向を示してくれましたが、詳細な手順をここに投稿します.

簡単な回答: バージョン 19 以降の Android ツールチェーンが必要です。そのバージョンでは、ビルド済みの Mapsforge 0.4.0 ライブラリに対してビルドするために必要な Java 7 サポートが導入されているためです。

更新方法:

  • ADT を開始します。インストールされているすべてのパッケージを更新し、さらに19 以降のバージョンのAndroid SDK Build-toolsを少なくとも 1 つ選択します。(複数のバージョンの Android SDK ビルドツールを一緒にインストールできます。)
  • Eclipse を開き、メニューから [ヘルプ] > [アップデートの確認] を選択します。
    • 利用可能なソフトウェア ソースがないというエラー メッセージが表示された場合は、[ヘルプ] > [新しいソフトウェアのインストール]に移動します。ダイアログで [追加] をクリックし、 ADT Pluginという名前の新しいリポジトリ(URL https://dl-ssl.google.com/android/eclipse/ ) を追加します。その後、再試行してください。
  • プロンプトが表示されたら、Eclipse を再起動します。
  • 私の場合、コンパイラ準拠レベルを設定する必要はありませんでした (1.6 のままにしました)。

これらの手順で、私の Mapsforge プロジェクトNoClassDefFoundErrorは機能します。

于 2014-05-11T13:53:10.107 に答える