久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android.mk解析

 James130 2015-10-12
1. Android.mk示例
LOCAL_PATH := $(call my-dir)         #指定當(dāng)前目錄
include $(CLEAR_VARS)              #清除一些變量的值,,但是LOCAL_PATH除外
LOCAL_MODULE_TAGS := optional    #編譯選項(xiàng)便是在何種情況下編譯
LOCAL_SRC_FILES := hello.c          #源文件(可以指定多個(gè))
LOCAL_MODULE := hello                      #編譯出來的模塊名
LOCAL_MODULE_CLASS := EXECUTABLES   #指定編譯之后放置的位置(此處指示放在system/bin下)
include $(BUILD_XXX)              #引入編譯規(guī)則 
BUILD_EXECUTABLE  編譯成可執(zhí)行的模塊       build/core/host_executable.mk
BUILD_STATIC_LIBRARY 編譯成靜態(tài)庫(kù),前綴為lib,,后綴為.a,,build/core/host_static_library.mk
BUILD_SHARED_LIBRARY 編譯成動(dòng)態(tài)庫(kù),前綴為lib,,后綴為.so,,build/core/host_shared_library.mk
靜態(tài)庫(kù)不會(huì)復(fù)制到的APK包中,但是能夠用于編譯共享庫(kù),,生成一個(gè)名為 lib$(LOCAL_MODULE).a 的文件

2. 常用模塊描述變量:
LOCAL_PATH: 給出當(dāng)前文件路徑,,必須在Android.mk開頭定義,可以這樣使用:
LOCAL_PATH := $(call my-dir)  這個(gè)變量不會(huì)被$(CLEAR_VARS)清除,,
因此每個(gè) Android.mk 只需要定義一次(即使在一個(gè)文件中定義了幾個(gè)模塊的情況下)。
LOCAL_SRC_FILES:要編譯的源碼文件列表,,編譯系統(tǒng)自動(dòng)計(jì)算依賴,,
注意:文件名稱相對(duì)LOCAL_PATH計(jì)算;文件之間使用空格或者tab鍵分隔開,,換行使用 / ,,另外可以使用:
LOCAL_SRC_FILES := $(call all-subdir-java-files)包含所有java文件
LOCAL_MODULE:模塊名字,必須唯一,,不能包含空格,,必須在$(BUILD_XXX)之前定義,模塊名決定了生成文件的名字,。
LOCAL_STATIC_LIBRARIES: 表示該模塊需要使用哪些靜態(tài)庫(kù),,以便在編譯時(shí)進(jìn)行鏈接。
LOCAL_SHARED_LIBRARIES:  表示模塊在運(yùn)行時(shí)要依賴的共享庫(kù)(動(dòng)態(tài)庫(kù)),,在鏈接時(shí)就需要,,以便在生成文件時(shí)嵌入其相應(yīng)的信息,不需要添加.so后綴,。
LOCAL_JAVA_LIBRARIES:編譯java應(yīng)用程序和庫(kù)的時(shí)候指定包含的java類庫(kù),,目前有core和framework兩種情況下定義成,LOCAL_JAVA_LIBRARIES := core framework,非必須
LOCAL_MODULE_TAGS: 模塊標(biāo)記,,一般的取值范圍為debug,、eng、test,、optional,,如果不定義則默認(rèn)為optional。對(duì)這幾個(gè)模式的解釋為:
    user:指 該模塊只在user版本下才編譯,;
    eng:指該模塊只在eng版本下才編譯,;
    tests:指該模塊只在tests版本下才編譯;
    optional:指該模 塊在所有版本下都編譯,。
LOCAL_CFLAGS:編譯C代碼有用,,附件包含路徑,宏定義或者編譯選項(xiàng),,為C,,C++編譯器定義額外的標(biāo)志,如:
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1
LOCAL_MODULE_PATH:(prebuilt)指定最后的目標(biāo)安裝路徑,,默認(rèn)等于:
TARGET_OUT_$(LOCAL_MODULE_CLASS),,
當(dāng)然也可以手動(dòng)指定,如$(TARGET_OUT_ETC)/permissions,,等于要安裝在system/etc/permissions目錄,。
        TARGET_ROOT_OUT:表示根文件系統(tǒng)。 
        TARGET_OUT:表示 system文件系統(tǒng),。 
        TARGET_OUT_DATA:表示 data文件系統(tǒng),。 

用法如:LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT)
    LOCAL_MODULE_CLASS:(prebuilt)標(biāo)識(shí)了所編譯模塊最后放置的位置,如果不指定,,不會(huì)放到系統(tǒng)中,。
    LOCAL_MODULE_CLASS := ETC      放于system/etc目錄
    LOCAL_MODULE_CLASS := EXECUTABLES    放于/system/bin目錄
    LOCAL_MODULE_CLASS := SHARED_LIBRARIES    放在/system/lib目錄
    LOCAL_MODULE_CLASS := JAVA_LIBRARIES     
    LOCAL_MODULE_CLASS := STATIC_LIBRARIES     
    LOCAL_MODULE_CLASS := APPS    放在/system/app目錄

可選項(xiàng)
    LOCAL_C_INCLUDES:可選變量,表示頭文件的檢索路徑,,默認(rèn)是LOCAL_PATH,。
    注意:該選項(xiàng)要在LOCAL_CFLAGS/LOCAL_CPPFLAGS標(biāo)志之前進(jìn)行設(shè)置。
    LOCAL_CPP_EXTENSION:可選變量,,指定C++代碼文件的擴(kuò)展名,。
    LOCAL_CXXFLAGS:類似以上,針對(duì)C++源文件
    LOCAL_CPPFLAGS:類似以上,,對(duì)C和C++都適用
    LOCAL_PACKAGE_NAME:app的名字,,例如Contacts
    LOCAL_PREBUILT_EXECUTABLES:(prebuilt)預(yù)編譯including $(BUILD_PREBUILT)或
$(BUILD_HOST_PREBUILT)時(shí)所用,指定需要復(fù)制的可執(zhí)行文件,。
    LOCAL_PREBUILT_LIBS:(prebuilt)是在預(yù)編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時(shí)所用, 指定需要復(fù)制的庫(kù),。
    LOCAL_OVERRIDES_PACKAGES:此變量可以使其他的模塊不加入編譯,,如源碼中DeskClock的android.mk有
LOCAL_OVERRIDES_PACKAGES := AlarmClock,可以使AlarmClock不會(huì)加入到編譯系統(tǒng)中,,不會(huì)生成
AlarmClock.apk,。
    LOCAL_MODULE_STEM:編譯中間文件和target的名字,如果不指定,,則使用LOCAL_MODULE,。
    LOCAL_MODULE_SUFFIX:編譯目標(biāo)文件的后綴,默認(rèn)Android自動(dòng)添加,。
    COMMON_PACKAGE_SUFFIX    .zip
    COMMON_JAVA_PACKAGE_SUFFIX    .jar
    COMMON_ANDROID_PACKAGE_SUFFIX    .apk

3. 編譯宏命令:使用$(call command)方式來調(diào)用
my-dir:返回當(dāng)前Android.mk文件所在的目錄路徑,,一般在Android.mk的開頭定義LOCAL_PATH
all-subdir-makefiles:返回一個(gè)當(dāng)前my-dir路徑子目錄中所有Android.mk列表
this-makefile:返回當(dāng)前makefile的路徑,即這個(gè)函數(shù)調(diào)用的地方
parent-makefile:返回調(diào)用樹中父makefile的路徑,,即包含當(dāng)前makefile的makefile的路徑
inherit-product:加載其他的prebuilt.mk

Android.mk可以用于生成APK應(yīng)用程序,,JAVA庫(kù),C,,C++可執(zhí)行程序,,以及對(duì)應(yīng)的動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

4. 一些有用的編譯模板
編譯apk
LOCAL_PATH := $(call my-dir)         

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := gson2.2 aquery v3dcore asupport socketio
LOCAL_SRC_FILES := $(call all-java-files-under, src)
/src/com/letv/t2/launcher/aidl/service/LiveLayerStatusBinderInterface.aidl
/src/com/letv/t2/launcher/aidl/service/BarrageObserver.aidl /# Add overlay folder.
LOCAL_PACKAGE_OVERLAYS := overlay
LOCAL_PACKAGE_NAME := T2Launcher
LOCAL_CERTIFICATE := platform
ifeq ($(findstring full_mstarnapoli,$(TARGET_PRODUCT)),full_mstarnapoli)   
    LOCAL_JAVA_LIBRARIES := com.mstar.android
endif

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := gson2.2:libs/gson-2.2.2.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += aquery:libs/android-query.0.24.3.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += v3dcore:libs/V3DCore.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += asupport:libs/android-support-v4.jar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += socketio:libs/android-websockets.jar
include $(BUILD_MULTI_PREBUILT)

編譯JAVA庫(kù)模板
LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS)  # Build all java files in the java subdirectory 
LOCAL_SRC_FILES := $(call all-subdir-java-files)  # Any libraries that this library depends on 
LOCAL_JAVA_LIBRARIES := android.test.runner  # The name of the jar file to create 
LOCAL_MODULE := sample  # Build a static jar file. 
include $(BUILD_STATIC_JAVA_LIBRARY) 

編譯C,C++應(yīng)用程序
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) 

編譯C,,C++靜態(tài)庫(kù)
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) 

編譯C,,C++動(dòng)態(tài)庫(kù)
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) 

生成結(jié)果的目錄:
1)out/target/product/generic/obj/APPS 
2)out/target/product/generic/obj/JAVA_LIBRARIES 
3)out/target/product/generic/obj/EXECUTABLE 
4)out/target/product/generic/obj/STATIC_LIBRARY 
5)out/target/product/generic/obj/SHARED_LIBRARY

每個(gè)模塊的目標(biāo)文件夾為:
1)APK 程序:XXX_intermediates
2)JAVA庫(kù)程序:XXX_intermediates 這里的XXX
3)CC++可執(zhí)行程 序:XXX_intermediates
4)CC++靜態(tài)庫(kù): XXX_static_intermediates
5)CC++動(dòng)態(tài)庫(kù): XXX_shared_intermediates

參考鏈接:http://www./news/201307/10450.shtml

5. 加載第三方應(yīng)用和類庫(kù)
集成靜態(tài)庫(kù)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_LIBS := libA.a libB.a         
LOCAL_STATIC_LIBRARIES := libA libB 
include $(BUILD_MULTI_PREBUILT)

集成動(dòng)態(tài)庫(kù)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := liblinkshell
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_CERTIFICATE := platform
LOCAL_MODULE_SUFFIX := .so
LOCAL_SRC_FILES := xxx.so
include $(BUILD_PREBUILT)

集成可執(zhí)行文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := hellovprc.elf
LOCAL_MODULE := hellovprc.elf
LOCAL_MODULE_CLASS := EXECUTABLES
//LOCAL_MODULE_PATH := $(TARGET_OUT)/bin  
LOCAL_MODULE_TAGS := debug
include $(BUILD_PREBUILT) 

集成prebuild應(yīng)用程序apk
方法一:建立目錄結(jié)構(gòu),如:
vendor/BM/APPs/MobileQQ2011/MobileQQ2011.apk
vendor/BM/APPs/MobileQQ2011/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) # Module name should match apk name to be installed.
LOCAL_MODULE := MobileQQ2011
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX:= $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES:= $(LOCAL_MODULE).apk
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)

方法二:純粹拷貝apk文件
vendor/BM/APPs/MobileQQ2011.apk
vendor/BM/APPs/Renren_Android_3.0.2.apk
通過android提供的PRODUCT_COPY_FILES這個(gè)變量來自動(dòng)拷貝,,只需要給此變量賦值,。
在任何一個(gè)確定加入編譯的mk文件中加入
PRODUCT_COPY_FILES+= /vendor/bm/APPS/MobileQQ2011.apk:system/app/MobileQQ2011.apk
/vendor/bm/APPS/Renren_Android_3.0.2.apk:system/app/Renren_Android_3.0.2.apk

6. 參考文檔:
http://blog.csdn.net/poolwater/article/details/10491061

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多