Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧
因为面对的是新手,这篇文章可能讲得比较宽泛,包括了硬件的选用,系统的选用,是否该用虚拟机,如何配置linux,linux的一些使用技巧,调试环境的搭建,脚本、工具的制作等等。一、硬件因为系统和内核的源代码是以千万行乃至亿行代码来算,所以同一台计算机完整编译一次系统的时间,可比插桩要来得多得多,想提升编译的效率,即降低编译所花的时间,拥有一台高配置电脑必不可少。在ram即内存足够的前提下,cpu速
因为面对的是新手,这篇文章可能讲得比较宽泛,包括了硬件的选用,系统的选用,是否该用虚拟机,如何配置linux,linux的一些使用技巧,调试环境的搭建,脚本、工具的制作等等。
一、硬件
因为系统和内核的源代码是以千万行乃至亿行代码来算,所以同一台计算机完整编译一次系统的时间,可比插桩要来得多得多,想提升编译的效率,即降低编译所花的时间,拥有一台高配置电脑必不可少。
在ram即内存足够的前提下,cpu速度起决定性作用,硬盘速度也十分重要;编译速度取决于cpu线程数&cpu单线程性能&硬盘速度
所以多线程高性能的cpu+ssd可以大幅降低编译所花的时间。
我自己的例子:
i3-2350M主频2.3G,内存10G,2核心4线程,linux安装于ssd,编译时使用5个线程,总共需要约4个小时才能完成编译
i7-4770主频3.4G,内存16G,4核心8线程,linux安装于ssd,编译时使用9个线程,总共只需要约40分钟即可完成编译
这可是节省了3/4的编译时间(虽然编译只是适配的一部分,编译后的调试也很花时间),因为从零开始编译适配需要多次重复编译,所以往往要花1个月甚至更多的时间,那么高配置的计算机节省下来的编译时间就非常可观。
假如进行了100次编译,那么高性能计算机就可以为你节省300小时,即12.5天
有句话说得好,能用钱解决的事都不叫做事,如果有条件的话,当然I7+16GRAM+SSD是最理想的。
达不到的话也没事,最多就是多花几倍时间罢了,只要有耐心和毅力,没什么搞不定的。
二、linux的选择与安装
linux开发环境的安装配置,这里就不多说了,blog里有其它好几篇文章专门介绍,选一个你喜欢的系统就行了,也不一定用最新的系统,老的系统稳定好用就行,当然笔者推荐Vm11.0+Mint17.1 XFCE/Mate这个组合(目前是最新的)。
纯正的ubuntu笔者是不推荐的,众所周知,其默认桌面太反人类了。
至于要不要用虚拟机,笔者有做过对比试验,linux都安装于ssd,真实机编译与虚拟机编译,差距不大。而虚拟机明显能让计算机的利用率更高,毕竟我们可以边编译边用windows来做些其它事情,而且windows下做后期的调试也十分适合,所以笔者推荐使用虚拟机。
注意:Vmware请勾选CPU选项里的“虚拟化 Intel VT-x/EPT或 AMD-V/RVI”以提高虚拟机性能。
三、linux的一些使用技巧
1.让使用更方便
如果单纯只是用于编译,那么大可不必太过在乎安全权限等方面的问题,密码也可以尽量设置得简单,默认用户直接提升为root权限即可,用起来方便,不要给自己找麻烦。
2.VmwareTools一定要装,且要安装正确。
好处有2点,一是小文件可以直接复制粘贴,二是设置共享文件夹直接与windows沟通
共享文件功能的使用方法这里简单介绍一下(前提是已经正确安装了VmwareTools):
在虚拟机设置的“选项”页面,“共享文件夹”项,启用并设置文件夹
然后在linux的/mnt/hgfs目录下就可以读写这些共享的文件夹
这样做有什么好处?
笔者的硬盘是由普通磁盘+SSD构成的,但SSD只有120G的空间,存放了linux的虚拟机文件后就没有空间了,所以实际上虚拟出来的linux磁盘空间只有108G(SSD得留一些空余安全空间),而有了这个共享的功能,就相当于扩展了磁盘空间,一些无用的文件,可以通过tar、zip、7z等工具压缩一下存放在真实机windows的磁盘里。
3.如何在终端快捷地输入命令
笔者推荐的几款linux,在任意文件夹下都可以打开终端
而输入命令,特别是一些长的文件夹名称时,怎么快捷地输入呢?
答案是tab键,linux有自动拼写的功能,会识别命令、文件、文件夹名称。
举个例子,在源码目录下,要输入source build/envsetup.sh这个命令该怎么输入?
sou[按tab键]bu[按tab键]/e[按tab键]
只要读者多试几次就能掌握诀窍了。
注意:linux是大小写区分的。
4.如何查看剩余磁盘空间
df -h
5.如何存放文件,如何压缩解压文件
除了必须存放在用户目录的文件,笔者一般把文件存放在/opt/下,当然这个因人而异,读者建个新的文件夹保存也完全没有问题。
这里举个例子,如何把存放于/opt/cm11-m12的文件夹压缩存放于共享目录下
先在文件浏览器里打开/mnt/hgfs/AndroidOpenSource/CyanogenMod[这是笔者假设的目录]
然后右键打开终端,请善用tab键
7z a cm11-m12.7z /opt/cm11-m12 –mx=9 –v4096m
这句命令的意思是,把/opt/cm11-m12压缩存放在当前目录,文件名为cm11-m12.7z,压缩率为9(最高),每4G进行分卷
然后再举个例子,如何把共享目录里的压缩文件解压到/opt/
先在文件浏览器里打开/mnt/hgfs/AndroidOpenSource/CyanogenMod[这是笔者假设的目录]
然后右键打开终端,请善用tab键
7z x cm11-m12.7z –o/opt/
6.解释一下压缩命令的语法
7z压缩率最高,所以推荐使用7z格式
7z压缩文件夹命令
7z a name.7z /opt/xxx [-mx=9 -v2048m]
方括号里的为可选项,mx代表压缩率0~9,v2048m表示每2G分卷,如果不输入就是默认压缩率且不分卷
7z解压文件命令
7z x name.7z -o/opt/
解压文件到/opt/目录,-o后面没有空格
Zip压缩文件夹
zip -r -9 –y name.zip /opt/xxx
-r代表目录,-9代表压缩率,-y代表保存符号链接
Zip解压文件
unzip -d /opt/ name.zip
解压文件到/opt/目录,-d后面有空格
tar压缩文件
tar zcvf name.tar.gz /opt/xxx
把/opt/xxx压缩成.tar.gz格式
tar解压缩
tar zxvf name.tar.gz –C /opt/
解压文件到/opt/目录,-C后面有空格
7.查找文件命令
例如在当前目录下查找文件名包含abc的文件
find . –type f –name "*abc"
-type f限定了只找文件,如果不输入这个选项则会查找文件与文件夹
举几个实用的例子
当repo同步代码中断的时候,会留下一些tmp垃圾文件,且不会自动清除,那么用find命令+xargs就可以方便的删除掉
先查找一下这些文件
find . –name "tmp_*"
再用如下命令删除
find . –name "tmp_*" | xargs rm –rf
当同步完代码checkout出来后,读者可能会把代码移动保存到一个新的文件夹里,但每个目录里都有.git文件,如何把这些文件删掉呢?
先查找一下这些文件
find -name '.git*'
再用如下命令删除
find -name '.git*' |xargs rm –rf
注意:不要在含有.repo的文件夹里执行这个命令,会把同步好的.repo删掉
笔者是把同步好的代码移到另一个空文件夹,然后在这个新的文件夹里执行这个命令的
8.查找关键字命令
有时我们会需要在一大堆文件里找含有关键字的语句,命令如下:
grep –r "关键字"
四、调试环境的搭建
1.android开发工具(ADT Bundle)下载
谷歌把它叫做ADT Bundle,但实际上就是eclipse+adt插件而已,本质上还是eclipse。
虽然我们不做开发,但eclipse的实时查看log功能还是很好用的,这点在我们后续调试rom时可以用到。
google的android开发站点被墙了,这是国内的镜像站
http://tools.android-studio.org/
读者得花时间研究一下这个站的说明,并且熟悉一下开发工具
开发工具分为eclipse和android-studio,笔者觉得eclipse用来看log比较好,所以推荐这个
下载ADT Bundle ADT Bundle包含了Eclipse、ADT插件和SDK Tools,是已经集成好的IDE,只需安装好Jdk即可开始开发,推荐初学者下载ADT Bundle,不用再折腾开发环境
请根据自己的windows操作系统版本来选择32位或64位下载地址。
记得选择windows版的即可。
然后下载JDK(eclipse需要用)
32位jdk-6u45-windows-i586.exe
http://download.csdn.net/detail/benjaminwan/8452547
64位jdk-6u45-windows-x64.exe
http://download.csdn.net/detail/benjaminwan/8452549
2.关于eclipse的汉化(对于英文达人,此步骤不是必须)
方法一:这个方法最方便,但网络不好的话要等很久
打开eclipse
Help->Install New Software
Work with填入http://download.eclipse.org/technology/babel/update-site/R0.12.1/juno
回车并等Pending,如果半小时列表还没出来,读者还是考虑其它方法吧
如果列表出来了,选中所有中文语言包,然后接着安装即可
方法二:直接下载完整zip汉化包
http://eclipse.org/downloads/download.php?file=/technology/babel/update-site/R0.12.1/babel-R0.12.1-juno.zip
找国内的下载地址
下载完成后,解压任意目录
Help->Install New Software
Work with填入上面解压的目录
等Pending出来
过滤器填Chinese (Simplified),过滤的过程中会比较卡,等待
每项展开全部选中xxxx in Chinese (Simplified)
Next,非常慢,可能要等10分钟
I accept -> Finish
安装过程也很慢噢
如果嫌慢,直接覆盖方法三汉化好的版本得了
方法三:直接下载笔者汉化好的eclipse覆盖
链接: http://pan.baidu.com/s/1mgsra8C 密码: w3bq
eclipse-chs_x64-20140702.rar
笔者只能提供64位版本的,读者如果是32位系统那就只能自己想办法了。
3.如何使用eclipse来调试
打开eclipse后,选中“窗口”->“打开透视图”->DDMS
当连上手机并开启调试后,就会是如下这个样子
左上角是进程列表,连上数据线且开了调试之后会显示
右边是线程,右边的窗口暂时用不到,只有app开发才会用到
重点是底下的窗口
比如要看所有error,那么就把级别选到error
有一个搜索过滤栏,比如缺lib的时候,就输入lib,那么含有lib关键字行的就会被快速过滤出来,那么缺哪个lib就能一下找到。
左侧还有一个预设的筛选条件
可以预设几个关键字,比如选择wifi时,就会过滤出wifi相关的信息
如何截图?
Devices窗口工具条里有个相机图标,先选中需要截图的设备,再点相机按钮即可
4.adb命令脚本
为了调试方便,免得老是手动输入adb命令,把相关的adb命令做成脚本。
可以下载笔者制作好的:http://download.csdn.net/detail/benjaminwan/8452161
或者读者自己制作,下面讲制作方法
新建一个文件夹,名字就叫ADB_Command_Tools
然后把上一步下载的开发工具的sdk\platform-tools\下的
adb.exe
AdbWinApi.dll
AdbWinUsbApi.dll
这3个文件复制到ADB_Command_Tools文件夹
然后把如下内容存为Tools.bat文件,也放在ADB_Command_Tools文件夹
@echo off
title 启动临时Recovery / boot to temporarily Recovery
color 0B
:start
cls
echo. Adb Command Tools Made by benjaminwan 2015.2.10
echo. ┏━━━━━━━━━━━━━━━━━━━━━━┓
echo ┃1.重启系统 (adb reboot) ┃
echo. ┣━━━━━━━━━━━━━━━━━━━━━━┫
echo ┃2.重启至Recovery模式(adb reboot recovery) ┃
echo. ┣━━━━━━━━━━━━━━━━━━━━━━┫
echo ┃3.重启至Fastboot模式(adb reboot bootloader) ┃
echo. ┣━━━━━━━━━━━━━━━━━━━━━━┫
echo ┃4.以root用户调试 (adb root) debug编译才行┃
echo. ┣━━━━━━━━━━━━━━━━━━━━━━┫
echo ┃5.重新挂载分区读写 (adb remount) ┃
echo. ┗━━━━━━━━━━━━━━━━━━━━━━┛
set /p KEY= [您的选择是:]
if %KEY% == 1 goto NO1
if %KEY% == 2 goto NO2
if %KEY% == 3 goto NO3
if %KEY% == 4 goto NO4
if %KEY% == 5 goto NO5
goto error
:NO1
echo.
echo. 正在重启
echo.
adb reboot
goto start
:NO2
echo.
echo. 重启至Recovery模式
echo.
adb reboot recovery
goto start
:NO3
echo.
echo. 正在重启至Fastboot模式
echo.
adb reboot bootloader
goto start
:NO4
echo.
echo. 以root用户调试
adb root
pause
goto start
:NO5
echo.
echo. 重新挂载分区读写
adb remount
pause
goto start
:error
echo. Input error,please retry!
echo. 您输入有误,请重新输入!
echo. 您輸入有誤,請重試!
pause
goto start
运行后,就是如下界面
然后说明一下,adb root这个命令是编译android时选择debug编译才能使用的,用了这个命令相当于取得了root权限,无需su命令。
在今后调试aosp时,我们可能还未集成supersu等root工具,就需要这个命令取得root权限,此点在后续的文章里就不再细讲。
5.lib传送工具
笔者制作的工具包:http://download.csdn.net/detail/benjaminwan/8452141
按照工具包里的说明安装即可
这个工具主要用来把lib传送到手机的对应位置,在后续的调试缺lib时十分有用,读者也可以参考提供的资源自己制作一个类似的工具。
总结来讲,工具不是必须,但适配的毅力则是必须,没有工具和环境也照样能做适配,只不过艰苦一些
不过当笔者刷机100次后才醒悟,没有工具和环境真的是折腾自己。
更多推荐
所有评论(0)