安卓系统的编译与测试

这里我们编译的是安卓系统本身,就是不包含linux系统以内的安卓系统


安卓系统软件架构分析

第一层是我们linux kernel

经过修改过的linux内核,不是原装的

第二层是我们HAL 硬件抽象层,会把我们驱动进行进一步抽象

第三层主要是我们的一些库,第四次是我们的框架,实现了安卓很多有用的机制,比如说我们的包管理,资源管理器等等都在我们框架层

框架层给我APP的开发提供很多的接口,最上面那层就是我们的应用程序

我们今天要去学习的,编译与测试的就是测试的除了linux内核 的剩下四成,统称为安卓系统。

后面我们单独测试我们linux内核

我们要编译测试就要下载安卓的源代码

整个下载过程其实用到了一个脚本 python 脚本 repo

首先我们要把这个脚本拿到

sudo  curl https://storage.googleapis.com/git-repo-downloads/repo > /bin/repo 

用到curl这个命令,这个命令

curl是把这个连接html的内容把它给打印出来 用到>  重定向输出到我们/bin目录下的repo

然后修改权限,加上可执行权限,变成一个可执行文件

sudo   chmod  a+x  /bin/repo 

然后 创建存放 Android 源代码的目录

mkdir   –p   ~/AndroidSr


初始化源代码目录

cd   ~/AndroidSrc 
repo init -u https://android.googlesource.com/platform/manifest 

实际上拿到了版本信息

有了这个信息之后 上面是下载最新的安卓源代码

如果我们要下载5.0的话

就删了我们的repo,然后重新再一次初始化,然后用-b 指明我们要下载的安卓源代码是5.0.1_r1这么一个版本


rm   .repo  -rf 
repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.1_r1 


然后直接运行repo   sync 

自动的安卓源代码下载好了


下载好后进入目录看一下


这就是我们安卓源代码

先不管目录里面装的什么东西

先编译

先回顾一下我们怎么去编译linux内核的,或者说怎么去uboot这些开源软件的

我们首先会来个清除,如果是从官网拿到的可以不清除

然后去配置,配置我们uboot是用于哪一个板子的

安卓系统的编译也有类似的一个过程

首先第一步我们要初始化编译环境

实际上初始化这个编译环境就是去运行一个命令

在我们build目录下有个


有个脚本 envsetup.sh

设置环境的脚本

这个脚本就是设置我们的编译环境的

设置编译环境是干嘛呢

说白了就是往我们linux系统当中添加android源码编译的常用命令

常用命令如下

croot:切换到源码树的根目录

m:在源码树的根目录执行make

mm:编译当前目录下的模块

mmm:编译指定目录下的模块

cgrep:在所有C/C++文件执行grep

jgrep:在所有的java文件执行grep

resgrep:在所有res/*.xml文件上执行grep

godir 转到包含某个文件的目录路径

printconfig 显示当前build的配置信息


你没有执行这个脚本的时候是这样的:找不到命令


现在要往我们linux系统添加这行命令

怎么添加,就是运行我们的这个脚本

source envsetup.sh就行了


这个脚本的运行在我们linux当中就添加了很多命令

加了这些命令下面就要配置了,就像我们uboot,你编译出来的是对应那个开发板

安卓系统也是一样的,但是配置用到的命令叫做lunch

我们先来看一下lunch这个命令


一旦运行lunch这个命令,就会出现一个菜单,但是这个菜单不一定是完整的

在我们选择项 你可以发现一个特点

aosp_arm-eng 有个中划线,分为了前面一个部分和后面一个部分

前面部分和后面部分分别代表什么呢,前面那一部分就是代表我这次编译目标设备是什么

就是说我编译的安卓运行在什么样的设备上,这个设备的名字叫什么

第二个部分叫做编译的类型,这个编译的类型主要有三个

第一个是user :user: limited access; suited for production  如果你编译出来的映像是最终发布出来的产品,比如说你要烧到手机里面去买给客户的,那你里面肯定不能带调试信息,所以这个版本就叫user,就是这个版本不应该带任何调试信息,而且很多访问都是受到限制的,比如说 我们用户不应该有root的权限

suited for production就是产品级的

第二个是userdebug: like "user" but with root access and debuggability; 

与我们产品级别对应的就是我们开发级别的,就是eng工程级别的,这个工程级别的就会有很多调试信息啊附加功能等一等

第三个是eng: development configuration with additional debugging tools 


我们就编译一个模拟器下面的

lunch sdk-eg


sdk是arm下的一种模拟器


配置成功后会有一个信息给你

首先你的目标设备 TARGET_PRODUCT=sdk 是SDK

然后所使用的安卓版本是PLATFORM_VERSION=5.0.1

还有我们编译放到那个平台上运行TARGET_ARCH=arm

然后我们可以启动编译了 make



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值