Android.mk共通マクロ定義
6858 ワード
共通変数定義
モジュールのコンパイルを容易にするために、Buildシステムには多くのコンパイル環境が設定されています.モジュールを個別にコンパイルする場合は、変数を構成してからコンパイルを実行する必要があります.
変数#ヘンスウ#
さぎょう
LOCAL_SRC_FILES
現在のモジュールに含まれるすべてのソースファイル
LOCAL_MODULE
現在のモジュールの名前.この名前は一意であるべきで、モジュール間の依存関係はこの名前で参照されます.
LOCAL_C_INCLUDES
CまたはC++言語に必要なヘッダファイルのパス
LOCAL_STATIC_LIBRARIES
現在のモジュールの静的リンクに必要なライブラリの名前
LOCAL_SHARED_LIBRARIES
現在のモジュールが実行時に依存するダイナミックライブラリの名前
LOCAL_CFLAGS
C/C++コンパイラへの追加コンパイルパラメータ
LOCAL_JAVA_LIBRARIES
現在のモジュール依存Java共有ライブラリ
LOCAL_STATIC_JAVA_LIBRARIES
現在のモジュール依存Java静的ライブラリ
LOCAL_PACKAGE_NAME
現在のAPKアプリケーションの名前
LOCAL_CERTIFICATE
現在適用されている証明書名に署名
LOCAL_MODULE_PATH
出力パスの指定
LOCAL_PRIVILEGED_MODULE
生成されたapkがsystem/priv-app/の下にあるかどうかを指定します.
LOCAL_MODULE_TAGS
user/debug/eng/optionalモジュールがどのバージョンでコンパイルされるかを指定すると、すべてのバージョンがコンパイルされることを示します.
Android Buildシステムでは、Javaライブラリ、C/C++ライブラリ、APKアプリケーション、実行可能ファイルなど、多くのコンパイルタイプが宣言されています.JavaまたはC/C++ライブラリは静的または動的に分けることができます.ライブラリまたは実行可能ファイルは、デバイス向けでもホスト向けでもシミュレータ向けでも、モジュールによってコンパイル宣言や方法が異なります.config.mkでは、次のようにモジュールタイプが宣言されています.
TAG
Action
BUILD_HOST_STATIC_LIBRARY
静的ライブラリのコンパイル(ホストに適用)
BUILD_HOST_SHARED_LIBRARY
ダイナミックライブラリのコンパイル(ホストに適用)
BUILD_HOST_EXECUTABLE
実行可能プログラムのコンパイル(ホストに適用)
BUILD_HOST_PREBUILT
プリコンパイル(ホストに適用)
BUILD_HOST_JAVA_LIBRARY
Javaパッケージのコンパイル(ホストに適用)
BUILD_JAVA_LIBRARY
Javaパッケージのコンパイル
BUILD_STATIC_JAVA_LIBRARY
Java静的パッケージのコンパイル
BUILD_STATIC_LIBRARY
静的ライブラリのコンパイル
BUILD_SHARED_LIBRARY
ダイナミックライブラリのコンパイル
BUILD_EXECUTABLE
実行可能プログラムのコンパイル
BUILD_PACKAGE
コンパイルapk
BUILD_PREBUILT
プリコンパイル(単一のプリコンパイルファイル用)
BUILD_MULTI_PREBUILT
プリコンパイル(複数のプリコンパイルファイル用)
Androidソースでは、Buildシステムにモジュールを追加するには、各モジュールに専用のAndroidを作成する必要があります.mkファイル、Buildシステムはすべてのディレクトリの下のAndroidを検索します.mk、Androidによるとmkファイルは指定したターゲットファイルをコンパイルします.
マクロ定義関数
マクロ関数定義ファイル:
Android mkファイル構成署名
build/target/product/securityディレクトリには、Android.mkはAPKをコンパイルする際に使用します.
依存ライブラリの導入
一.リファレンスシステムaarライブラリ
二.サードパーティjarパッケージのインポート
三.soライブラリのインポート
四.サードパーティaarパッケージのインポート LOCAL_LDLIBS
リンクされたライブラリは依存関係を生じません.一般的には、再コンパイルを必要としないライブラリで使用されます.ライブラリが存在しない場合、エラーが表示されます.システムディレクトリの下に存在するこのモジュールに接続するライブラリのみをリンクできるようです.ライブラリにダイナミックライブラリと静的ライブラリがある場合は、デフォルトでは静的ライブラリではなくリンクされたダイナミックライブラリです.
もしあなたのAndroidがmkファイルにこの1行しかない場合は、ダイナミックリンクが使用されます. LOCAL_SHARED_LIBRARIES
依存関係が生成され、ライブラリが存在しない場合にこのライブラリがコンパイルされます. LOCAL_LDFLAGS
このコンパイル変数は、リンクに追加のパラメータを渡します.たとえば、外のライブラリとライブラリパスをldに渡したい場合、またはld linkerに渡したいリンクパラメータ、-on,-EL{B}(サイズエンドバイト順)では、次のように追加します.
LOCAL_LDFLAGS += -L$(LOCAL_PATH)/lib/-lHWrecog –EB{EL} –O{n} …
または、絶対パスライブラリのフルネームを直接追加します.
LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libHWrecog.a –EB{EL} –O{n}
注:非システムのサードパーティライブラリの場合はLOCALしか使えないようですLDFLAGS方式、LOCAL_LDLIBS方式はダメです.
モジュールのコンパイルを容易にするために、Buildシステムには多くのコンパイル環境が設定されています.モジュールを個別にコンパイルする場合は、変数を構成してからコンパイルを実行する必要があります.
変数#ヘンスウ#
さぎょう
LOCAL_SRC_FILES
現在のモジュールに含まれるすべてのソースファイル
LOCAL_MODULE
現在のモジュールの名前.この名前は一意であるべきで、モジュール間の依存関係はこの名前で参照されます.
LOCAL_C_INCLUDES
CまたはC++言語に必要なヘッダファイルのパス
LOCAL_STATIC_LIBRARIES
現在のモジュールの静的リンクに必要なライブラリの名前
LOCAL_SHARED_LIBRARIES
現在のモジュールが実行時に依存するダイナミックライブラリの名前
LOCAL_CFLAGS
C/C++コンパイラへの追加コンパイルパラメータ
LOCAL_JAVA_LIBRARIES
現在のモジュール依存Java共有ライブラリ
LOCAL_STATIC_JAVA_LIBRARIES
現在のモジュール依存Java静的ライブラリ
LOCAL_PACKAGE_NAME
現在のAPKアプリケーションの名前
LOCAL_CERTIFICATE
現在適用されている証明書名に署名
LOCAL_MODULE_PATH
出力パスの指定
LOCAL_PRIVILEGED_MODULE
生成されたapkがsystem/priv-app/の下にあるかどうかを指定します.
LOCAL_MODULE_PATH:= $(TARGET_OUT)/system/priv-app
の設定と同じです.LOCAL_MODULE_TAGS
user/debug/eng/optionalモジュールがどのバージョンでコンパイルされるかを指定すると、すべてのバージョンがコンパイルされることを示します.
Android Buildシステムでは、Javaライブラリ、C/C++ライブラリ、APKアプリケーション、実行可能ファイルなど、多くのコンパイルタイプが宣言されています.JavaまたはC/C++ライブラリは静的または動的に分けることができます.ライブラリまたは実行可能ファイルは、デバイス向けでもホスト向けでもシミュレータ向けでも、モジュールによってコンパイル宣言や方法が異なります.config.mkでは、次のようにモジュールタイプが宣言されています.
TAG
Action
BUILD_HOST_STATIC_LIBRARY
静的ライブラリのコンパイル(ホストに適用)
BUILD_HOST_SHARED_LIBRARY
ダイナミックライブラリのコンパイル(ホストに適用)
BUILD_HOST_EXECUTABLE
実行可能プログラムのコンパイル(ホストに適用)
BUILD_HOST_PREBUILT
プリコンパイル(ホストに適用)
BUILD_HOST_JAVA_LIBRARY
Javaパッケージのコンパイル(ホストに適用)
BUILD_JAVA_LIBRARY
Javaパッケージのコンパイル
BUILD_STATIC_JAVA_LIBRARY
Java静的パッケージのコンパイル
BUILD_STATIC_LIBRARY
静的ライブラリのコンパイル
BUILD_SHARED_LIBRARY
ダイナミックライブラリのコンパイル
BUILD_EXECUTABLE
実行可能プログラムのコンパイル
BUILD_PACKAGE
コンパイルapk
BUILD_PREBUILT
プリコンパイル(単一のプリコンパイルファイル用)
BUILD_MULTI_PREBUILT
プリコンパイル(複数のプリコンパイルファイル用)
Androidソースでは、Buildシステムにモジュールを追加するには、各モジュールに専用のAndroidを作成する必要があります.mkファイル、Buildシステムはすべてのディレクトリの下のAndroidを検索します.mk、Androidによるとmkファイルは指定したターゲットファイルをコンパイルします.
マクロ定義関数
マクロ関数定義ファイル:
build/core/definitions.mk
#LOCAL_SRC_FILES
LOCAL_SRC_FILES := $(call all-java-files-under, java) \ #java java
$(call all-Iaidl-files-under, aidl) \ #aidl I*.aidl`
$(call all-c-files-under, jni) \ #jni c
$(call all-cpp-files-under, cpp) \ #cpp cpp
# src *.ext ,
(call all-named-files-under,*.ext,src)
Android mkファイル構成署名
build/target/product/securityディレクトリには、Android.mkはAPKをコンパイルする際に使用します.
1、testkey: APK, 。
2、platform: APK 。 ,
APK UID system。
3、shared: APK home/contacts 。
4、media: APK media/download 。
。
android.uid.system UID APK,
manifest android:sharedUserId="android.uid.system",
Android.mk LOCAL_CERTIFICATE := platform。 Settings
android.uid.shared UID APK,
manifest android:sharedUserId="android.uid.shared",
Android.mk LOCAL_CERTIFICATE := shared。 Launcher
android.media UID APK,
manifest android:sharedUserId="android.media",
Android.mk LOCAL_CERTIFICATE := media。 Gallery 。
依存ライブラリの導入
一.リファレンスシステムaarライブラリ
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat \
android-support-v13 \
android-support-design
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
frameworks/support/v7/appcompat/res \
frameworks/support/design/res
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages android.support.design \
--extra-packages android.support.v7.appcompat
二.サードパーティjarパッケージのインポート
LOCAL_PATH := $(call my-dir)
#
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libOkhttp:/libs/Okhttp.jar \
libGlide:/libs/Glide.jar
include $(BUILD_MULTI_PREBUILT)
#
include $(CLEAR_VARS)
.....
LOCAL_STATIC_JAVA_LIBRARIES := libOkhttp \
libGlide
include $(BUILD_PACKAGE)
三.soライブラリのインポート
#====================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libaaa
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_arm :=libs/armeabi-v7a/libaaa.so
LOCAL_SRC_FILES_arm64 :=libs/arm64-v8a/libaaa.so
LOCAL_MODULE_TARGET_ARCHS:= arm arm64
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)
#====================================================
#====================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libbbb
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_SRC_FILES_arm :=libs/armeabi-v7a/libbbb.so
LOCAL_SRC_FILES_arm64 :=libs/arm64-v8a/libbbb.so
LOCAL_MODULE_TARGET_ARCHS:= arm arm64
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)
#
include $(CLEAR_VARS)
----
#
....
LOCAL_REQUIRED_MODULES := libaaa \
libbbb \
LOCAL_JNI_SHARED_LIBRARIES := libaaa\
libbbb\
include $(BUILD_PACKAGE)
四.サードパーティaarパッケージのインポート
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += aaa:libs/sampe1.aar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += bbb:libs/sample2.aar
include $(BUILD_MULTI_PREBUILT)
#
LOCAL_STATIC_JAVA_AAR_LIBRARIES += aaa \
bbb
# aar
LOCAL_AAPT_FLAGS += \
--auto-add-overlay \
--extra-packages com.xxx.sample1 \ # sample1
--extra-packages com.xxx.sample2 \ # sample2
LOCAL_SHARED_LIBRARIES
とLOCAL_LDLIBS
LOCAL_LDFLAGS
の違いリンクされたライブラリは依存関係を生じません.一般的には、再コンパイルを必要としないライブラリで使用されます.ライブラリが存在しない場合、エラーが表示されます.システムディレクトリの下に存在するこのモジュールに接続するライブラリのみをリンクできるようです.ライブラリにダイナミックライブラリと静的ライブラリがある場合は、デフォルトでは静的ライブラリではなくリンクされたダイナミックライブラリです.
LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …
もしあなたのAndroidがmkファイルにこの1行しかない場合は、ダイナミックリンクが使用されます.
依存関係が生成され、ライブラリが存在しない場合にこのライブラリがコンパイルされます.
このコンパイル変数は、リンクに追加のパラメータを渡します.たとえば、外のライブラリとライブラリパスをldに渡したい場合、またはld linkerに渡したいリンクパラメータ、-on,-EL{B}(サイズエンドバイト順)では、次のように追加します.
LOCAL_LDFLAGS += -L$(LOCAL_PATH)/lib/-lHWrecog –EB{EL} –O{n} …
または、絶対パスライブラリのフルネームを直接追加します.
LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libHWrecog.a –EB{EL} –O{n}
注:非システムのサードパーティライブラリの場合はLOCALしか使えないようですLDFLAGS方式、LOCAL_LDLIBS方式はダメです.