Androidソース分析(一)---Androidコンパイルファイルをすばやく把握する方法
6442 ワード
一:Android.mkファイルの概要
主にコンパイルシステムに対応するコンパイルルールを指定します.1回または複数回解析されます.したがって、これらの変数は、後の解析に影響を及ぼすために複数回定義される可能性があるため、ソースコードで宣言される変数をできるだけ減らす.このファイルの構文は、ソースコードをモジュールにまとめ、各モジュールは次のいずれかのタイプに属します.
二:システム変数
三:mkファイルテンプレート C/C++アプリケーションをコンパイルするテンプレート:
BUILD_EXECECUTABLEは、実行可能プログラムとしてコンパイルされることを示す.補足説明:静的ライブラリをコンパイルするテンプレート:
一般的に上と似ていますが、BUILD_STATIC_LIBRARYは静的ライブラリをコンパイルすることを表す.aファイル.静的ライブラリは、APKパッケージにコピーされませんが、共有ライブラリのコンパイルに使用できます.ダイナミックライブラリをコンパイルするテンプレート:
一般的に上と似ていますが、BUILD_SHARED_LIBRARYは、ダイナミックライブラリをコンパイルすることを示します.以上の3つの生成結果は、genericが特定のtargetに従って変化する:out/target/product/generic/obj/EXECUTTABLE out/target/product/generic/obj/STATIC_LIBRARY out/target/product/generic/obj/SHARED_LIBRARY
各モジュールのターゲットフォルダは、実行可能プログラム:XXX_intermediatesスタティックライブラリ:XXX_static_Intermediatesダイナミックライブラリ:XXX_shared_intermediates
また、Android.mkファイルでは、最後のターゲットインストールパスをLOCAL_で指定することもできます.MODULE_PATHとLOCAL_UNSTRIPPED_PATHで指定します.異なるファイルシステムパスは、次のマクロで選択します.
四:常用関数
五:SettingsモジュールAndroid.mkファイル解析
転載先:https://www.cnblogs.com/ljx646566715/p/10893807.html
主にコンパイルシステムに対応するコンパイルルールを指定します.1回または複数回解析されます.したがって、これらの変数は、後の解析に影響を及ぼすために複数回定義される可能性があるため、ソースコードで宣言される変数をできるだけ減らす.このファイルの構文は、ソースコードをモジュールにまとめ、各モジュールは次のいずれかのタイプに属します.
- APK : Android , apk 。
- JAVA :java , jar 。
- C\C++ : C/C++ 。
- C\C++ : C/C++ , .a 。
- C\C++ : , .so , / APK 。
二:システム変数
- LOCAL_PATH: , Android.mk , LOCAL_PATH := $(call my-dir), $(CLEAR_VARS) , Android.mk ( )。
- LOCAL_SRC_FILES: 。
- LOCAL_MODULE: , , 。 。
- LOCAL_MODULE_CLASS: 。ETC /system/etc. ,APPS /system/app ,SHARED_LIBRARIES /system/lib 。 , , out product obj 。
- LOCAL_SRC_FILES: 。 , 。 LOCAL_PATH , 。
- LOCAL_JAVA_LIBRARIES: Java , Java 。 framework.jar 。
- LOCAL_STATIC_JAVA_LIBRARIES: Java , Android , jar Java 。
- LOCAL_STATIC_LIBRARIES: 。
- LOCAL_SHARED_LIBRARIES: 。
- LOCAL_C_INCLUDES:c c++ 。
- LOCAL_CFLAGS: C/C++ 。
- LOCAL_PACKAGE_NAME: APK 。
- LOCAL_CERTIFICATE: 。
- LOCAL_MODULE_TAGS: , 。 eng、user、debug、development、optional。 ,optional 。
- LOCAL_DEX_PREOPT:apk odex , false。
三:mkファイルテンプレート
#Test Exe
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
BUILD_EXECECUTABLEは、実行可能プログラムとしてコンパイルされることを示す.補足説明:
include $(BUILD_PACKAGE)
はapkをコンパイルし、include $(BUILD_STATIC_JAVA_LIBRARY)
はjarパッケージをコンパイルします. `#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
一般的に上と似ていますが、BUILD_STATIC_LIBRARYは静的ライブラリをコンパイルすることを表す.aファイル.静的ライブラリは、APKパッケージにコピーされませんが、共有ライブラリのコンパイルに使用できます.
#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
一般的に上と似ていますが、BUILD_SHARED_LIBRARYは、ダイナミックライブラリをコンパイルすることを示します.以上の3つの生成結果は、genericが特定のtargetに従って変化する:out/target/product/generic/obj/EXECUTTABLE out/target/product/generic/obj/STATIC_LIBRARY out/target/product/generic/obj/SHARED_LIBRARY
各モジュールのターゲットフォルダは、実行可能プログラム:XXX_intermediatesスタティックライブラリ:XXX_static_Intermediatesダイナミックライブラリ:XXX_shared_intermediates
また、Android.mkファイルでは、最後のターゲットインストールパスをLOCAL_で指定することもできます.MODULE_PATHとLOCAL_UNSTRIPPED_PATHで指定します.異なるファイルシステムパスは、次のマクロで選択します.
- TARGET_ROOT_OUT: out/target/product/xxxxx/root。
- TARGET_OUT: system out/target/product/xxxx/system。
- TARGET_OUT_DATA: data out/target/product/xxxx/data。
- TARGET_OUT_SHARED_LIBRARIES: out/target/product/xxxx/system/lib
- TARGET_OUT_APPS: out/target/product/xxxx/system/app
- ANDROID_PRODUCT_OUT:out/target/product/xxxx/
- TARGET_OUT_JAVA_LIBRARIES:out/target/product/xxxx/system/framework
四:常用関数
- $(call my-dir): 。
- $(call all-java-files-under, ): java 。
- $(call all-c-files-under, ): c 。
- $(call all-Iaidl-files-under, ): AIDL 。
- $(call all-makefiles-under, ): Make 。
- $(call intermediates-dir-for, , , , ): Build 。
五:SettingsモジュールAndroid.mkファイル解析
#
LOCAL_PATH:= $(call my-dir)
#
include $(CLEAR_VARS)
#
LOCAL_SRC_FILES := \
$(call all-logtags-files-under, src)
# --
LOCAL_MODULE := settings-logtags
# java
include $(BUILD_STATIC_JAVA_LIBRARY)
# Build the Settings APK
include $(CLEAR_VARS)
# java
LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common
# jar , ( libs )jar
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-v4 \
android-support-v13 \
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
android-support-v14-preference \
jsr305 \
settings-logtags
#user: user
#eng: eng
#tests: tests
#optional:
LOCAL_MODULE_TAGS := optional
#
LOCAL_SRC_FILES := \
$(call all-java-files-under, src)
#
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
frameworks/support/v7/preference/res \
frameworks/support/v14/preference/res \
frameworks/support/v7/appcompat/res \
frameworks/support/v7/recyclerview/res
# apk --
LOCAL_PACKAGE_NAME := Settings
# KEY
LOCAL_CERTIFICATE := platform
# ROM
#true, system/priv-app
#false, system/app
LOCAL_PRIVILEGED_MODULE := true
#
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_AAPT_FLAGS := --auto-add-overlay \
--extra-packages android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview
ifneq ($(INCREMENTAL_BUILDS),)
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_JACK_ENABLED := incremental
LOCAL_DX_FLAGS := --multi-dex
LOCAL_JACK_FLAGS := --multi-dex native
endif
# mk
include frameworks/opt/setupwizard/library/common-full-support.mk
include frameworks/base/packages/SettingsLib/common.mk
# apk
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
ifeq (,$(ONE_SHOT_MAKEFILE))
# Make
include $(call all-makefiles-under,$(LOCAL_PATH))
endif
転載先:https://www.cnblogs.com/ljx646566715/p/10893807.html