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
jarパッケージのコンパイル
JNI
cdプロジェクトbinclassesjavahパッケージ名+ファイル名現在のパスでヘッダファイルを生成
プロジェクトとディレクトリの新しいjni頭ファイルをjniフォルダに入れてcファイルとandroidを加えます.mkファイル
cd jniディレクトリの下でndk-buildコンパイル生成.soファイル
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ファイル