android.mk notes

6908 ワード

Android.mk notes
  • Android.mkって何?
  • Android.mkの構文
  • コンパイルapk
  • jarパッケージのコンパイル
  • JNI
  • cdプロジェクトbinclassesjavahパッケージ名+ファイル名現在のパスでヘッダファイル
  • を生成
  • プロジェクトとディレクトリの新しいjniヘッダーファイルをjniフォルダに入れてcファイルとandroidを加える.mkファイル
  • cd jniディレクトリの下でndk-buildコンパイル生成.soファイル
  • Android.mkって何?
    Android.mkファイルは、NDK BuildシステムのSourceに関する情報を通知するために使用されます.Android.mkはGNU Makefileの一部であり、Build Systemを1回または複数回解析する.しかし、できるだけ少ないのはAndroidです.mkで変数を宣言したり、解析中に何も定義されないと仮定しないでください.Android.mkファイル構文では、Sourceを「modules」にパッケージ化できます.「modules」は、動的ライブラリ、静的ライブラリです.動的ライブラリのみinstall/copyをアプリケーションパッケージ(APK)に、静的ライブラリを動的ライブラリにリンクできます.Androidでmkで1つ以上のmodulesを定義します.同じソースを複数のmodulesに追加することもできます.Build Systemは私たちがこれ以上関心を持つ必要がなく、多くの詳細を処理してくれました.例えば、Androidでmkにはヘッダファイルと外部依存ファイルがリストされます.NDK Build Systemは自動的にこれらの情報を提供してくれます.これは、ユーザーがNDKをアップグレードすると、Androidを変更する必要がなく、新しいtoolchain/platformから利益を得ることができることを意味します.mk.
    Android.mkの構文
    LOCAL_PATH:=$(call my-dir)各Android.mkファイルはLOCAL_を定義する必要がありますPATHは、開発treeでソースファイルを検索するために使用され、マクロmy-dirはbuild Systemによって提供されます.Androidを含むmkのディレクトリパス.
    include $(CLEAR_VARS) CLEAR_VARS変数はBuild Systemによって提供される.指定されたGNU Makefileを指し、多くのLOCAL_を整理します.XXX. 例:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIESなど.でもLOCALは片付けないPATH.このクリーンアップ動作は必須であるため、コンパイル制御ファイルは同じGNU Makeによって解析され、実行され、その変数はグローバルである.だから掃除してから相互影響を避けることができます.
    LOCAL_MODULE := XXXXXX LOCAL_MODULEはAndroidを表すために定義する必要があります.mkの各モジュールは、名前が一意で、スペースを含めることはできません.
    LOCAL_MODULE_TAGS := optional LOCAL_MODULE_TAGSは、このAndroidをどの版でコンパイルするかを指定しています.mk user:モジュールがuserバージョンでのみengをコンパイルすることを指す:モジュールがengバージョンでのみtestsをコンパイルすることを指す:モジュールがtestsバージョンでのみoptionalをコンパイルすることを指す:モジュールがすべてのバージョンでコンパイルされることを指す
    LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_SRC_FILES変数には、モジュールのようにパッケージ化するC/C++ソースコードが含まれている必要があります.ここでは、モジュールをapkパッケージにパッケージ化します.
    LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_CLASSは、コンパイルされたモジュールが最後に配置された場所を識別し、指定しないとシステムに配置されず、最後のobjディレクトリの下にある対応するディレクトリに配置されます.
    LOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)現在のモジュールの接尾辞を指定します.指定すると、ターゲットファイルが生成されると、モジュール名に接尾辞を付けてターゲットファイルが作成されます.
    LOCAL_PRIVILEGED_MODULE := true LOCAL_PRIVILEGED_MODULEはAndroid ROMのコンパイル時の変数で、コンパイル、インストール、権限管理などいくつかの面に関係しています.Androidシステムアプリケーションの場合、LOCAL_PRIVILEGED_MODULEは、そのコンパイル後のROMにおけるインストール位置を決定する:falseを設定しないかfalseに設定しない場合、インストール位置はsystem/appである;trueに設定すると、インストール場所はsystem/priv-appです.
    LOCAL_CERTIFICATE := PRESIGNED LOCAL_CERTIFICATEとはapkの署名を指し、mediaがmedia署名ファイル署名platformを用いてプラットフォーム署名ファイル署名sharedを用いてshared署名ファイル署名PRESIGNEDファイル署名PRESIGNEDファイルが署名済みで再署名が必要でない場合はPRESIGNEDを用いる.
    LOCAL_PREBUILT_JNI_LIBS :=\XXXX  、LOCAL_MULTILIB:=32 Android 5のためです.1は64ビットコンパイル環境なので32ビットのsoライブラリを抽出し、使用する32ビットのlibライブラリ、抽出したlibライブラリを/system/priv-app/appファイル名/下に置く必要があります
    include $(BUILD_PREBUILT) BUILD_PREBUILT:このモジュールは、前回include$(CLEAR_VARS)が呼び出されてからすべてのLOCAL_を収集するために事前にコンパイルされています.XXX情報.なぜコンパイルするかを決めます.BUILD_STATIC_LIBRARY:静的ライブラリにコンパイルされます.  BUILD_SHARED_LIBRARY:ダイナミックライブラリBUILDにコンパイル_EXECECUTABLE:Native C実行可能プログラムBUILDにコンパイルSHARED_LIBRARY:Build Systemが提供する変数で、GNU Makefile Scriptを指します.NDKは他にも多くのBUILDを定義していますXXX_モジュールの生成方法を指定するために使用されるXXX変数.
    $(call my-dir):現在のフォルダパスを取得します.$(call all-java-files-under):指定したディレクトリの下にあるすべてのJavaファイルを取得します.$(call all-c-files-under):指定したディレクトリの下にあるすべてのC言語ファイルを取得します.$(call all-aidl-files-under):指定したディレクトリの下にあるすべてのAIDLファイルを取得します.$(call all-makefiles-under):指定したディレクトリの下にあるすべてのMakeファイルを取得します.$(call intermediates-dir-for,):Build出力のターゲットフォルダパスを取得します.
    コンパイルapk
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_PACKAGE_NAME := WistarHdmi
    LOCAL_MODULE_TAGS := optional
    LOCAL_DEX_PREOPT := false
    
    LOCAL_SRC_FILES := $(call all-java-files-under, src)
    
    LOCAL_CERTIFICATE := platform
    
    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 26 && echo OK),OK)
    LOCAL_PROPRIETARY_MODULE := true
    endif
    
    LOCAL_JAVA_LIBRARIES := droidlogic droidlogic-tv
    LOCAL_STATIC_JAVA_LIBRARIES := \
    	common \
    	asv4
    	
    LOCAL_RESOURCE_DIR := \
        $(LOCAL_PATH)/res \
        $(TOP)/frameworks/support/v17/leanback/res \
        frameworks/support/v7/preference/res \
        frameworks/support/v14/preference/res \
        frameworks/support/v17/preference-leanback/res \
        frameworks/support/v7/appcompat/res \
        $(TOP)/frameworks/support/v7/recyclerview/res
    
    LOCAL_AAPT_FLAGS := --auto-add-overlay \
        --extra-packages android.support.v17.leanback:android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview
    
    
    include $(BUILD_PACKAGE)
    
    include $(CLEAR_VARS)
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := common:libs/com.wistar.common.jar \
    										asv4:libs/android-support-v4.jar
    include $(BUILD_MULTI_PREBUILT)
    
    

    jarパッケージのコンパイル
    LOCAL_PATH:= $(call my-dir)
    
    # the library
    # ============================================================
    include $(CLEAR_VARS)
    
    LOCAL_SRC_FILES := \
      $(call all-subdir-java-files)
    
    LOCAL_MODULE := droidlogic
    LOCAL_MODULE_CLASS := JAVA_LIBRARIES
    LOCAL_DX_FLAGS := --core-library
    LOCAL_JACK_ENABLED := disabled
    include $(BUILD_STATIC_JAVA_LIBRARY) #  jar 
    
    #include $(BUILD_JAVA_LIBRARY)
    
    

    JNI
    static{
    		System.loadLibrary("HelloJNI");
    	}
    
    	public static native String helloJNI();
    	
    	public static native int sum(int x,int y);
    

    cdプロジェクトbinclassesjavahパッケージ名+ファイル名現在のパスでヘッダファイルを生成
    プロジェクトとディレクトリの新しいjni頭ファイルをjniフォルダに入れてcファイルとandroidを加えます.mkファイル
    
    LOCAL_PATH       :=  $(call my-dir)
    //       , my-dir    Android.mk       
    include              $(CLEAR_VARS)
    //        LOCAL——PATH     (   LOCAL_PATH)
    LOCAL_MODULE     :=  hello_jni
    //        ,     .so   
    //  ,       build.gradle NDK         
    LOCAL_SRC_FILES  :=  test.cpp
    //          C/C++    
    include              $(BUILD_SHARED_LIBRARY)
    //                            。
    

    cd jniディレクトリの下でndk-buildコンパイル生成.soファイル