導航:首頁 > 源碼編譯 > 安卓預編譯和即時編譯

安卓預編譯和即時編譯

發布時間:2022-06-08 15:05:32

1. android 怎麼簡單實現預編譯

可以巧妙地利用常量來實現類似的功能。編譯的時候,一般會把常量進行硬編碼,並把不能抵達的代碼進行刪減。因此,我們有了下面類似的代碼:


[java]

public final static boolean IsDebug= false;

if(IsDebug){
Log.i(tag,msg);
}


可以對編譯後的文件,進行反編譯

2. Android系統如何運行動態編譯的程序

把常用的應用程序編譯到img文件中,就成了系統的一部分,用戶不必自己安裝,當然也卸載不了;
同時也可以刪減系統自帶的應用程序,精簡系統;
1.\build\target\proct 目錄下generic.mk文件:
Java代碼 收藏代碼
PRODUCT_PACKAGES := \
AccountAndSyncSettings \
DeskClock \
AlarmProvider \
Bluetooth \
Calculator \
Calendar \
Camera \
testMid \
CertInstaller \
DrmProvider \
Email \
Gallery3D \
LatinIME \
Launcher2 \
Mms \
Music \
我們添加一個testMid \ 應用名稱。
2.把testMid包放入
\packages\apps 目錄下,修改android.mk文件。
Java代碼 收藏代碼
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := testMid
LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)
註:LOCAL_PACKAGE_NAME := testMid (包名必須和generic.mk中添加的相同)
編譯源碼,可以看到在
\out\target\proct\smdkv210\system\app
目錄下生存了testMid.apk了。這時system.img也包含了此應用。
-------------------------------------------------------------------
特殊情況:有時,應用需要包含jar包,這時的app導入源碼時會出現問題:
MODULE.TARGET.JAVA_LIBRARIES.libarity already defined by ... stop
由於 LOCAL_STATIC_JAVA_LIBRARIES := libarity 會引發錯誤信息。
目前解決方法是:
\build\core 目錄下修改base_rules.mk
注釋掉錯誤信息:
ifdef $(mole_id)
#$(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
endif
$(mole_id) := $(LOCAL_PATH)
--重新編譯,這時可以通過了。
(2)、刪除原廠(Telchips)帶源碼的應用程序,如DTV_DVBT
在/device/telechips/m801/device.mk
注釋掉相應語句:
# PRODUCT_PACKAGES += \
# SampleDVBTPlayer \
同時,在/out/target/proct/m801/system/app 找到相應的.APK包,並刪除

3. 為什麼android源碼還需要編譯

android源碼中有著許多的源代碼,其中有c和c++編寫的也有java編寫,這些代碼需要通過重新編譯後才能在android機器上運行的!當然你修改源碼,改完源碼後還是需要對源碼進行編譯的編譯的!android系統源碼的整體編譯需要很長時間,所以一般否是分開來編譯的!這樣縮短了編譯的等待時間,而且也實現了不同人對不同板塊代碼的修改和編譯的分工了!

4. 安卓手機運行環境art什麼意思

Android運行環境ART

安卓之前的版本運行機制是Dalvik,這個導致安卓卡慢,安卓4.4之後推出了ART,在5.0上完全使用了ART模式。

ART 的機制與 Dalvik 不同。在Dalvik下,應用每次運行的時候,位元組碼都需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。

通俗一點就是,ART增加APK安裝容量,實現了流暢度。

5. Android源碼編譯是干什麼

編譯Android系統。

6. 安卓手機為何會運行越來越慢

使用安卓手機的朋友都有這樣一個共識:安卓手機在使用較長一段時間(半年到一年)後,手機會變得卡頓,流暢度大幅下降,大不如從前,這一問題對於安卓手機來說簡直像是「詛咒」——因為不論是低端機還是高端機,甚至包括旗艦機在內都無一能夠擺脫,咱接著說——

那麼這一問題的產生究竟是手機硬體的原因還是系統方面的原因呢?iOS系統會告訴你跟硬體沒有太大的原因,因為搭載iOS操作系統的iPhone硬體配置並算不上出色,但在使用過程中並沒有出現明顯的卡頓現象,那麼問題出在哪裡呢?下面小編要和大家分享的就是安卓手機越用越慢原因分析,一起來看看吧!

想要了解原因,請大家先來看兩個真實的故事:
故事一
1965年,貝爾實驗室、通用電氣和麻省理工學院開始合作開發一套能夠兼顧易用性和強大性的操作系統,經過六年時間的通力協作,貝爾實驗室的一名軟體工程師Ken Thompson在休假期間完成了一個名為Unix的系統編寫,並最終成為貝爾實驗室的母公司、美國電信巨頭AT&T的商業產品,並啟動了長達數十年的版權運作。盡管後來有著許多變種,但是從嚴格意義上來講,Unix不是一個開源的操作系統。

故事二
1991年,一個芬蘭的大學生、同時也是計算機黑客的Linus Torvalds,他對Unix十分著迷,但是買不起運行Unix需要的工作站,所以他就嘗試自己以同樣的編程方式寫了一個名為linux的操作系統,並在自由軟體之父Richard Stallman的精神鼓舞之下,將Linux加入到了自由軟體基金(FSF)當中,允許所有人使用、拷貝、修改甚至銷售Linux系統,同時承擔開源義務,禁止把Linux封閉化的企圖。
好了,故事看完了,你是不是在詫異答案跟這兩個故事有什麼關系,因為我們要討論的Android系統和iOS系統分別是基於Linux和Unix衍生出來的,故兩大操作系統的體驗與Linux和Unix的特性息息相關。

喬幫主就曾經Linux的創始者Linus Torvalds到蘋果工作,放棄Linux的開源,協助開發Mac OS封閉式的Mach內核,後者與喬布斯大吵一架之後明確表示拒絕。而從Mac OS開始,蘋果就將操作系統的私有化視為企業戰略,用喬布斯的話來講,他是將iOS裝進了iPhone這個盒子里,然後賣給了用戶。所以,iPhone之所以不會出現「越用越卡」的情況,是因為蘋果公司對它的手機從硬體到軟體擁有最高的管理許可權,在封閉式的環境中,來自第三方的應用程序無法調用超過iPhone承受限度的指令,自然也不可能造成持續性的系統損傷。

再來說說Android,由於受開源的影響,Google無法從代碼這一埠約束第三方的應用程序,同時,由於Linux核心設定應用在調取系統功能時一定要取得ROOT許可權,這也導致大量應用因為單一功能的實現需求而獲得整個ROOT層面的支配,可以在Android手機的任意儲存位置進行讀寫,這種高自由度無異於開啟了潘多拉魔盒,讓Android手機無法對惡意App事先設防。這也是開源軟體備受爭議、且在商用領域遭到抵觸的原因:它只關心是否授予了用戶自由——這個自由也包括逾越邊界的自由——而沒有從最壞的出發點去考慮如何規避被濫用的風險。盡管Google作為巨頭,一直在嘗試對產業鏈進行統一管理,但是當這條產業鏈日益龐大、連Google也只能扮演其中之一的角色時,Android的失控也就在情理之中了。比如,Android的最新版本通常需要花費超過一年半的時間,才能使激活它的Android手機佔比超過50%,但是iOS 7隻用了兩個月,就讓半數以上的iPhone都更新完畢。另外,一款應用程序如果被蘋果從App Store中懲罰出去,它就再也無法被安裝到任何一款合法的iPhone裡面,但是如果一款應用程序被Google驅逐出Google Play,但是它還是可以登錄各種第三方應用市場,提供正常的下載和安裝。
在這種情況下,一個新興市場誕生了——「手機調校」,並且帶動了新的產業鏈。
「手機調校」的第一級,在於系統層。在Android 4.4以及之後的Android L的規劃中,它將應用程序的運行模式由Dalvik換成了ART,其原理簡單來說是「預編譯」效果,即當一款應用程序在第一次被安裝到Android時,它的位元組碼就已經被編譯成為了本地的機器碼,減少後續運行應用程序時的啟動和執行時間。
根據Google自己公布的結果,在不同的性能測試App中,ART的速度對比Dalvik的平均提升幅度達到了80%,在某些項目中,ART的提升幅度甚至超過了1.5倍,這個結果可謂非常喜人。

這是Google希望從源頭解決Android卡慢問題的努力,但是這只是對性能優化有著作用,無法解決因為應用程序違規調用資源而產生的問題。同時,由於在安裝應用程序時進行了「預編譯」,整個安裝時間將會變長,安裝完畢後生成的文件也會變大,比如最新的Google+安裝包只有6.9M,但是它安裝後的APK大小達到了28.3M,這對Android手機儲存空間又存在過多佔用的問題。

「手機調校」的第二級,在於ROM層。作為全球最大的Android市場,中國的許多手機廠商都以開發專用ROM來為銷售產品添彩,大多數的ROM,也都會考慮對Android系統進行優化,比如MIUI V6就宣稱「引入多種Linux系統內核內存優化技術,提高應用運行效率」。
也就是說,與Google做的事情一樣,ROM廠商主要的優化工作,也是對Linux動刀,打上各種補丁,使其底層語言能夠更好的適配到各種手機終端上。還是以MIUI V6為例,在介紹新特性時,其有這么一條:「ZRAM 調度優化技術」,其實ZARM就是Linux內核里的一個內存模塊,作用就是在內存中劃出一個部分出來充當虛擬盤,來承載Linux的交換分區,將一些任務壓縮容納進去,使內存的使用率提高,讓CPU來為內存服務(因為目前的智能手機普遍CPU過剩、而內存才是瓶頸)。
不過,ROM也是一把雙刃劍,它對於Android底層系統的修改,以及它對於內存空間的佔用,又都有增加手機負載的風險。

「手機調校」的第三級,在於應用層。大量應用程序在手機中發生的意外或故意佔用事件,是造成Android手機越來越慢的最核心原因。過多的應用程序熱衷於滯留在內存空間里、以及將大量碎片留在儲存空間里,是帶來麻煩的罪魁禍首。這也是為什麼即時清理類應用得以逐漸成為Android手機標配。
Android系統有七類進程,分別是前台進程、可見進程、主要服務、次要服務、後台進程、內容供應節點、空進程,在沒有安裝清理類應用的時候,一部Android手機只能依賴系統默認的分配機制來自動調節內存使用,只要應用程序提出請求,大部分進程只要打開後都會被保留在內存當中,這原本是為了讓用戶在再度激活這些進程時不需要重新載入、節省時間的初衷考慮,但是Android沒有料到激烈的市場競爭會驅使應用程序產生「劣幣驅良幣」的趨勢,很多開發者出於商業目的,在不需要留存在內存的情況下也想方設法的讓應用程序保持潛在運行狀態,一個兩個還好說,但是一旦數量更多,Anrdoid手機就會頻頻卡頓和發熱。

以目前全球用戶規模最大的Android手機清理類應用「獵豹清理大師」為例,它清理的進程類型,主要放在後台進程、次要服務、內容供應節點和空進程:
後台進程(Hidden)——這個是最優先被掃描和識別出來的進程,因為大部分Android用戶在切換應用程序時都不會使用返回鍵退出,而是直接按下Home鍵,前者會讓應用進入空進程(佔用資源相對較小),而後者則會保留為後台進程(佔用資源相對更大),尤其是當游戲類App在後台運行時,它會和其他App爭搶資源,而不會在乎那款App是不是用戶正在使用。根據獵豹清理大師的統計,約有20%的常用App即使不運行時也在後台啟動聯網,主要是提交產品及用戶使用信息、獲取廣告信息、查詢是否升級等。

次要服務(Secondary Server)——比如某些企業套件、郵箱聯系人、觸控介面等,這些進程很多都是系統自帶的,有些用戶會使用,但是有些用戶也可能不會使用或已經有了替代應用,所以獵豹清理大師的清理邏輯是基於用戶行為和授權來建立(分為建議清理和深度清理兩類);

內容供應節點(Content Provider)——這部分進程沒有程序實體,僅僅提供內容給其他應用使用,比如日歷供應節點、郵件供應節點等,除了佔用內存資源之外,它還會佔用網路,所以也會給Android手機造成不必要的負擔;

空進程(Empty)——如果是通過返回鍵退出應用,大部分的應用也會在Android手機的內存里遺留一個空的進程,這個進程沒有數據運行,但是會記錄應用的歷史信息,幾乎沒有任何價值,同樣,這部分進程內容被幹掉的優先順序也很高。

除了對內存的過度消耗之外,Android手機也容易在儲存中積累大量冗餘數據,包括無法卸載的預裝應用、卸載之後的殘存文件以及使用應用的過程中產生的緩存,由於Android本身沒有提供管理工具,即使將手機連接電腦之後也是如同Windows樹狀結構一樣的文件夾包,用戶很難獨立判斷哪些文件夾可以刪除、哪些文件夾是系統必備的,最後也會導致手機尺寸空間愈來愈窄的情況。

「手機調校」的問題,可能又回帶來用戶操作的負擔增加,其心理壓力甚於行為壓力,玩著手機還不忘隔三差五的使用清理功能,這種與iPhone相比「別具特色」的操作習慣,也是Android手機永遠像一個半成品或工程機的原因。

看完之後,你對Android的卡頓現象是否有了新的認識呢?

7. Android工程編譯順序是怎麼樣的先編譯哪個模塊,後編譯哪個模塊由誰來決定的

在ActivityManifest.xml聲明的Activity中,含有
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
是最先執行的,其它類就的順序在這個主函數中先調用或跳轉哪個就是哪個了

8. 如何預編譯 Android 模擬器專用內核

Android源碼編譯之後生成的是ramdisk.img、system.img和userdata.img。而內核源碼編譯完成之後生成的是ZImage。在一般情況下Android源碼是不帶有內核源碼的,但是帶有一個鏡像,這樣在編譯完Android源碼之後就可以模擬器啟動了,如果要更換系統的內核,此時將高版本的內核源碼進行編譯生成ZImage然後替換Android系統的的鏡像。這樣使用模擬器啟動之後就可以查看內核是否已經被刷新。

9. 安卓系統可以直接編譯和運行JAVA文件嗎需要怎麼安裝環境

安卓軟體的開發,許Java的環境呢
需要你會編程和Java,然後可以在應用寶上面下載一個開發的教程
應用寶裡面的資源很多,除了有大量的APP應用可以免費下載
還有很多軟體開發的教程和攻略呢,都是很不錯的,免費下載呢
在手機上打開應用寶軟體搜索你所需要的教程,找到下載就可以了。
也可以通過手機連接電腦端的應用寶軟體來下載的,打開PC端的應用寶軟體——手機應用。
可以通過搜索你所需要的開發教程進行下載呢,都是很方便的。還望採納

10. android 怎麼編譯so文件

android NDK編譯多個so文件

android編譯系統的makefile文件Android.mk寫法如下

(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下

Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:

LOCAL_PATH:=$(call my-dir)

上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。

(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始

以include $(BUILD_XXX)結束。

include $(CLEAR_VARS)

CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,

如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫

include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。

include $(BUILD_EXECUTABLE)表示編譯成可執行程序

(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS) 模塊一

ifeq ($(AUDIO_POLICY_TEST),true)

ENABLE_AUDIO_DUMP := true

endif

LOCAL_SRC_FILES:= \

AudioHardwareGeneric.cpp \

AudioHardwareStub.cpp \

AudioHardwareInterface.cpp

ifeq ($(ENABLE_AUDIO_DUMP),true)

LOCAL_SRC_FILES += AudioDumpInterface.cpp

LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP

endif

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_CFLAGS += -DGENERIC_AUDIO

endif

LOCAL_MODULE:= libaudiointerface

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_SRC_FILES += A2dpAudioInterface.cpp

LOCAL_SHARED_LIBRARIES += liba2dp

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_C_INCLUDES += $(call include-path-for, bluez)

endif

include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫

include $(CLEAR_VARS) 模塊二

LOCAL_SRC_FILES:= \

AudioPolicyManagerBase.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libmedia

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudiopolicybase

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_A2DP

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫

include $(CLEAR_VARS) 模塊三

LOCAL_SRC_FILES:= \

AudioFlinger.cpp \

AudioMixer.cpp.arm \

AudioResampler.cpp.arm \

AudioResamplerSinc.cpp.arm \

AudioResamplerCubic.cpp.arm \

AudioPolicyService.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase

LOCAL_CFLAGS += -DGENERIC_AUDIO

else

LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy

endif

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudioflinger

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_SHARED_LIBRARIES += liba2dp

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

ifeq ($(TARGET_SIMULATOR),true)

ifeq ($(HOST_OS),linux)

LOCAL_LDLIBS += -lrt -lpthread

endif

endif

ifeq ($(BOARD_USE_LVMX),true)

LOCAL_CFLAGS += -DLVMX

LOCAL_C_INCLUDES += vendor/nxp

LOCAL_STATIC_LIBRARIES += liblifevibes

LOCAL_SHARED_LIBRARIES += liblvmxservice

# LOCAL_SHARED_LIBRARIES += liblvmxipc

endif

include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫

(4)編譯一個應用程序(APK)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build-->直譯(創建APK的名稱)

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK-->直譯(告訴它來建立一個APK)

include $(BUILD_PACKAGE)

(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# List of static libraries to include in the package

LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK

include $(BUILD_PACKAGE)

(6)編譯一個需要用平台的key簽名的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK

include $(BUILD_PACKAGE)

(7)編譯一個需要用特定key前面的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK

include $(BUILD_PACKAGE)

(8)添加一個預編譯應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Mole name should match apk name to be installed.

LOCAL_MODULE := LocalMoleName

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

(9)添加一個靜態JAVA庫

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)

(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:

LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,

通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM

LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄

舉例如下:

LOCAL_C_INCLUDES += extlibs/zlib-1.2.3

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC 指定C編譯器

LOCAL_CERTIFICATE 簽名認證

LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO

LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑

LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名

如:LOCAL_CPP_EXTENSION := .cc

注意統一模塊中C++文件後綴必須保持一致。

LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX 指定C++編譯器

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true

目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常

文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種

多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework

注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)

LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:

LOCAL_LDLIBS += -lcurses -lpthread

LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)

LOCAL_MODULE_PATH 生成模塊的路徑

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS 生成模塊的標記

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME APK應用程序的名稱

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件

LOCAL_PREBUILT_JAVA_LIBRARIES

LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.

LOCAL_PREBUILT_OBJ_FILES

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)

LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES 可鏈接動態庫

LOCAL_SRC_FILES 編譯源文件

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES 可鏈接靜態庫

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH

閱讀全文

與安卓預編譯和即時編譯相關的資料

熱點內容
命令查看網卡信息 瀏覽:302
僑豐真空壓縮袋價格 瀏覽:585
西方倫理學pdf 瀏覽:906
浪潮英信伺服器如何打開機箱 瀏覽:419
如何設置微信加密後別人知道嗎 瀏覽:913
貼吧知乎這類屬於什麼類型的app 瀏覽:762
華為雲網路系統伺服器 瀏覽:188
阿里雲教育雲伺服器 瀏覽:755
androidui設計尺寸 瀏覽:512
如何改變我的世界伺服器 瀏覽:250
程序員的不足之處 瀏覽:847
編譯的五大過程 瀏覽:989
三個火槍手pdf 瀏覽:276
opc伺服器怎麼區分 瀏覽:845
app重影是什麼意思 瀏覽:616
android更改鍵盤 瀏覽:722
壓縮機氣液分離器結構 瀏覽:654
曲軸連桿壓縮機 瀏覽:947
怎麼刪除加密的照片 瀏覽:167
安卓手機怎麼關掉震動感應 瀏覽:59