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_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_LIBRARIESLOCAL_LDLIBSLOCAL_LDFLAGSの違い
  • LOCAL_LDLIBS

  • リンクされたライブラリは依存関係を生じません.一般的には、再コンパイルを必要としないライブラリで使用されます.ライブラリが存在しない場合、エラーが表示されます.システムディレクトリの下に存在するこのモジュールに接続するライブラリのみをリンクできるようです.ライブラリにダイナミックライブラリと静的ライブラリがある場合は、デフォルトでは静的ライブラリではなくリンクされたダイナミックライブラリです.
    LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …
    

    もしあなたの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方式はダメです.