⑴ 編譯android源代碼的目的是什麼,編譯後會得到什麼東西
定製嘛,就是按你自己的要求設定方案,因為android是開源的,而且google提供了很完備的開發框架,有java基礎的人可以很快上手。
源碼定製估計是現在的android的市場一個發展方向,因為以前都是山寨機,軟體硬體一個樣,而現在智能機在硬體方面基本是差不多的,而android軟體框架也是一樣,但是開發比較簡單,門檻很低,所以一些公司提供了定製服務,改動下源碼提供個性化服務。個人理解,你可以繼續網路了解下。
至於你想學開發android,先看下java,應用層是用java開發的,而且你以後也可以自己開發些小應用鬧著玩。參考書方面很多,什麼android應用開發揭秘啊,adk開發範例大全啊,精通android啊什麼的,可以在網上找電子檔或者別人的教學視頻,很多的。
⑵ Android源碼編譯在真機上運行時為什麼要同時編譯驅動
模擬器也需要驅動啊,是goldfish,真機沒有驅動(針對硬體的),運行不起來的。源碼是不帶驅動源碼的,驅動源碼要另外下載,源碼里的是已經編譯好的kernel。
⑶ 為什麼安卓系統的手機會越用越卡
若是要回答這個問題,我們需要追溯到上個世紀,去尋找智能手機的起源。
1965 年,貝爾實驗室、通用電氣和麻省理工學院開始合作開發一套能夠兼顧易用性和強大性的操作系統,經過六年時間的通力協作,貝爾實驗室的一名軟體工程師 Ken Thompson 在休假期間完成了一個名為 Unix 的系統編寫,並最終成為貝爾實驗室的母公司、美國電信巨頭 AT&T的商業產品,並啟動了長達數十年的版權運作。盡管後來有著許多變種,但是從嚴格意義上來講,Unix 不是一個開源的操作系統。
1991 年,一個芬蘭的大學生、同時也是計算機黑客的 Linus Torvalds,他對 Unix 十分著迷,但是買不起運行 Unix 需要的工作站,所以他就嘗試自己以同樣的編程方式寫了一個名為 Linux 的操作系統,並在自由軟體之父 Richard Stallman 的精神鼓舞之下,將 Linux 加入到了自由軟體基金(FSF)當中,允許所有人使用、拷貝、修改甚至銷售 Linux 系統,同時承擔開源義務,禁止把 Linux 封閉化的企圖。
之所以要如此大費周章的講述 Unix 和 Linux 兩個操作系統的故事,是因為 iOS 和 Android,正是分別基於 Unix 和 Linux 而衍生出來的作品。也就是說,是 Unix 和 Linux 的兩種特性,造成了 iPhone 與 Android 手機在使用體驗上的巨大差異。
喬布斯曾經邀請 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 的這種天生短板,又催生出了一個「手機調校」的市場,並帶動了新的產業鏈。
「手機調校」的第一級,在於系統層。在 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 手機永遠像一個半成品或工程機的原因。
⑷ 想學安卓開發,先從java入手,要用什麼編譯器
編譯器的話用eclipse+ adt + sdk就行了。
你有c++基礎, 學java基礎的話會很簡單的。不要有壓力。
⑸ Android 程序為什麼不直接編譯成機器碼
編譯單元無法確定要訪問的邏輯地址,也就無法轉為機器碼,
必須由鏈接過程分配地址。 先編譯後鏈接,
應該是易於編譯器的實現和擴展並且能夠增加靈活性和多文件項目的編譯效率
⑹ 請問怎麼編譯安卓軟體
呵呵,你學過java吧,基本功就有了,安卓軟體是用java來寫的~不過我覺得安卓軟體是不用編譯的,因為裡面的主程序是格式化的xml文件,在軟體成形的過程中只是把一些文件打包起來就行了,你可以試下把安卓軟體的後綴名改成zip,就可以看見源程序和文件了~然後呢,你要想做安卓軟體的話,先搭建一個安卓的開發環境,用到的東西有Myeclipse這個軟體(你應該知道的),然後到網上下載安卓開發的SDK即開發字典~有一本叫安卓開發案例的書,可以看下,另外網上有很多的視頻教程~PS:我自己之前只寫過一個安卓的HELLO,WORLD!,由於大一事情比較多就沒有繼續研究了,如果你有問題可以CALL我哦,我們一起學~
⑺ 安卓源碼編譯成功為什麼不能運行
編譯:
1. 初始化:
source build/envsetup.sh
2. 選擇target
lunch
然後選擇aosp_arm
3.
make -j4
等待大概2個小時,就可以順利編譯完成。
模擬器運行
直接運行emulator,會出現如下錯誤:
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
原因是文件路徑沒有設置,解決辦法添加絕對路徑:
out/host/Linux-x86/bin/emulator -kernel prebuilts/qemu-kernel/arm/kernel-qemu -sysdir out/target/proct/generic/ -system out/target/proct/generic/system.img -ramdisk out/target/proct/generic/ramdisk.img -data out/target/proct/generic/userdata.img -sdcard sdcard.img -scale 0.7 -memory 512 -partition-size 1024
然後運行模擬器
⑻ 為什麼android源碼還需要編譯
android源碼中有著許多的源代碼,其中有c和c++編寫的也有java編寫,這些代碼需要通過重新編譯後才能在android機器上運行的!當然你修改源碼,改完源碼後還是需要對源碼進行編譯的編譯的!android系統源碼的整體編譯需要很長時間,所以一般否是分開來編譯的!這樣縮短了編譯的等待時間,而且也實現了不同人對不同板塊代碼的修改和編譯的分工了!