经过一个半月对Android camera源码的学习和思考,这段时间趁着机会分享一下在学习的过程。过程是艰辛的,不敢保证学习的路线是正确的,很多东西都是出于摸索之中,废话不多说,直接进主题。
一、开发环境的搭建
做Android的偏底层点的开发,一般都需要在LINUX环境下进行开发和调试,因为Linux的强大与方便,很多开发在Linux下是比较简单的,所以广大程序员们选择在Linux下进行开发和调试。基于上述原因,我们需要安装Ubantu双系统,平时使用Windows系统,开发的时候使用Linux系统,安装Ubantu的过程就不多讲,在此附上一个链接,可以根据该链接装Ubantu(http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html),在安装过程中有可能安装失败,这时候不要慌,可以在网上搜索问题,然后解决问题,但是有些问题还是需要提及一下的,有些问题是硬件的问题,例如我们用U盘装系统的U盘烧录的系统,安装过程和正常的过程完全一样,但是安装之后就是启动不起来,这时候就需要考虑是U盘的问题,此时可以考虑换个U盘烧录系统然后重新安装(这个坑是我在给一个同事装Ubantu双系统的时候遇到的,当时用的是另一个同事的U盘,但是用来装系统的时候安装过程完全正确,但是安装好之后就是进不去系统,重新试了好多次都是进不去,期间还出现了很多问题,后来实在没办法就换个U盘装,这次一下就安装成功了),唉,说多了都是泪,以后再进行此类操作的过程中还是多思考问题出现的地方,多想想解决办法。
另外提示一点,在安装Ubantu系统之前需要分配较大的空间,因为Android源码本身就比较大(大约三十个G左右,编译完成之后估计得八九十到一百G,而且还需要安装Android Studio,subline,SlickEidt软件等也需要占用不少空间),所以建议大家多分一些空间给Ubantu系统,大约300G差不多,当然越多越好。
二、Android源码的下载
Android源码的下载可以直接从Google官网上下载,不过这需要翻墙,翻墙的话可以使用蓝灯,傻瓜式的软件,而且网速还可以,另外你也可以从清华镜像上下载Android源码。
这里需要注意几个问题:
第一点,先确定自己手上的设备可以使用什么版本的源码,这个在谷歌官网上可以查得到,在此附上链接(https://source.android.com/source/build-numbers#source-code-tags-and-builds),不同版本的源码只能刷进对应版本的机器,这个必须要注意(这是本人曾经遇到的一个坑,当时下载的是6.0源码,下好之后编译也完成了,准备刷机,没想到没有nexus6的机器,只有nexus6p的机器,这个当时也没有人和我讲这个,所以我特别提醒一下。没办法只好重新从谷歌官网上下载7.1.1的源码,然后编译刷机刷进nexus6p中,这个坑花了我两三天的时间)
第二点、源码下载好之后需要下载对应版本的下载专有二进制文件,可以参考链接:https://source.android.com/source/building
1、从Google官网上(https://source.android.com/)下载Android源码
点击右上角的获取源码进入之后按照说明下载即可
2、从清华镜像下载Android源码
可以参照这个博客:http://blog.csdn.net/cxq234843654/article/details/52301759
三、编译Android源码
很多人认为谷歌开发的Android源码应该不会有什么问题,这个你就大错特错了,其实每个设备不同,其所安装的软件或者库的不同都会造成源码的编译失败,故我们需要编译Android源码,编译好之后进行刷机验证。
编译过程参考:https://source.android.com/source/building
在编译的时候可能会遇到不少问题,每个人遇到的问题都有可能是不同的,这个需要区别对待。
四、刷机
在刷机之前需要将设备的加入到Ubantu系统之中,按照以下步骤:
A、开启Android设备,用USB数据线连接到Ubuntu系统。
B、启用设备的USB调试模试
C、在terminal中输入lsusb命令就可以查看挂载在系统上的USB设备了
D、配置
根据Google官方文档指示,Ubuntu系统需要新建一个用来配置设备USB规则的文件。
A、打开Ubuntu终端 执行命令: gedit /etc/udev/rules.d/51-android.rules
有时候使用这个命令需要提前进入该目录下,然后找到.rules文件,有可能刚不是51-android.rules,但是在该目录下会有一个.rules文件,另外,有时候可能打开这个文件进行修改的时候修改不了,所以此时需要使用:sudo gedit /etc/udev/rules.d/51-android.rules命令,给予权限,然后修改。
B、添加的内容模板如下:
SUBSYSTEM==”usb”, ATTR{idVendor}==”0bb4”, MODE=”0666”, GROUP=”plugdev”
Ubuntu不需要GROUP=”Plugdev”(Unix需要)结点,所以模板是只需要
SUBSYSTEM==”usb”, ATTR{idVendor}==”0bb4”, MODE=”0666”
在添加时只需修改模板ATTR{idVendor}==”0bb4” “”中的内容即经销商ID(Vendor ID)即可。
另外需要提醒的是在刷机之前手机是需要解锁的,解锁可以查看连接:https://source.android.com/source/running,有时候解锁的时候自己的电脑解不了手机的锁(本人亲自遇到过这个奇葩问题,到别人电脑上一次就成功,自己的电脑试了好多次都没成功,郁闷了好久)
刷机是比较简单的,首先进入下载的Android源码的根目录下面,进入out/target/product/angler目录,然后连上手机,使用命令:adb devices查看当前设备是否连接上了,如果连接上了会显示连接信息的,接下来使用命令: adb reboot bootloader进入fastboot 模式,接着使用命令:fastboot flashall -w 将所有的东西刷入手机,也可以使用命令:fastboot flash boot boot.img刷入boot
fastboot flash -w system system.img刷入system
fastboot flash userdata userdata.img
fastboot flash cache cache.img
fastboot flash recovery recovery.img
其实有时候只需要使用fastboot flash -w system system.img刷入system即可将下面的几个全都自动刷进去(一般在使用命令fastboot flash -w system system.img的时候会看到一些刷入信息的提示)
刷好之后使用命令:fastboot reboot重启手机,然后就可以看到刷入的新系统了(第一次刷机还是有点小激动的)。
整个刷机过程时间不长(这需要看设备,如果机器比较垃圾的话可能时间不短),大概几分钟就可以刷好。
五、使用Android studio阅读源码
在使用Android studio阅读源码之前需要先将源码导入Android studio中,过程如下:
1、进入源码的根目录依次执行:
source build/ensetup.sh
make idgen && development/tools/idgen/idgen.sh
2、在源码根目录下会生成android.ipr, android.iws和android.iml三个文件
android.ipr一般保存了工程相关的配置,如modules和modules libraries的路径,编译器的配置,入口点等
android.iws包含工作区的个人设置,比如打开过的文件,版本工具的配置,本地修改历史,运行和Debug的配置等
android.iml用来描述modules。它包括modules路径,依赖关系,顺序设置等,一个项目可以包含多个.iml文件
3、在Android Studio中打开源码根目录下的android.ipr文件然后选择需要打开的目录即可阅读源码。
至此,前期的准备工作差不多完成了,接下来将分享在这一个半月期间对Android camera 源码的学习过程。