導航:首頁 > 源碼編譯 > 安卓項目編譯運行原理

安卓項目編譯運行原理

發布時間:2022-09-19 18:18:33

⑴ 請問學android開發有必要學編譯原理嗎

知道編譯就好,幫助不是很大,主要還是多學習android的sdk吧!

⑵ 安卓運行機制是什麼 安卓手機的工作原理是什麼

android基於Linux內核,很多系統也都基於Linux內核。但是android的特別之處除了開發上的特點以外,還有一個就是程序在運行時的行為和以往我接觸到的程序運行機制有很大不同。在傳統PC機或者其他一些手機上,用戶對應用程序有絕對的掌控權,在應用程序的系統菜單上選擇「退出」或者「關閉」之類的選項會直接殺死進程,而在android系統中不是這樣的。在android中,應用程序的生命周期並不是由應用程序自身直接控制的,而是由系統,當系統需要釋放內存來運行新進程或者保證某些後台進程和前端進程順利執行的時候才會釋放相應應用程序的資源,這個釋放過程有一個重要性的層次。
android中進程的層次如下(重要性由高到低):

1、前端進程。顧名思義,前端進程就是目前顯示在屏幕上和用戶交互的進程,在系統中前端進程數量很少,而這種進程是對用戶體驗的影響最大,只有系統的內存稀少到不足以維持和用戶的基本交互時才會銷毀前端進程。因此這種進程重要性是最高的。

2、可見進程。可見進程也擁有一個可視化的界面,只是目前不是最上層界面(最上層界面在前端進程裡面),可見進程一般調用了OnPause(),可見進程比前端進程重要性低,但是在交互方面影響還是很大,因為用戶可能隨時切換過去,所以系統不會輕易銷毀它。

3、服務進程。一個服務進程就是一個Service,它調用了startService,就是UNIX中說的守護進程,對用戶不可見,但是保證了一些重要的事件被監聽或者維持著某些狀態,比如網路數據傳輸、後台音樂播放,這類進程在內存不足且為了保證前端交互的順利進行的時候被銷毀。

4、後台進程。這里叫後台進程可能會和一般意義上的後台進程混淆,要說明的是,android里的後台進程是調用了OnStop()的,可以理解成用戶暫時沒有和這個進程交互的願望,所以這里後台進程有點「待銷毀」的意思。

5、空進程。這是一種系統緩存機制,其實就是個進程的外殼,當有新進程創建的時候,這個空進程可以加快進程創建速度,當系統內存不足的時候,首先銷毀空進程。
android中進程重要性層次

⑶ 如何編譯一個精簡的Android系統

本次試驗使用的android源碼是4.2,編譯的架構是mini-mips。

一、所做的工作
1、修改build/target/proct/mini.mk,去掉一些不必要的模塊(例如Phone、DownloadManager等)
2、修改SystemServer.java,屏蔽一些service,讓系統能夠啟動起來(例如,Location Manager、Telephony Registry)
3、修改dalvik/vm/native/dalvik_system_Zygote.cpp,注釋掉因為檢查不到外部存儲而導致dalvik abort的地方 (這是googel的一個bug,在2013年1月份已解決,如果用這以後的代碼不用修改此處)
4、修改WindowManagerService.java,把發送BOOT_TIMEOUT消息的時間改為0(之前為30秒)

二、系統優化後的效果(驗證工作均在mips模擬器上進行)
1、節省運行內存,下面是全編譯與mini編譯的內存使用狀態的對比
1)full build
MemTotal: 499360 kB
MemFree: 242064 kB
2)mini build
MemTotal: 499360 kB
MemFree: 395192 kB

2、縮短開機啟動時間
在虛擬機上的啟動時間
1)full build-29秒
2)mini build-14秒

3、只啟動home程序,其餘的應用程序均被移除

三、保留android的開發環境
1、adb,ddms,apkinstall等,都能正常工作
2、在eclipse中編寫的android應用程序能夠運行在該mini-android之上

四、開機自動啟動指定應用程序
本次測試使用Gallery.apk應用程序,修改其源碼後可以實現隨系統的啟動而自動啟動的功能。

⑷ 安卓開發怎麼樣需要學習什麼知識

熟悉Android官網

訪問官方的Android Developer網站。老實說,閱讀整個網站以了解生態系統以及與Android相關的各種解決方案,想法和技術,這一點非常重要。你不需要理解並記住所有內容,但是在後續開發的時候如果遇到問題可以知道自己在哪裡能找到解決方案。

了解編程語言

構建Android應用程序歸結為兩種主要技能/語言:Java和Android。Java是Android中使用的語言,但是Android部分包括學習XML以設計應用程序,學習Android的概念以及以Java編程方式使用這些概念。


Android是一種基於Linux的自由及開放源代碼的移動操作系統,而Linux是C與C++的天下,所以Android的底層是支持C/C++的。所以Android平台上開發所採用的編程語言主要兩種方式:
Android app開發主流語言就是Java語言,Java語言最大的特性就是提高了軟體的交互可能性,可以說安卓手機幾乎所有應用程序都是利用Java語言來進行編寫的。
基於NDK的C編程。C語言是一種結構化語言。它層次清晰,便於按模塊化方法安排程序,易於調試和保護。C語言的體現才能和處理才能極強。它不只具有豐盛的運算符和數據類型,便於完成各類雜亂的數據結構。

一旦你學習了Java和XML (XML很容易上手,你應該在編寫應用程序時學習這門語言,而不是像學習Java那樣事先學習),你需要學習如何使用Android原理將這兩種語言連接起來。

下載Android應用開發所需的工具

首先,你需要創建開發環境,以便你的桌面准備好支持Android開發目標。因此我們需要Android Studio和Android SDK。

Android Studio是一個IDE。它代表集成開發環境,它本質上是一個界面,你可以在其中輸入代碼(主要是Java或Kotlin),並訪問開發所需的所有不同工具。Android Studio允許訪問來自Android SDK的庫和api,從而允許訪問操作系統的本地函數。還可以使用Gradle將應用構建到APK中,通過虛擬設備(模擬器)測試它,並在運行時調試代碼。


除此之外,在做應用開的時候我們還有更多的選擇,例如,APICloud低代碼開發平台,支持多端開發,提供了標准化的開發平台,平台基於構建多年的MADP(移動開發平台),aPaaS能力與自動化、流程化模式,在開發app的時候可以減少大量重復性工作,並有效提升30%-60% IT項目效率也是進行app開發的絕佳選擇。

app開發平台

1.Deep Engine

Web工程師使用HTML5等標准Web技術開發擁有原生體驗和原生功能的APP,Deep Engine使用半翻譯式原理,運行中將Web翻譯成Native API,通過領先的混合渲染技術,使交互更加流暢,界面更加優質,全方位優化至細節,打造不打折的用戶體驗。Deep Engine支持上千款終端完美適配的能力,大大縮短了開發周期,簡單又跨平台的編碼方式,幫助你加速APP發布,縮短成熟周期。

2.Superwebview
SuperWebView可使Web工程師和Native工程師免去繁瑣的編譯與聯調工作,通過雲端配置,為每個應用一鍵生成跨平台專屬SDK,快速嵌入已有原生app中,並且基於SuperWebView衍生的子應用可以和原生app一樣功能強大。

3.代碼自動生成
基於可視化的產品設計流程生成前端代碼,達到低代碼開發效果。在符合流程標准和規范的前提下,自動生成的前端框架代碼。

⑸ 安卓APP的主要開發原理以及其主要過程是什麼

開發原理:

Android應用程序是用Java語言編寫的。編譯過後的位元組碼,以及應用程序要求的其他數據和資源文件,通過aapt工具被綁定在一起,稱為 Android包,這是一個帶.apk後綴的檔案文件。這個文件也是用戶下載到他們設備上的文件。所有的代碼在一個單一的.apk文件中,組成一個「應用程序」。

主要過程:

1、需求分析:

大部分創業型項目在這個階段只是一些比較抽象的想法。有一份相對完善的需求文檔,不僅有助於創業者自身對項目的理解和周全性分析,如果項目是交由設計公司去完成的話,也更有利於對方准確把握項目的定位和商業模式,以便給出專業的建議和解決方案。

2、原型設計

接下來會根據上面提到的具體需求文檔,項目經理進行會進行原型圖的設計。

3、UI設計

原型圖經過反復推敲修正後,UI 設計師會進行UI界面相關的配色設計、功能具象化處理、交互設計、以及各種機型、系統的適配。UI 設計師經過多次與項目經理溝通修改後,最終的到定稿的高保真設計圖。

4、開發

經過以上幾個過程之後,會正式進入到開發階段。

5、測試調試

APP 功能開發完成之後,測試人員會對整項目進行系統性測試。這個環節會調動起項目組內所有人相關人員。而測試這個環節的重要性不亞於前期功能的規劃,如果團隊沒有經過專業系統性訓練的測試人員,很可能會導致項目出現與設計初衷存在落差,以及遺漏下一些邏輯上的坑。

6、發布app

經過至少兩輪的內部測試以及小范圍外測(或者完成滿足測試要求的周期)後,會進行最終版本的上架。

(5)安卓項目編譯運行原理擴展閱讀

APP開發工具

1、MOTODEV Studio for Android

MOTODEV Studio for Android,這是基於Android的開發環境,為開發者們提供新的MOTODEV App Accelerator Program使他們可以開發出更適合摩托羅拉Android手機的應用程序。

2、J2ME開發插件 Mobile Tools for Java

Mobile Tools for Java (MTJ) 是Nokia公司開發的一款 Eclipse插件,用於支持 Java 手機應用程序開發。其前身就是大名鼎鼎的 EclipseME。

3、apk文件修改工具 Root Tools

RootTools是一個新的工具軟體,Android開發者可以在這一工具軟體的支持下,對.apk格式的文件進行再次修改,讓程序表現更加出色,滿足用戶的需求。Root Tools裡面自帶有很多工具,比如BusyBox,它裡面集成壓縮了很多Linux的工具和命令,這樣軟體開發者在對....

4、IDEA的Android開發插件 idea-android

idea-android 是在 IDEA 集成開發環境中開發 Android 應用程序的插件。

參考資料

網路-app開發

安卓系統原理

Android 是運行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。Bionic/Libc/Kernel/ 並非標準的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。
Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網路堆棧(Network Stack),驅動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。

⑺ 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,因對終端設備(慢速設備)的阻塞寫操作也會拖慢速度。推薦內存文件,這樣發生錯誤時,能夠查看。

⑻ Android源碼編譯是干什麼

編譯Android系統。

⑼ 程序的編譯過程是怎樣的程序的解釋過程是怎樣的

編譯器首先用掃描程序掃描源代碼,然後用語法分析程序分析得到語法樹,然後經過語義分析、優化處理,最後通過代碼生成程序得到目標代碼的文件。
整個編譯過程就是(掃描-語法分析-語義分析-優化-目標代碼生成)。通常生成的是匯編代碼,機器代碼,可以直接執行,不需要解釋。
而解釋的過程只使用與解釋型語言,這種語言只編譯成一種中間文件,在運行時通過虛擬機讀取中間文件進行解釋運行。這種語言天生速度比較慢,但可以達到所謂的跨平台效果。
如果想深入了解,推薦看一看《編譯原理》,如果只是想大概了解,推薦看一看《編譯原理》的目錄~呵呵

⑽ 編譯器的工作原理

編譯 是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的EXE,
所以我們電腦上的文件都是經過編譯後的文件。

閱讀全文

與安卓項目編譯運行原理相關的資料

熱點內容
美團的伺服器是什麼 瀏覽:357
axure原型設計精髓pdf 瀏覽:376
svox文件夾有用嗎 瀏覽:506
怎樣才可以給軟體添加密鑰 瀏覽:587
光纖通信原理pdf 瀏覽:207
c需要用什麼編譯器 瀏覽:702
python設置斷點調試 瀏覽:313
pc手柄怎麼連接安卓 瀏覽:33
dll解壓不成功 瀏覽:343
連接地址伺服器失敗是什麼 瀏覽:399
台達dvp14ss2編程電纜 瀏覽:133
單片機開發板設置技巧 瀏覽:343
阿里雲伺服器怎麼配置git 瀏覽:414
androidcameraid 瀏覽:430
活塞式空氣壓縮機原理 瀏覽:791
vt編輯編制編譯 瀏覽:807
抖音優質創作者推薦程序員 瀏覽:75
攝像機多控神器讓拍攝輕松解壓 瀏覽:422
杭州的伺服器地址 瀏覽:277
全醫葯學大詞典pdf 瀏覽:809