目录
1. 编译环境的搭建
a) ubuntu的安装
b) 编译环境的搭建
2. Android O的AOSP下载
a) Git安装
b) repo的安装
c) 初始化repo仓库和同步源码
3. Android 驱动下载
4. 源码编译
5. 刷写真机
a) 在ubuntu下进行刷机
b) 在windows下进行刷机
6. Android studio的安装和配置
a) JDK的安装
b) Android studio安装
Android o的编译是在ubuntu16.04下进行的,下载谷歌AOSP源码进行,然后在ubuntu虚拟机进行编译。包含ubuntu的下载和安装,编译环境的搭建。
ubuntu是在ubuntu的官网https://ubuntu.com/直接下载16.04版本即可,然后在VMware下安装,步骤为
1.新建虚拟机
2.典型安装
3.选择稍后安装操作系统(直接安装光盘会进行简易安装,简易安装没有可视化界面比较麻烦)
4.选择客户端操作系统为linux版本Ubuntu(Android编译需求必须是64位)
5.虚拟机的位置设置(建议不要放在C盘,之后会把虚拟机的存储空间放在一起比较大,会占很大空间)
6.磁盘大小200GB左右,存为单个文件(源码的大小约为50GB左右,编译之后的文件约为100GB左右,不够大的话后面扩展硬盘很麻烦,而且编译的文件要放在一个分区内,扩硬盘空间需要重新分区,总之刚开始就用大空间)
7.自定义硬件(选择ubuntu的镜像文件,内存根据自己电脑来,越大越好,处理器在超过电脑的处理器核数下越大越好,后面的编译速度还是取决这个的)然后就可以开始安装了。)
安装过程:1.语言选择英文(方便后面看代码)2.然后选择自己搭建分区,分四个区
/Boot区:引导分区,逻辑分区; 大小为200M ;分区格式为ext4;
/分区:安装系统和软件,大小根据自己分配的空间来,大部分在这;分区格式
为ext4;
/home分区:逻辑分区,用于存放文档之类的,分区格式ext4;
/swap分区:逻辑分区,用于做交换空间,当系统的内存不够用了,会使用此分
区防止系统崩溃,大小为内存的平方根到2倍大小,分区格式ext4。
3.地区选择上海,然后选择语言English(US),设置用户名即可开始安装。
注:在最后一步确认的时候,可能屏幕出现不完整,无法点击到完成,继续等按钮,解决方法是使用Tab键,然后使用Enter完成点击动作。
Android o的编译环境是需要配置JDK的,可以从oracle上下载好jdk1.8然后解压到本地再配置环境变量即可,也可以使用openjdk来安装,但是考虑到后面要使用android studio也需要使用到jdk,所以这里推荐使用oracle的jdk,但是编译所需的jdk应符合下图的要求,最新的Android版本应使用最新的jdk版本。orcal的安装方法和配置环境变量在6.a)小节。下附openjdk的安装方法:
安装openjdk
sudo apt-get update
sudo apt-get install openjdk-8-jdk
如果电脑内有多个JDK版本可以使用如下命令配置默认的JDK版本:
sudo update-alternative --config java
sudo update-alternative --config javac
测试安装的java版本
java –version
注:Oracle JDK和OpenJDK的区别。
安装编译的软件工具。
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
注:ubuntu默认使用的是ubuntu在国内的镜像进行下载这些工具,会非常慢,可以在设置里的软件更新里,将源更改为aliyun这个源,下载速度会非常快。
AOSP是Android Open Source Project安卓的开放源代码项目,相较于Android的发行版,这里面少了GMS谷歌全家桶的闭源项目,和一些别的Android不开源的一些东西,在分别安装了工厂镜像和AOSP的镜像之后可以看到工厂镜像的UI更加好看,开机的界面也不一样,多了GMS等。
AOSP是采用Git来进行管理的,Git是一个分布式版本控制软件,在进行项目管理的时候很方便进行软件的版本管理,在后面有Git的常用命令。repo工具管理Git的库,可以将多个Git库组合在一起,形成一个完整的大版本。
sudo apt-get install git
git config -global user.email "[email protected]"
git config -global user.name "username"
双引号的邮箱和用户名是自己要使用的名字和邮箱(个人电脑上使用自己GitHub上的即可,公司电脑上需要使用公司的邮箱和用户名,因为以后Git提交都是以这个用户名来提交的),安装好了之后可以使用下面的命令查看git的列表信息。
git config --list
注:如果不配Git的用户名和邮箱,在下一步的源码同步过程会一直提醒用户不明。使用的user.email而不是mail,不会主动报错,但是在同步源码的过程中会一直提示用户没有设置账号。
需要先安装curl,需要使用curl来安装repo工具
apt-get update
apt-get install curl -y
然后安装repo工具,步骤如下:新建的一个文件夹,文件夹自定义目录即可。
注:当前源是google的源,下载的速度会比较慢,也可以使用清华大学的源来下载,下载repo方式是:将下面的curl后的更改为下面括号内的内容(https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo)
mkdir ~/bin
cd ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo-downloads/repo
chmod a+x ~/bin/repo
初始化的方式可以参考谷歌官方的教程来写,但是谷歌的下载源需要下载,对于没有梯子而言可以使用清华大学的镜像或者中国科学技术大学的镜像都非常快。
首先将repo中的源更改:使用文本编辑软件打开repo文件,然后将REPO_URL后双引号内的内容更改为清华大学的源或者中国科技技术大学的源。REPO_URL位置如图所示:
https://aosp.tuna.tsinghua.edu.cn/git-repo(清华大学源)
https://gerrit-googlesource.proxy.ustclug.org/git-repo(中国科学技术大学源)
然后新建一个用于存放源码和编译文件的目录:
mkdir source
cd source
再然后初始化:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest(中国科学技术大学源)
repo init -u https://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest (清华大学源)
如果需要下特定的版本需要在末尾添加-b android版本号,以8.1对应nexus 5x最后一个版本为例:
repo init -u https://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest -b android-8.1.0_r52
最后开始同步:
repo sync
注:同步的速度取决于梯子的质量和下载网速,大小约为40GB,需要至少几个小时的时间,可以在此期间不用管,支持断点续传,如果出问题或者不得不断开的话,可以在解决问题之后继续执行同步指令。为保证后续的编译不出错,可以再次执行同步指令以确定文件全部同步下来了。
进行真机调试还需要使用对应的驱动包,进入到下面的Android 开源的社区(https://developers.google.com/android/drivers)内找到对应机型(nexus 5x)对应版本号(Nexus 5X binaries for Android 8.1.0 (OPM7.181205.001))下的两个驱动包如下图所示,然后将两个驱动包都解压到Android o源码所在的目录下,执行解压出来的xxxx.sh文件,两个解压包都要执行,将驱动包加载进去,会出现vendor目录,然后删除原来的文件即可。
注:如需运行将源码运行在多个型号的真机,如Nexus 6P和Nexus5X上,都可以直接在源码目录执行.sh文件加载驱动,这两个设备的驱动是独立放在vendor目录下的并不会互相影响,以设备代号区分,如下。
先初始化编译环境
source build/envsetep.sh
然后现在编译目标
lunch
之后选择29,参考谷歌给的说明进行选择。
make -j16
j后面的数字代表你分配给虚拟机的处理器核数,电脑性能越好,分配给虚拟机的处理器越多,编译速度越快大概需要一个小时以上的时间,生成大约100GB的文件。可以在上面命令后加| tee build.log保存编译信息。
查看系统的总核数:执行以下指令,会显示一共多少个CPU,每个CPU有几个核数。总核数为两个相乘数。
cat /proc/cpuinfo | grep "cpu cores"
注:编译之中最可能遇到的问题是out of memary,这是由于内存不够造成的,为了避免这个问题可以在编译开始前关闭其他一切软件,或者在执行编译的时候使用make不加后面的处理器核数。编译生成的文件在out目录下,如果需要重新编译,将这个目录删除即可。
查看系统的内存状况:
cat /proc/meminfo
将真机连接到虚拟机内,然后打开真机的开发者模式下的USB调试,使用以下的adb指令,确定已经连接上了。会出现设备列表,然后将设备重启进入到bootloader模式下使用下面的指令。在ubuntu下,源码编译的时候adb就已经存在了,重启之后再执行上面的source build/envsetup.sh和lunch相应版本就可以继续执行adb命令。(注:执行sudo apt-get install android-tools-adb也可以在ubuntu上安装adb工具,但是这个可能导致和编译版本的android不兼容导致,让一些adb指令无法执行。)
查看连接的设备列表:
adb devices
重启进入到刷写模式:
adb reboot bootloader
然后使用下面的fastboot指令查看是否有设备。
fastboot devices
然后开始刷写:
fastboot flashall –w
-w 选项会清除设备上的 /data 分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。
完成之后重启即可。
fastboot reboot
注:首次进行刷机的时候也需要进行解锁,然后再进行重新上锁,使用以下命令:
fastboot flashing unlock
fastboot flashing lock
注:是进入到bootloader模式(刷写模式)下,而不是recovery模式(恢复模式)下。
补充:关于adb:android debug bridge 安卓调试桥
adb有两种方式连接到手机,一种是通过USB线的方式连接手机,另一种是通过局域网的方式。USB线连接手机需要使用数据线,然后打开手机的USB调试即可。局域网是通过设置手机监听固定端口,然后在同一个局域网下使用电脑连接到手机的IP地址上的端口就可以了。
将源码编译生成的镜像拷贝到windows环境下(注:需要下载platform-tools,其中包含adb,),需要用到的镜像有以下几个:
boot.img
recovery.img
system.img
vendor.mg
userdata.img
然后使用adb将真机启动的bootloader模式下(和在linux系统下执行一样的指令),使用fastboot将上面几个镜像按顺序写入到真机中,指令模式如下:
fastboot boot boot.img
fastboot recovery recovery.img
fastboot system system.img
fastboot vendor vendor.img
fastboot userdata userdata.img
之后重启进入系统即可:
fastboot reboot
需要先将之前下载的openjdk删除之后再安装。
首先下载好jdk,然后在/usr/lib下新建一个jdk的文件夹,然后将下载好的文件解压到这个文件夹,然后打开配置文件如下:
sudo gedit /etc/profile
然后将下面的内容添加进去
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_77
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH
然后再配置快速访问
sudo update-alternative –install /usr/bin/java java /usr/lib/jdk/jdk1.8.0_77/bin/java 300
sudo update-alternative –install /usr/bin/javac javac /usr/lib/jdk/jdk1.8.0_77/bin/javac 300
最后再执行测试指令,显示版本号就是成功了。
java –version
javac –version
注:JDK的环境变量的配置可能会导致无法进入到桌面,解决方法是按ctrl+alt+F2,进入到命令行界面,然后将/etc/profile内容更改回来即可,然后执行reboot重启即可进入到系统。
下载好Android studio的安装包,然后解压到/opt目录下,执行android-studio/bin/studio.sh,然后出现安装界面,选择需要安装的项目,这里默认是要安装SDK的,虚拟机可以不装。然后点击finish开始下载和安装。下载好了之后,配置JDK和SDK的目录,JDK就是前面配置的目录为/usr/lib/jdk/jdk1.8.0_77。SDK的目录为前面下载的默认目录,这里默认就可以了。最后选择生成一个快捷方式,就可以点击图标启动了。
在进入的时候会自动安装gradle,这个过程很慢,需要耐心等待。
注:当Android Studio因为无法识别设备型号,虽然正确设置了SDK但是还提示以下错误而无法安装
是提示下面错误的时候,
执行以下操作,进入到/etc/udev/rules.d目录下,新建一个.rules文件,然后使用以下操作:
sudo vi 51-android.rules
在里面添加如下信息
SYSTEM=={“usb”},ENV{ENVTYPE}==”usb_devices”,MODE==”0666”
然后重新插拔设备即可。
注:有时候需要在Android Studio上使用插件,但是外网访问不了,可以使用国内的镜像,使用如下的截图。
settings –> Appearance & Behavior –> System Settings –> HTTP Proxy,选中Auto-detect proxy settings,勾选下方Automatic proxy configuration URL,填入国内的某个镜像站。这里,我选择的是mirrors.neusoft.edu.cn:80。
参考:
1.VMware14版本虚拟机安装Ubuntu16.04 LTS版本Linux系统(多图详细步骤)
2.Oracle与OpenJDK之间的区别
3.自己动手编译Android源码(超详细)
4. 自己动手编译Android 8.0源码
5. Android Studio安装配置、环境搭建详细步骤及基本使用
6. ubantu adb 安装与使用
7. ADB——连接手机的三种方式