0

MIPSデバイス用に構築する必要のある独自のJNIアプリケーションを入手しました。「ビルド環境の初期化」、NDKドキュメントの一部、いくつかのGoogleグループのスレッド、多数のStackOverflowの質問を読みましたが、まだ答えがありません。

これまでのところ、Googleのリポジトリスクリプトを使用してAndroidソースをチェックアウトし、の下に置いてい~/AndroidSourceます。また、SDK~/AndroidSDKとNDKを別々にダウンロードしました~/AndroidNDK。私が構築しようとしているコードは別の場所にあります。SDKとNDKのバイナリが私のパスにあります。ビルドには、2つの異なるバージョンのNDKとAndroidソースツリーの下のバージョンを使用しようとしましたが、さまざまな問題が発生しました。私の現在のセットアップでは、Androidソースから個別にダウンロードされたNDKr8bを使用しています。

アプリケーションにはとがAndroid.mkありjni/Android.mkます。ただし、後者のいくつかのディレクティブは、次のようなパスを指します。

frameworks/base/include
system/core/include

プレフィックスなし。これらはAndroidソース内のそれぞれのディレクトリを指すことを意図していると思ったので、現在のディレクトリにシンボリックリンクしました。シンボリックリンクとmakefileおよびソースのハッキングをさらに行った後、アプリケーションをコンパイルしましたが、現在、欠落しているメソッド本体への参照が多く、リンクフェーズでスタックしています。その間ずっと、私は自分が何か間違ったことをしていることを知っていました。

懸念がある場合は、Linuxx86_64ホストを使用しています。

だから私の質問は:

JNIアプリケーションのビルド環境をセットアップするための適切な方法は何ですか?どのような環境変数、シンボリックリンク、パス拡張を設定する必要がありますか?スクリプトを1回呼び出す必要がありますか、それとも各ndk-build呼び出しの前に呼び出す必要がありますか?

また、私が間違っている概念や用語について訂正していただければ幸いです。

4

2 に答える 2

1

システムヘッダーのAOSPツリーをシンボリックリンクするアプローチは正しいです。今必要なのは、MIPS用にコンパイルされたシステムライブラリです。それらを取得する最も簡単な方法はadb pull、ターゲットデバイス(またはエミュレーターイメージ)からそれらを取得することです。ただし、AOSPビルドの一部として、これらのライブラリを自分でビルドすることもできます(ダウンロードしたソースツリーのビルド手順を参照してください)。

それでも問題が解決しない場合は、ndk-buildwithパラメーターを実行V=1し、linkコマンドとその結果を公開します。

于 2012-11-17T15:58:18.763 に答える
1

ビルド(YMMV)では次のものを使用します。

  • arm-linux-androideabi-gccコンパイラまたはリンカとして明示的に呼び出します(PATHにある必要があります)。
  • NDK_PLATFORM = / path / to / android-ndk-r * / platform / android-14
  • -I"$(NDK_PLATFORM)/arch-arm/usr/include"コンパイラに 渡す
  • -nostdlib -L"$(NDK_PLATFORM)/arch-arm/usr/lib/" -lgcc -lc -lmリンカーに渡す
于 2012-11-17T14:43:32.807 に答える