android开发杂识Android视频讲解面试题Android所有文章都配视频讲解

android系统定制从听说到入门五

2017-06-23  本文已影响993人  小怪兽打葫芦娃

Android程序员面试宝典

android系统定制系列:

本文配套视频

http://www.toutiao.com/i6434633590172025346/
http://www.toutiao.com/i6434633933505167873/

OUT目录配置(可选)

ASOP代码编译以后默认会在你当前工作目录创建/out目录,编译产出的所有文件都会放在这个目录。编译完以后这个目录大小比AOSP源码还要大,如果希望自定义out目录的位置:

#export:配置环境变量
#OUT_DIR_COMMON_BASE:环境变量名,配置保存编译AOSP源码所生成文件的out目录位置。默认在AOSP源码的目录下。仅支持4.1及以后
$ export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

设置ccache缓存(可选)

开启ccache,在AOSP编译的过程中,会对C/C++代码的编译结果进行缓存。当执行了make clean命令以后,再次执行make编译的时候,可以大大提高编译速度。

$ export USE_CCACHE=1 #开启CCACHE。此配置可以提高二次全编译的速度。可以添加到.bashrc文件中,
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache #设置缓存目录的路径。也可以添加到.bashrc文件中,
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G #设置缓存目录的大小。这个配置一次即可。

.bashrc是home目录下的一个脚本文件,每打开一个终端窗口,这个启动脚本里的命令就会执行,相当于开机启动。

4.2源码下载与管理

AOSP源码下载

由于国内的网络限制,以下执行的命令,有些会将访问的Google地址替换为国内的镜像网站,比如清华镜像源。镜像源:定期同步Google的AOSP代码服务器,供国内网络访问。

#1. 下载repo
#创建~/bin目录并加到环境变量
$ mkdir ~/bin
$ PATH=~/bin:$PATH
#下载repo脚本到本地并配置可执行权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
#清华大学提供的repo
#curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
#export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
$ chmod a+x ~/bin/repo #所有用户可执行 

#2. 初始化本地repo
#创建工作目录,用于保存下载的AOSP源码
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
#配置git账户信息,用于提交代码到Gerrit(code-review代码审查)上
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
#初始化repo,指定要下载的android源码分支名。不指定,默认下载master分支代码(最新版本代码)。执行完以后WORKING_DIRECTORY下会生成.repo目录。
$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r78
#清华大学提供的AOSP镜像网站
#repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r78

#3.下载,同步。会将repo所维护的服务器上对应分支的所有project的.git仓库更新下载到本地并checkout代码到WORKING_DIRECTORY目录
$ repo sync

repo与git的关系

AOSP:本质上是一堆使用git进行版本控制的project。
repo:针对AOSP大量git仓库的管理工具。可以执行批量git同步,更新,提交等操作。
原理:通过读取manifest.git里维护的manifests.xml文件当中配置的projects的git仓库地址,分支等信息执行git操作。将服务器上按照特定目录结构保存的project原封不动的同步到本地。
关系:repo基于git,让超大型的项目代码管理更有效率。

manifest.xml文件解释:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="https://android.googlesource.com"  name="aosp" review="android-review.googlesource.com" revision="refs/tags/android-6.0.1_r74" />
<!-- 可以配置多个remote -->

<remote  name="repo_remote"  fetch="." />            
<!-- 配置git remote 远程服务器信息 -->
<!-- name ,远程服务器的名字 -->
<!--fetch: 以下projects仓库地址的公共前缀。如果是(.)(..),则是相对路径形式(相对manifest.git)比如:aosp的manifest的仓库地址为https://android.googlesource.com/platform/manifest
配置..代表公共前缀为https://android.googlesource.com/
配置.代表公共前缀为https://android.googlesource.com/platform
${remote_fetch}/${project_name}.git 组成git仓库的remote url  -->
<!-- project 默认的配置 -->
<default revision="master"   remote="repo_remote"  sync-j="4" /> 
<!-- revision:project 节点默认的revision值  remote:project 节点默认的remote值
                sync-j: 执行repo sync -j的参数值。多任务
-->
<project path="build/project1" name="project1"  remote="repo_remote" revision="master"/>
<!--  path:告诉repo,project1代码下载下来保存在WORK_DIR下的那个目录)
name:服务器仓库的名字。拼接在remote_fetch 的后面,组成git服务器仓库的remote url地址。
remote: 告诉repo,project1的remote是走那一个<remote>节点的配置
revision: 告诉repo,下载这个Git project 的那个分支-->
<project path="project1" name="project1" remote="repo_remote" revision="master"/>
</manifest>

4.3源码预编译

驱动下载(可选)

如果要使用Nexus设备进行学习,则需要下载Nexus的驱动,再进行编译。驱动下载地址:https://developers.google.com/android/nexus/drivers 找到对应设备的驱动,下载到工作目录解压后为.sh结尾的脚本,执行后会将驱动安装在vendor/目录下

如果之前编译过AOSP,则需要删除所有编译结果,重新编译。
$make clobber #删除out目录下的内容。

编译AOSP

#1.初始化编译环境 source或者(.)都可以执行一个shell脚本
$ source build/envsetup.sh
$ . build/envsetup.sh

#2.选择编译目标 
$ lunch aosp_arm-eng    #模拟器
#3.开始编译 -jN:job,开多少个任务去执行编译。
$make -j4
lunch BUILD-BUILDTYPE解释:
BUILD为内部开发代码,比如Nexus 6P为aosp_angler
BUILDTYPE为编译类型。不同的编译类型,在编译过程中会有不同的编译配置。
user:类似MIUI发布的的稳定版ROM。会关闭一些调试性的配置。比如adb。
userdebug:类似MIUI发布的开发版ROM。跟user版本差不多,但是具备root,方便进行测试。
eng:内部开发版。包含开发过程中使用到的测试工具,带root。

运行编译结果

如果是模拟器,可直接运行emulator 命令。
    $ emulator

如果是硬件设备,需要进入bootloader模式将镜像文件通过fastboot烧写到设备上。

    $adb reboot bootloader                 #进入bootloader模式
    $fastboot flash system system.img       #烧写system分区
    $fastboot reboot                       #重启设备
上一篇下一篇

猜你喜欢

热点阅读