安卓只編譯的選項
⑴ 如何單獨編譯Android源代碼中的模塊
第一次下載好Android源代碼工程後,我們通常是在Android源代碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統鏡像system.img了。以後如果我們修改了Android源代碼中的某個模塊或者在Android源代碼工程新增一個自己的模塊,是不是還是執行make命令呢?答案是否定的,Google為我們准備了另外的命令來支持編譯單獨的模塊,以及重新打包system.img的命令。在繼續學習Android源代碼之前,就讓我們先來看看這個命令吧。
一.首先在Android源代碼目錄下的build目錄下,有個腳本文件envsetup.sh,執行這個腳本文件後,就可以獲得一些有用的工具:
USER-NAME@MACHINE-NAME:~/Android$../build/envsetup.sh
注意,這是一個source命令,執行之後,就會有一些額外的命令可以使用:
-croot:.
-m:Makesfromthetopofthetree.
-mm:.
-mmm:.
-cgrep:GrepsonalllocalC/C++files.
-jgrep:GrepsonalllocalJavafiles.
-resgrep:Grepsonalllocalres/*.xmlfiles.
-godir:.
這些命令的具體用法,可以在命令的後面加-help來查看,這里我們只關注mmm命令,也就是可以用它來編譯指定目錄的所有模塊,通常這個目錄只包含一個模塊。
二.使用mmm命令來編譯指定的模塊,例如Email應用程序:
USER-NAME@MACHINE-NAME:~/Android$mmmpackages/apps/Email/
編譯完成之後,就可以在out/target/proct/generic/system/app目錄下看到Email.apk文件了。Android系統自帶的App都放在這具目錄下。另外,Android系統的一些可執行文件,例如C編譯的可執行文件,放在out/target/proct/generic/system/bin目錄下,動態鏈接庫文件放在out/target/proct/generic/system/lib目錄下,out/target/proct/generic/system/lib/hw目錄存放的是硬體抽象層(HAL)介面文件。
三.編譯好模塊後,還要重新打包一下system.img文件,這樣我們把system.img運行在模擬器上時,就可以看到我們的程序了。
USER-NAME@MACHINE-NAME:~/Android$makesnod
四.參照Ubuntu上下載、編譯和安裝Android最新源代碼一文介紹的方法運行模擬器:
USER-NAME@MACHINE-NAME:~/Android$emulator
這樣一切就搞定了。
⑵ androidstudio怎樣設置只編譯當前工程
具體如下:
setting(快捷鍵)–>Built,Execution,Deployment–>compiler 在make the project automatically(*)前面打鉤.
自動編譯意味著每次運行都能縮短很多時間哦,雷達下載更專業。
1.make模塊名稱需要查看Android.mk文件的LOCAL_PACKAGE_NAME變數。2.mmm命令用於在源碼根目錄編譯指定模塊,參數為模塊的相對路徑。只能在第一次編譯後使用。比如要編譯Phone部分源碼,需要在終端中執行以下命令:$mmmpackages/apps/phone3.mm命令用於在模塊根目錄編譯這個模塊。只能在第一次編譯後使用。例如要編譯Phone部分源碼,需要在終端中執行以下命令:$cdpackages/apps/phone$mm註:mmm和mm命令必須在執行「.build/envsetup.sh」之後才能使用,並且只編譯發生變化的文件。如果要編譯模塊的所有文件,需要-B選項,例如mm-B。
⑷ 如何定製android源碼的編譯選項
現僅就工作遇到的問題做個總結。所用硬體平台為amlogic stvm3。---------------------------------------------------------------------------關於版本號:文件build/core/version_defaults.mk用來檢查一些跟版本相關的變數是否定義;如果未定義,則使用默認值。這些變數包括 PLATFORM_VERSION # 如 2.2.5 PLATFORM_SDK_VERSION # 8, 對應2.2.5 PLATFORM_VERSION_CODENAME # REL,即發行版 DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME BUILD_ID # 默認為UNKNOWN BUILD_NUMBER # 默認eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。 version_defaults.mk首先包含進build_id.mk。用戶應當配置build_id.mk,而不應該改動version_defaults.mk文件。然後檢查上述變數,如未定義則賦值默認值。---------------------------------------------------------------------------關於調試功能(adb)的開啟編譯android源碼之前總是要先運行build/envsetup.sh,以初始化一些常用命令(實際上是bash的函數,如add_lunch_combo)。其中也從以下文件中引入了一些編譯設置: device/${CHIPSET_VENDOR}/vendorsetup.sh我們這里使用的CHIPSET_VENDOR為amlogic。比如我們有文件device/amlogic/vendorsetup.sh,內容為"產品名-編譯類型(flavor)"列表(稱為combo),如下: add_lunch_combo m1ref-eng add_lunch_combo m1ref-user add_lunch_combo m2ref-eng add_lunch_combo m2ref-user add_lunch_combo stvm3-eng add_lunch_combo stvm3-user其中,m1ref和stvm3是產品名(作前綴),後面為編譯類型。除此前綴外可選的combo值有: eng, user, userdebug, tests。(參考文件build/core/main.mk中對於變數TARGET_BUILD_VARIANT的篩查條件)我們可以修改vendorsetup.sh文件,來改變為特定設備編譯的結果。以下是各個編譯類型的特點: eng: 工程模式,用於平台級的調試,是默認的編譯類型。
⑸ 安卓系統APK反編譯的問題——設置里添加新選項
我想問如何在一個已經編譯的軟體里添加新的事件(不是res)(不是我寫的軟體,沒有源碼)
我想你這個情況,應該換上原來的簽名試試,我反編譯改的都是res,不懂添加新的事件,只改res,就必須用原來的簽名,
⑹ Android 編譯選項user,userdebug和eng的區別
這我也不太懂,大概記得這樣情況、
1、user:只有在user版本時該模塊才被編譯進去;
2、eng:只有在eng版本時該模塊才被編譯進去;
3、test:只有在tests版本時該模塊才被編譯進去;
⑺ 如何單獨編譯安卓系統源碼指定模塊
Android源碼目錄下的build/envsetup.sh文件,描述編譯的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
要想使用這些命令,首先需要在android源碼根目錄執行. build/envsetup.sh 腳本設置環境
m:編譯所有的模塊
mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件
mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件
下面舉個例子說明,假設我要編譯android下的\hardware\libhardware_legacy\power模塊,當前目錄為源碼根目錄,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
編譯完後 運行 make snod
會重新將你改過的模塊打入到system.img中
⑻ 如何單獨編譯安卓系統源碼指定模塊
例如:你不想編譯music進image中,你就在該文件里PRODUCT_PACKAGES:=這一項下的Music刪除就可以了同理,你想把自己的app編譯進image中,你先寫好編譯用的Android.mk文件,然後去到上面所說的文件里在PRODUCT_PACKAGES:=這一項添加對應的app包名一般來說,只要改這么一個文件就足夠了。但是如果以上編譯後發現還是編譯到了image裡面,那麼它很有可能是一個已經編譯好的apk文件預裝到image裡面去了,也是以我的sdk為例,進入device/產品目錄/common/apk下看看有沒有.apk文件,我的sdk裡面這個目錄下的.apk文件是全部預裝到system/app裡面的還有一個目錄:/device/產品目錄/common/preinstallapk這個目錄里的apk也是預裝到image裡面去,只是並不是預裝到system/app而已也就是說,你還要看看你不想編譯進image里的app是不是預裝進去,如果是預裝進去的話,只要在對應目錄下把該apk文件刪除了就好了希望這些能幫到你!
