研发Android Framework所需的基础工具和C++基础知识

本文转自:http://blog.csdn.net/gzzaigcnforever/article/details/20565037

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。

欢迎和大家交流。qq:1037701636 email:[email protected]

注: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命令。

[html]  view plain copy
  1. 卸载:  
  2. sudo apt-get remove  samba-common  
  3. sudo apt-get remove  smbclient  
  4. sudo apt-get remove  samba  
  5. 安装:  
  6. sudo apt-get install samba  
  7. sudo apt-get install smbfs  

 

step2: Samba的配置,创建一个共享的目录。

[html]  view plain copy
  1. [A31_Android_SDK]                  //windows下登陆smb服务器会显示出的文件名  
  2. path = /home/android4.2.2 //指定共享目录路径,若不存在,则自己创建  
  3. available = yes  
  4. browseable = yes  
  5. public = yes  
  6. writeable = yes  
  7. guest 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类模板的基础结构如下:

[html]  view plain copy
  1. template <class T1, class T2, class T3>  
  2. Class Base {};  

Base类里面的数据成员,成员函数的某些数据类型会由T1,T2,T3等来标定 

类似的函数模板

[cpp]  view plain copy
  1. template <typename T>  
  2. T fun()  
  3. {  
  4.     return 0;  
  5. }   

 

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的角度来理解,一个对象在调用构造函数时,默认开辟一个内存空间来维护这个对象,类的对象中是没有关于普通成员函数的指针的,只有成员变量还有虚表指针。

 

先记录到这里,后续有新的内容再补充。


你可能感兴趣的:(Android源码)