android.mkの使用の概要(PREBUILT_SHARED_LIBRARYおよびBUILD_SHARED_LIBRARY拡張機能で説明)
Introduction Use Android
序文:
Android NDKは現在、コンパイル済みライブラリ(動的ライブラリ/静的ライブラリ)を使用してコンパイルプロセスを高速化するプリコンパイル済みライブラリをサポートしており、開発者はソースコードを提供する必要はなく、動的ライブラリの形式で提供します。
1.コンパイル済みのダイナミックライブラリモジュールを使用する
1.1プリコンパイルされたモジュールの確認
Androidコンパイルツールの場合、プリコンパイルされた各ライブラリは、独立したモジュールとして宣言する必要があります。次に例を示します。libc.soファイルはAndroid.mkと同じディレクトリにあり、ダイナミックライブラリは次のように定義できます。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libc LOCAL_SRC_FILES := libc.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libc include $(PREBUILT_SHARED_LIBRARY) Note: The LOCAL_EXPORT_C_INCLUDES definition ensures that any modules that rely on this precompiled library Will be automatically added to the include target of this pre-compiled library in its own LOCAL_C_INCLUDES variable Recorded path so that the header file can be found.
プリコンパイルされたモジュールはコンパイルする必要がないため、コンパイル時間を大幅に短縮できます。 libc.soのプリコンパイル済みモジュールは、$ PROJECT / obj / localの下にコピーされ、$ PROJECT / lib /の下にもコピーされます。
1.2プリコンパイルされたモジュールへの参照
test.cがlibc.soに依存している場合、プリコンパイルされたモジュールが最初のステップで宣言された後。つまり、LOCAL_SHARED_LIBRARIESを使用して、現在のモジュールの依存関係リストを一覧表示できます。
include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES:= test.c LOCAL_SHARED_LIBRARIES := libc include $(BUILD_EXECUTABLE)
2.ダイナミックライブラリモジュールを構築します
include $ (CLEAR_VARS) #This step is mainly to clear the variables defined at the beginning of LOCAL_XXX, which is a necessary operation LOCAL_C_INCLUDES: = $ (LOCAL_PATH) / include #Define the directory required for the header files required by the source files LOCAL_MODULE: = libhello-android #Define the name of the compiled module LOCAL_SHARED_LIBRARIES: = liblog #The dynamic library that this module needs to compile LOCAL_SRC_FILES: = src / hello-android.c #define the source files needed to compile the module include $(BUILD_SHARED_LIBRARY)
3.他のパラメータの導入
LOCAL_PATH | 各Android.mk ファイルはLOCAL_PATH 開始、使用development tree でソースファイルを検索する必要があります |
$(CLEAR_VARS)を含める |
|
LOCAL_MODULE | 各モジュールの名前は一意である必要があり、スペースを含めることはできません。システムは現在構築中です
|
LOCAL_SRC_FILES | 現在のモジュールのソースファイル(C / C ++ファイル)を指定します。これは、C ++ソースコードのデフォルト拡張子です.cpp 。 LOCAL_CPP_EXTENSION modifyによっても変更できます |
BUILD_SAHRED_LIBRARY | この変数はビルドスクリプトを指し、渡されたすべての |
BUILD_STATIC_LIBRARY | 静的ライブラリの構築に使用されます(.a) |
PREBUILT_SHARED_LIBRARY | プリコンパイルされたダイナミックライブラリを指定するために使用され、 |
PREBUILT_STATIC_LIBRARY | プリコンパイルされた静的ライブラリを指定するために使用されます |
TARGET_ARCH | ターゲットCPU アーキテクチャ、ほとんどの互換性ARM 命令の構築、通常使用arm 、対CPU アーキテクチャのバージョンは関係ありません |
TARGET_PLATFORM | ターゲットプラットフォーム たとえば、androi4.4システムの対応する値は次のとおりです。TARGET_PLATFORM:= android-19 |
TARGET_ARCH_ABI | 指定
|
TARGET_ABI | Connected Android API with ABI 2つの値、例:TARGET_ABI:= android-19-arm64-v8a |
LOCAL_MODULE_FILENAME | このオプションは、モジュールのデフォルト名を上書きできます。次に例を示します。 LOCAL_MODULE:= foo システムは最終的に |
LOCAL_SRC_FILES | モジュールを構築するソースファイルのリストが含まれています。相対パスまたは絶対パスを使用できますが、絶対パスを使用せずに相対パスを使用することをお勧めします。これにより、移植性が向上します。 |
LOCAL_CPP_EXTENSION | 指摘C++ ソースファイル拡張子 |
LOCAL_CPP_FEATURES | この変数は、現在のモジュールが何に依存しているかを示します LOCAL_CPP_FEATURES:= rtti->(実行時型情報を使用) LOCAL_CPP_FEATURES:=例外->(C ++例外を使用) |
LOCAL_C_INCLUDES | コンパイル時に指定include 相対的なパスのリストNDK ROOT 目次 |
LOCAL_CFLAGS | コンパイル中であることを示します 注:ここで最適化オプションとデバッグレベルを変更しないでください。これらのオプションは
LOCAL_CFLAGS + = -I この方法は |
LOCAL_CXXFLAGS | LOCAL_CPPFLAGS エイリアス |
LOCAL_CPPFLAGS | 指定されたコンパイルC++ コード時間flags 、これらのオプションはコンパイラのコマンドラインに続きますLOCAL_CFLAGS 背後にあります |
LOCAL_STATIC_LIBRARIES | モジュールのコンパイルに必要な静的ライブラリのリストを指定します |
LOCAL_SHARED_LIBRARIES | 現在のモジュールをruntime ダイナミックライブラリに一覧表示します |
LOCAL_WHOLE_STATIC_LIBRARIES | 静的ライブラリのフルリンク。LOCAL_STATIC_LIBRARIESとは異なり、--whole-archive の使用と同様です。 |
LOCAL_LDLIBS | この変数には、ダイナミックライブラリまたは実行可能ファイルをコンパイルする際の追加のリンクオプションのリストが含まれています。これにより、 LOCAL_LDLIBS:= -lz 上記のコードは、モジュールをコンパイルするときに接続するようにコンパイラーに指示します |
LOCAL_ALLOW_UNDEFIEND_SYMBOLS | デフォルトでは、システムは 静的ライブラリのコンパイル時にこの変数を指定すると、システムは変数を無視します |
LOCAL_ARM_MODE | デフォルトでは、システムによって生成されるバイナリファイルは LOCAL_ARM_MODE := arm 特定のソースファイルを LOCAL_SRC_FILES := foo.c bar.c.arm 注:同じ目的を達成するために |
LOCAL_ARM_NEON | この変数のみ LOCAL_SRC_FILES := foo.c.neon bar.c zoo.c.arm.neon 上記のコードは、 |
LOCAL_DISABLE_NO_EXECUTE |
|
LOCAL_DISABLE_RELRO | デフォルトでは、 これらの保護は この変数を変更します |
LOCAL_DISABLE_FORMAT_STRING_CHECKS | デフォルトでは、システムはコンパイル時に実行されますstring フォーマットチェック。このチェックはデフォルトで有効になっていますが、変更できますLOCAL_DISABLE_FORMAT_STRING_CHECKS この変数はtrue に設定されていますこのチェックをキャンセルするには |
LOCAL_EXPORT_CFLAGS | 変数 $(CLEAR_VARS)を含める $(CLEAR_VARS)を含める ここで、システムは |
LOCAL_EXPORT_CPPFLAGS | エクスポートinclude paths 、たとえば、変数はbar.c 含める必要がありますfoo モジュールヘッダーファイル |
LOCAL_EXPORT_LDFLAGS | この変数は同じ効果がありますLOCAL_EXPORT_CFLAGS 、ただlinker flags |
LOCAL_EXPORT_LDLIBS | この変数は、指定されたシステムライブラリをコンパイラに渡すようにシステムに指示します。システムはインポートされた接続属性を $(CLEAR_VARS)を含める $(CLEAR_VARS)を含める システムはコンパイルされます |
LOCAL_SHORT_COMMANDS | モジュールに多数のソースファイルまたは依存ライブラリがある場合、この変数を |
LOCAL_THIN_ARCHIVE | 静的ライブラリを構築する場合、この変数をtrue に設定できます。システムはa archive 'File'を生成します。ライブラリファイルにはオブジェクトファイルは含まれませんが、各オブジェクトに対応するパスのみが含まれます。ファイル |
my-dir | このマクロは最後のマクロを返します LOCAL_PATH:= $(my-dirを呼び出す) |
all-subdir-makefiles | 現在を返すmy-dir パスの下のすべてのサブディレクトリAndroid.mk |
this-makefile | 現在のリターンmakefile のルート |
親-makefile | リターンには現在のmakefile の父makefile のルートが含まれます |
祖父母-makefile | リターンには現在のmakefile 祖父makefile のルートが含まれます |
import-module | 特定のモジュールを含めるために使用できます $(call import-module,) |