當前位置:首頁 » 編程軟體 » linux編譯安卓程序

linux編譯安卓程序

發布時間: 2022-05-08 09:24:05

『壹』 如何加快linux android 的編譯速度

項目越來越大,每次需要重新編譯整個項目都是一件很浪費時間的事情。Research了一下,找到以下可以幫助提高速度的方法,總結一下。
1. 使用tmpfs來代替部分IO讀寫
2.ccache,可以將ccache的緩存文件設置在tmpfs上,但是這樣的話,每次開機後,ccache的緩存文件會丟失
3.distcc,多機器編譯
4.將屏幕輸出列印到內存文件或者/dev/null中,避免終端設備(慢速設備)拖慢速度。

tmpfs
有人說在Windows下用了RAMDisk把一個項目編譯時間從4.5小時減少到了5分鍾,也許這個數字是有點誇張了,不過粗想想,把文件放到內存上做編譯應該是比在磁碟上快多了吧,尤其如果編譯器需要生成很多臨時文件的話。
這個做法的實現成本最低,在Linux中,直接mount一個tmpfs就可以了。而且對所編譯的工程沒有任何要求,也不用改動編譯環境。
mount -t tmpfs tmpfs ~/build -o size=1G
用2.6.32.2的Linux Kernel來測試一下編譯速度:
用物理磁碟:40分16秒
用tmpfs:39分56秒
呃……沒什麼變化。看來編譯慢很大程度上瓶頸並不在IO上面。但對於一個實際項目來說,編譯過程中可能還會有打包等IO密集的操作,所以只要可能,用tmpfs是有益無害的。當然對於大項目來說,你需要有足夠的內存才能負擔得起這個tmpfs的開銷。
make -j
既然IO不是瓶頸,那CPU就應該是一個影響編譯速度的重要因素了。
用make -j帶一個參數,可以把項目在進行並行編譯,比如在一台雙核的機器上,完全可以用make -j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。
還是用Kernel來測試:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
由此看來,在多核CPU上,適當的進行並行編譯還是可以明顯提高編譯速度的。但並行的任務不宜太多,一般是以CPU的核心數目的兩倍為宜。
不過這個方案不是完全沒有cost的,如果項目的Makefile不規范,沒有正確的設置好依賴關系,並行編譯的結果就是編譯不能正常進行。如果依賴關系設置過於保守,則可能本身編譯的可並行度就下降了,也不能取得最佳的效果。
ccache
ccache工作原理:
ccache也是一個編譯器驅動器。第一趟編譯時ccache緩存了GCC的「-E」輸出、編譯選項以及.o文件到$HOME/.ccache。第二次編譯時盡量利用緩存,必要時更新緩存。所以即使"make clean; make"也能從中獲得好處。ccache是經過仔細編寫的,確保了與直接使用GCC獲得完全相同的輸出。

ccache用於把編譯的中間結果進行緩存,以便在再次編譯的時候可以節省時間。這對於玩Kernel來說實在是再好不過了,因為經常需要修改一些Kernel的代碼,然後再重新編譯,而這兩次編譯大部分東西可能都沒有發生變化。對於平時開發項目來說,也是一樣。為什麼不是直接用make所支持的增量編譯呢?還是因為現實中,因為Makefile的不規范,很可能這種「聰明」的方案根本不能正常工作,只有每次make clean再make才行。
安裝完ccache後,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,鏈到/usr/bin/ccache上。總之確認系統在調用gcc等命令時會調用到ccache就可以了(通常情況下/usr/local /bin會在PATH中排在/usr/bin前面)。
安裝的另外一種方法:
vi ~/.bash_profile
把/usr/lib/ccache/bin路徑加到PATH下
PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin
這樣每次啟動g++的時候都會啟動/usr/lib/ccache/bin/g++,而不會啟動/usr/bin/g++
效果跟使用命令行ccache g++效果一樣
這樣每次用戶登錄時,使用g++編譯器時會自動啟動ccache
繼續測試:
用ccache的第一次編譯(make -j4):23分38秒
用ccache的第二次編譯(make -j4):8分48秒
用ccache的第三次編譯(修改若干配置,make -j4):23分48秒

看來修改配置(我改了CPU類型...)對ccache的影響是很大的,因為基本頭文件發生變化後,就導致所有緩存數據都無效了,必須重頭來做。但如果只是修改一些.c文件的代碼,ccache的效果還是相當明顯的。而且使用ccache對項目沒有特別的依賴,布署成本很低,這在日常工作中很實用。
可以用ccache -s來查看cache的使用和命中情況:
cache directory /home/lifanxi/.ccachecache hit 7165cache miss 14283called for link 71not a C/C++ file 120no input file 3045files in cache 28566cache size 81.7 Mbytesmax cache size 976.6 Mbytes
可以看到,顯然只有第二編次譯時cache命中了,cache miss是第一次和第三次編譯帶來的。兩次cache佔用了81.7M的磁碟,還是完全可以接受的。
distcc
一台機器的能力有限,可以聯合多台電腦一起來編譯。這在公司的日常開發中也是可行的,因為可能每個開發人員都有自己的開發編譯環境,它們的編譯器版本一般是一致的,公司的網路也通常具有較好的性能。這時就是distcc大顯身手的時候了。
使用distcc,並不像想像中那樣要求每台電腦都具有完全一致的環境,它只要求源代碼可以用make -j並行編譯,並且參與分布式編譯的電腦系統中具有相同的編譯器。因為它的原理只是把預處理好的源文件分發到多台計算機上,預處理、編譯後的目標文件的鏈接和其它除編譯以外的工作仍然是在發起編譯的主控電腦上完成,所以只要求發起編譯的那台機器具備一套完整的編譯環境就可以了。
distcc安裝後,可以啟動一下它的服務:
/usr/bin/distccd --daemon --allow 10.64.0.0/16
默認的3632埠允許來自同一個網路的distcc連接。
然後設置一下DISTCC_HOSTS環境變數,設置可以參與編譯的機器列表。通常localhost也參與編譯,但如果可以參與編譯的機器很多,則可以把localhost從這個列表中去掉,這樣本機就完全只是進行預處理、分發和鏈接了,編譯都在別的機器上完成。因為機器很多時,localhost的處理負擔很重,所以它就不再「兼職」編譯了。
export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"
然後與ccache類似把g++,gcc等常用的命令鏈接到/usr/bin/distcc上就可以了。
在make的時候,也必須用-j參數,一般是參數可以用所有參用編譯的計算機CPU內核總數的兩倍做為並行的任務數。
同樣測試一下:
一台雙核計算機,make -j4:23分16秒
兩台雙核計算機,make -j4:16分40秒
兩台雙核計算機,make -j8:15分49秒
跟最開始用一台雙核時的23分鍾相比,還是快了不少的。如果有更多的計算機加入,也可以得到更好的效果。
在編譯過程中可以用distccmon-text來查看編譯任務的分配情況。distcc也可以與ccache同時使用,通過設置一個環境變數就可以做到,非常方便。
總結一下:
tmpfs: 解決IO瓶頸,充分利用本機內存資源
make -j: 充分利用本機計算資源
distcc: 利用多台計算機資源
ccache: 減少重復編譯相同代碼的時間
這些工具的好處都在於布署的成本相對較低,綜合利用這些工具,就可以輕輕鬆鬆的節省相當可觀的時間。上面介紹的都是這些工具最基本的用法,更多的用法可以參考它們各自的man page。
5.還有提速方法是把屏幕輸出重定向到內存文件或/dev/null,因對終端設備(慢速設備)的阻塞寫操作也會拖慢速度。推薦內存文件,這樣發生錯誤時,能夠查看。

『貳』 Linux下如何編譯Android源碼~~~

使用的是putty.exe軟體本身機器windows環境連接伺服器的linux環境編譯androidputty.exe界面在上面有提到了輸入你的賬號密碼後會進入這樣的效果就算是成功了可以ls就是當前目錄下的文件/文件夾_job就是我的文件夾接下來我們就要進入到源碼所在的目錄cd 你的android源文件的目錄比較笨的方法就是cd _joblscd _........就是一層一層的往下走好的辦法就是cd job/按Tab鍵 會自動填寫目錄名(如果有多個文件夾他會給你列出來)如果順利的來到源文件目錄下在編譯前我們需要預編譯一下(可能在源碼裡面還有沒有解包的需要完全解包)下面的所有的命令前面必須要加 sudo-->超級用戶模式還有就是下面的命令都是要在根目錄下進行編譯編譯前預處理(make prebuild)執行完成後就可以進行編譯了編譯Android代碼(make)-->要等最少1-3個小時吧等編譯完成後就可以使用Eclipse修改你的源碼了編譯後處理(make firmware)su make firmware注意:編譯時必須要在根目錄下進行

『叄』 為什麼Linux安卓編譯會出現卡頓

一、這是由系統機制決定的,安卓程序都是運行在java虛擬機上的,而不像iPhone手機那樣直接運行在操作系統上。該虛擬機就像是個垃圾生成器和內存大老虎,非常消耗內存,會產生很多垃圾,安卓機會隨著程序安裝的程序越多,cpu能耗越大,從而越來越卡,而且隨著用的時間越久,會越來越卡;最終都會走上不停刷機的不歸路,刷機又可能出錯,所以讓人很蛋疼。

二、安卓內存多任務機制,從理論上來說JAVA可自動殺死後台APP回收內存,但是JAVA虛擬機卻不能做到隨用隨收,當我們在使用安卓手機玩天天跑酷或雷霆戰機等游戲時,每隔一小會難免會出現一兩秒鍾的卡頓,這就是JAVA虛擬機在強制回收其他APP佔用的內存,而如果手機的硬體不夠強大,安卓手機則根本無力回收這些被佔用的內存,最終造成手機一直卡頓直到死機重啟。

三、安卓APP渣優化,由於安卓系統的開源,大多數軟體開發商都不嚴格按照安卓系統軟體的設計規定去執行,APP越做越臃腫,再高的硬體也被渣優化的安卓APP吃掉了。

『肆』 如何在Linux平台下編譯android工程

我是在windows下做開發的,但是編譯環境還是在linux上。。大體的步驟如下:
1.首先在windows環境下編寫工程(eclipse下編寫android工程)
2.打開linux開發環境(tcl平台:\\10.120.90.207\longc\workspace\code\project\kernel\android\JB)
3.將運行環境的腳本文件運行./evnsetup:配置android運行環境
/JB/build/
找到envsetup.sh
運行.envsetup.sh(source envsetup.h或./envsetup)
所有操作都在終端完成
4.將工程文件拷貝到指定目錄下(TCL平台下的自帶程序在package\TCL_Apps目錄下)
5.刪除一些文件
保留/res,/src,AndroidManifest.xml三個文件
創建Android.mk(makefile文件,linux下用makefile文件來集成一些命令,運行程序的指令和設置都在此處)Android.mk的編寫
6.編譯
進入工程文件目錄
輸入mm命令進行編譯。
7.生成apk文件,編譯完成

『伍』 如何把linux下的軟體的源代碼直接編譯到安卓平台

直接編譯需要軟體才可以反編譯出來,直接把軟體開發出來,封裝成適合安卓平台的app,只能是這個思路。

『陸』 將LINUX軟體編譯成安卓可用的APK

android雖然是基於linux的,但是他們並不是二進制兼容的。
android的工作方式是,在linux系統中運行一個基於qemu的虛擬機,在虛擬機中運行java虛擬機。android程序的api還是以java為主的,所以android是不支持J2sejava程序的。

所以一個隨便的linux程序代碼是不可以編譯成android軟體的。

如果你想在android手機上運行python perl 或者shall腳本的話,是可以的,在android上有專門的終端什麼的。

『柒』 android代碼在哪些linux平台運行編譯,有人說只能在Ubuntu下編譯

所有linux系統中都可以,在windows中編譯的話可以下載telnet程序或secureCRT程序用linux中同樣的命令進行android源碼的編譯。

『捌』 如何在linux下編譯windows版android sdk-czxttkl

1.下好Android源碼
2.在Terminal中輸入:$ sudo apt-get install mingw32
tofrodos

mingw32是一個交叉編譯器,
tofrodos用於unix和dos之間命令轉換

映像中交叉編譯器的定義是能跨平台編譯某些代碼所需要的東西.

其他的還得仔細研究

3. 先編譯好默認的android平台和linux版的sdk,在Terminal中跳轉到android源碼目錄,輸入:

$
. build/envsetup.sh
$ lunch full-eng
$
make

$
. build/envsetup.sh
$ lunch sdk-eng
$ make
sdk

若不先編譯android默認的平台和linux版的sdk,很可能產生不可預知的錯誤,例如:

Error:

Install:
out/host/windows-x86/bin/sdklauncher.exe
make[1]: *** No rule to make
target out/host/linux-x86/bin/emugen,
needed
by
`out/host/windows-x86/obj/STATIC_LIBRARIES/
lib_renderControl_dec_intermediates/renderControl_dec.cpp'.
Stop.
make[1]: Leaving directory
make: *** [winsdk-tools] Error
2

4.正式開始編譯windows版的android
sdk。在Terminal中跳轉到android源碼目錄,輸入:

$ . build/envsetup.sh
$ lunch
sdk-eng
$
make win_sdk

5.最後生成的sdk位於:
ANDROID_SOURCE_ROOT/out/host/windows/sdk

『玖』 自己可以編譯安卓源碼嗎

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」

其中[email protected]為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:


這里寫圖片描述

執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

    結束吧

    到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    熱點內容
    吃雞最佳配置怎麼看 發布:2025-05-14 00:25:32 瀏覽:225
    oraclesql效率 發布:2025-05-14 00:17:40 瀏覽:601
    cifjava代碼 發布:2025-05-14 00:10:34 瀏覽:212
    泰國電視劇密碼在哪裡看 發布:2025-05-13 23:54:22 瀏覽:481
    安卓用郵件下完保存在哪裡 發布:2025-05-13 23:52:31 瀏覽:479
    解壓美食蛋糕 發布:2025-05-13 23:36:25 瀏覽:354
    php含有字元 發布:2025-05-13 23:32:08 瀏覽:184
    如何找出蘋果手機已連接wifi密碼 發布:2025-05-13 23:22:52 瀏覽:264
    ie10緩存 發布:2025-05-13 23:10:09 瀏覽:459
    安卓手機圖標怎麼設置提示 發布:2025-05-13 23:07:56 瀏覽:810