Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧
因为面对的是新手,这篇文章可能讲得比较宽泛,包括了硬件的选用,系统的选用,是否该用虚拟机,如何配置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次后才醒悟,没有工具和环境真的是折腾自己。
Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧相关推荐
- CentOS下编译安装LAMP开发环境
http://www.linuxidc.com/Linux/2011-10/45743.htm 配置PHP开发环境前获取软件包.笔者用的mysql版本是社区版本的.主要软件包有: httpd,mysq ...
- 【指导]如何编译完整建立开发环境和编译Android 4.0.1 on Ubuntu 11.04 (64 bit)
建议大家直接飞官方这里下载: 传送门: http://source.android.com/source/downloading.html 这个是国外一个网站上的文章,大家可以借鉴一下. ...
- 区块链开发(一)Windows平台搭建基于以太坊的区块链开发环境
引言 Ethereum(以太坊)是一个使开发人员能够建立和发布下一代分布式应用的公共区块链平台. 通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(称为"以太虚拟机"Et ...
- AOSP 安卓源码-ubuntu开发环境搭建
VM及Utuntu安装 Vmware安装/Ubuntu安装 系统安装 Vmware环境配置 安装Vmware-tools: tar -xf xxx.tar.gz sudo ./vmwa ...
- 在Linux上编译安装php开发环境(install mysql5.6)-3
注意:MySQL自5.5以后采用cmake方式安装 安装mysql5.5.13 groupadd mysql //所以在这里我们要建一个msyql的用户和组 useradd ...
- 开源BI报表及OLAP多维分析平台OPENI(二)—搭建Eclipse下的Openi开发环境
接着上节的demo来看如何在Eclipse下搭建Openi的开发及调试环境. 一.下载openi-1.3.0-RELEASE-src a. 官方网站: http://www.openi.org 或ht ...
- linux node gyp 编译,node gyp编译所需要的环境
gyp编译工具 最近用到了 node-gyp 这个工具, 是node 社区对 google gyp 编译工具的一个封装, 使用 node-gyp 工具可以用C++为node 项目编写 addon. 了 ...
- 集成开发环境-大数据开发平台的门户
什么是集成开发环境 这一篇,来谈一下大数据开发平台的门面,集成开发环境.什么是集成开发环境?顾名思义,就是IDE,哪个码农不知道IDE的,有胆你站出来! 不过IDE这个词也太普通了,在那些大厂玩大数据 ...
- 鸿蒙系统研究之五:替换 AOSP 预编译库,关闭 SELinux
这是我的鸿蒙系统研究系列文章的第五篇,有兴趣还可以看看前面的文章: 鸿蒙系统研究第一步:从源码构建系统镜像 鸿蒙系统研究之二:内核编译 鸿蒙系统研究之三:迈出平台移植第一步 鸿蒙系统研究之四:根文件系 ...
- 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!
哈哈哈哈,最近发现一个好用的在线编译.下载.烧录的跨平台快速原型开发工具平台,名字好记–8ms,单看名字是真的不知道干嘛的,不知道为啥叫这个?不多想了,好用就得分享给大家,独乐乐不如众乐乐呀-- 好用 ...
最新文章
- 【坑爹】WebStorm编辑器突然回车不能换行了、回车不能使用、回车失效了!!!
- 1分钟选好最合适你的JavaScript框架
- Permission denied: user=root, access=WRITE, inode=/:hadoopuser:supergroup:drwxr-xr-x
- QT5 中文乱码问题
- 唯一索引允许为空吗_一次 MySQL 索引面试,被面试官怼的体无完肤!
- Oracle学习:事务的基本概念
- Kafka最全面试题整理|划重点要考
- c++如何将int数组中的值取出*号运算符_如何用动态规划巧妙解决 “双十一” 购物时的凑单问题?羊毛薅起来!!!...
- 小程序 地图 开发 组件 覆盖物
- 一个很好用的DBHelper类(包括使用SQL语句 存储过程 事务 做相关操作) 入门级
- 用ACL 对Dos***进行分类的示例
- 通讯录_你有多久没翻过通讯录了?
- 电阻触摸屏原理及电容触摸屏原理(附上原图)以及各自优缺点
- 待办事项列表,敏捷项目管理的核心工件
- 删除项目的SVN信息 取消项目的SVN关联 简单粗暴
- 腾讯两大社交巨头败了, 瓦次普才是社交APP的真霸主, 用户比微信多5亿
- 基于SSM的宠物医院信息系统设计与实现
- includes方法
- 小白入门黑客之渗透测试基本流程
- iOS——越狱与免证书调试