Androidソース分析(一)---Androidコンパイルファイルをすばやく把握する方法

6442 ワード

一:Android.mkファイルの概要
主にコンパイルシステムに対応するコンパイルルールを指定します.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ファイルテンプレート
  • C/C++アプリケーションをコンパイルするテンプレート:
  •      #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