0

私はJavaとAndroidの開発にまったく慣れていませんが、テストを行うためだけにC/C++プロジェクトをAndroid携帯に移植しようとしています。ここにいくつかの詳細があります。このプロジェクトは、Openssl、GMP、および NTL ライブラリに依存しています。コピーをダウンロードして、すべてをjni/フォルダー内に入れました。したがって、フォルダー構造は次のようになります。

    jni/
       Android.mk
       gmp/
           Android.mk
           ...
       ntl/
           Android.mk
           ...
       openssl/
           Android.mk
           ...
       myproject/
           Android.mk
           ...

ファイルを含むすべてのサブフォルダーに.cpp, c.は、Android.mk ファイルがあります。さて、私の質問は次のとおりです。大まかに言うと、Android.mk ファイルの内容を構造化するにはどうすればよいですか? 私はオンラインの指示に従い、Openssl をコンパイルすることができました (その中にすべての .so ファイルを作成しました)。トップレベルの Android.mk はこれらをどのように使用しますか? それとも今ですか?

4

1 に答える 1

0

ndk-buildプロジェクトの最上位ディレクトリ (写真の jni ディレクトリの親) で実行すると、基本的にgnu makeinclude jni/Android.mkが実行されます。

あなたの場合、このトップjni/Android.mkにはすべての子 .mk ファイルのみを含める必要があります。

include $(call all-subdir-makefiles)

メインファイルはjni/myproject/Android.mkで、他の人が作成したバイナリを参照します。

LOCAL_SHARED_LIBRARIES += openssl

等々。名前はライブラリ ファイルの名前ではなく、LOCAL_MODULEそれらをビルドする の名前であることに注意してください。

多くの場合、静的ライブラリを使用する方が簡単です。たとえば、正しい依存関係の順序で、Java からすべての共有ライブラリを自分でロードする必要があります。


mainはここではくだけた言葉です。私が言いたいのは、これがその兄弟に仕事をさせるmakeファイルであり、期待される順序でそれをするということです。これは、 および を指定して、他のメイク ファイルによって生成されたバイナリを参照するためLOCAL_SHARD_LIBRARIESですLOCAL_STATIC_LIBRARIES

jni/Android.mkすべての make ファイルをインクルードしてすべての作業を実行させ、期待どおりの順序で実行させるだけでは不十分であることを理解することが重要です。jni/Android.mkこのファイルは、ディレクトリ階層の最上位にあるにもかかわらず、mainではなくサービスファイルであることを強調したいと思います。

于 2013-06-05T21:45:33.620 に答える