本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。
欢迎和大家交流。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-common sudo apt-get remove smbclient sudo apt-get remove samba 安装: sudo apt-get install samba sudo apt-get install smbfs
step2: Samba的配置,创建一个共享的目录。
[A31_Android_SDK] //windows下登陆smb服务器会显示出的文件名 path = /home/android4.2.2 //指定共享目录路径,若不存在,则自己创建 available = yes browseable = yes public = yes writeable = yes 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类模板的基础结构如下:
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的角度来理解,一个对象在调用构造函数时,默认开辟一个内存空间来维护这个对象,类的对象中是没有关于普通成员函数的指针的,只有成员变量还有虚表指针。
先记录到这里,后续有新的内容再补充。