研發Android Framework所需的基礎工具和C++基礎知識

來源:互聯網
上載者:User

本文均屬自己閱讀源碼的點滴總結,轉賬請註明出處謝謝。

歡迎和大家交流。qq:1037701636 email:gzzaigcn2012@gmail.com

註:Hardware:A31,Software:Android4.2.2   

 

    俗話說,良好的開頭是成功的一半。研究Android龐大的系統代碼(話說編譯完4.2.2的源碼大概也就10多個G吧),工具上至少要高大上,心態上必要低奢內,本著Read The Fucking Code的不死精神,大腳大腳的向前走,死不要臉的讀下去。然後,然後,最終你就會看到那陽光是多麼的燦爛,撥開雲霧見天日的優越感瞬間會沖刷著你的最強大腦。

 

一.寫一下屬於我的Android4.2.2 FW等底層開發所需的基本工具與手段:

A.window級使用者:不建議虛擬機器,最好的機子編譯起來也會比較費時,恐怖的源碼啊。一般企業級裡面都會配有一台伺服器,開個50G的空間,安裝個Ubuntu12.04 64bit的虛擬機器,100G的空間基本就OK了。故使用的手段時本地Eclipse+SourceInsight+Cygwin+SecureCRT(SSH), 遠程配上Samba伺服器,加上那大的要死的Android源碼;

 

B.Linux級使用者:一般推薦直接PC上安裝個Ubuntu系統,編譯會省去很多時間的哦,32bit的10.04和64bit的12.04都是Google官方推薦的。Ubutnu+Wine+SourceInsight基本上也就是絕配了,話說真正的Linux大神都是Vim+Emacs+Eclipse是其最喜歡的。

 

遠程伺服器端配置Samba的過程記錄如下:

step1:Ubuntu卸載、安裝Samba命令。

卸載:sudo apt-get remove  samba-commonsudo apt-get remove  smbclientsudo apt-get remove  samba安裝:sudo apt-get install sambasudo apt-get install smbfs

 

step2: Samba的配置,建立一個共用的目錄。

[A31_Android_SDK]                  //windows下登陸smb伺服器會顯示出的檔案名稱path = /home/android4.2.2 //指定共用目錄路徑,若不存在,則自己建立available = yesbrowseable = yespublic = yeswriteable = yesguest ok =  yes


step3: Window下開啟一個網路檔案,方便SourceInsight的建立工程。

win7下的流程是電腦——>檔案——>添加一個網路位置——>伺服器IP/xxx(要共用的目錄名),列如:\\192.168.1.217\A31_Android_SDK。


注意點:

如果win下面出現xxx不允許訪問,您可能沒有許可權使用網路資源,,,等時,可採用cmd啟動windows命令列net  use  *  /del   /y  允許該命令即可。

 

C. 對SourceInsight的使用,Android源碼量大,故如果手動一次完全匯入的話,在同步源碼的各種符號連結時基本就是會報出記憶體不夠的錯誤。相比4.2.2的源碼,2.3的可以直接建立工程完全匯入,4以上的源碼建議將Framework, HardWare , Devices和System這幾個匯入即可,同步所需的時間不會很久。

 

二. C++的基礎開發知識在Android FrameWork層中的重要性

由於當初的C++學的比較粗糙,基本沒有OOP的思維,以前完全是按C的流式理念在編碼,故自己給自己補充了一些在FrameWork中中出現的C++的基礎知識。

 

2.1 C++中的類,成員變數和成員函數

類:Class Base,具備構造和解構函式,擁有Public,Protected,Private等成員屬性。

對象: Base mBase;

成員變數:原來標準的變數名編碼的習慣都是mxxx開頭的;

 

2.2 C++中的類模板和函數模板

C++的類模板,也稱之為參數化類別,其在Android裡面無處不在,典型的如SP,Binder類模板的基礎結構如下:

template <class T1, class T2, class T3>Class Base {};

Base類裡面的資料成員,成員函數的某些資料類型會由T1,T2,T3等來標定 

類似的函數模板

template <typename T>T fun(){    return 0;} 

 

2.3 C++符號的重載

在FW裡面用的比較多的運算子號重載主要是賦值=,指標->等,在SP裡面用的比較經典。

函數類型 operator 運算子(參數表)

{

函數的實現;

}

 

2.4.C++中”虛“的力量

基類、繼承、派生:Class Derived:Public Base,兒子與父親的關係,通過繼承屬性,衍生類別可以使用決定使用父類成員的範圍。

虛函數:一般在基類中帶有virtual的函數,虛函數的力量在於實現了C++中的一個多態的特性,使得對象在運行時才去決定調用的實際成員函數。

純虛函數:在虛函數的基礎上直接賦值為=0;

抽象類別:帶有的成員函數都為純虛函數,主要是定義介面,讓繼承的子類都實現,否則子類也只能成了抽象類別了。抽象類別不能new對象,可以使用指標和引用等。

 

 2.5.C++中的這個this

 C++中的this是個比較牛逼的東西,隨著對象的產生而就一直存在,無論你訪問哪個成員函數,編譯器都會自動將this指標作為參數傳入到對應的函數中。

 

2.6 C++中的結構體Struct

 C看的多了,亦不知C++的結構體基本就是類的概念了,C++的結構體多作為Class的內部類,結構體內可以帶有成員函數。與類的區別就在於它的所以成員都是預設下都是Public的,區別與類的預設Private。

 

2.7.C++對象在記憶體中的布局

這個屬於C++較深層次的東西,從C的角度來理解,一個對象在調用建構函式時,預設開闢一個記憶體空間來維護這個對象,類的對象中是沒有關於普通成員函數的指標的,只有成員變數還有虛表指標。

 

先記錄到這裡,後續有新的內容再補充。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.