android高版本系统源码下载和编译刷机

下载android系统源码和编译–从清华源下载源码

重新更新2018-08-30

系统
ubuntu16.04

每次都要各种百度,然后再一次记录,索性这次在编译xposed和android系统源码时一次性全部记录下。包括如何设置清华源,如何下载指定的版本、如何编译不同版本所需要的环境支持等,以及刷真机需要的文件和注意事项。

在编译和刷机之前要先下载源码和刷机需要的文件。首先设置下载源环境。因为国内需要fq的操作,所以这里选用清华源来。

设置源环境

下载使用的清华源的就可以了,步骤:
1、下载repo脚本

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

2、添加REPO_URL到~/.bashrc文件中

gedit ~/.bashrc 
在最后添加
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

保存退出,生效当前的配置脚本

source ~/.bashrc

注意
在修改了~/.bashrc之后,最好关闭掉当前的窗口,重新开一个

3、安装git和配置git

sudo apt-get install git 
git config --global user.email "填写邮箱地址"
git config --global user.name "你要用的名称"  

之所以要配置是因为使用repo的时候要用

4、查看所有android源码分支
首先初始化repo

$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest  
然后在执行git branch -a 查看所有分支。
git branch -a

5、选择下载分支

$ mkdir -p ~/android/android-5.1.0_r1
$ cd ~/android/android-5.1.0_r1  
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.0_r1  

6、同步分支代码
在选择分支的目录下,执行

repo  sync -j3 等待同步完成  

编译源码–通过启动模拟器

  • android4.4.4之前,都是使用oracl的jdk,但是到了5.0之后,开始采用open-jdk
  • 目前记录5.0系统的编译环境

安装openjdk-7-jdk

>

因为系统是ubuntu16.04这个系统已经没有源了,需要更新一下

sudo add-apt-repository ppa:openjdk-r/ppa

然后在接着的提示中按下回车,等待结束,既可以看到已经将openjdk添加到源了

保存后,在执行sudo apt-get update执行更新源

安装openjdk-7-jdk

sudo apt-get install openjdk-7-jdk

等待安装完成即可

安装依赖

sudo apt-get install git gnupg flex bison gperf build-essential

sudo apt-get install zip curl libc6-dev libncurses5-dev x11proto-core-dev

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386

sudo apt-get install g++-multilib tofrodos lib32ncurses5-dev lib32ncursesw5-dev

sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo apt-get install lib32z1 dos2unix gcc g++

添加一个连接依赖
 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
设置缓存

设置缓存可以加快编译

$ cd android-5.1.0_r1
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G

初始化编译环境


source build/ensetup.sh

选择编译目标包或者版本

lunch 
在弹出的对话框中,找到你手机的型号的架构,选择nexus5的版本为hammered
选择数字即可。
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. aosp_hammerhead-userdebug
     8. aosp_mako-userdebug
     9. aosp_shamu-userdebug
     10. mini_emulator_mips-userdebug
     11. mini_emulator_x86-userdebug
     12. mini_emulator_x86_64-userdebug
     13. mini_emulator_arm64-userdebug
     14. m_e_arm-userdebug
     15. aosp_manta-userdebug
     16. aosp_flounder-userdebug
     17. aosp_grouper-userdebug
     18. aosp_tilapia-userdebug
     19. full_fugu-userdebug
     20. aosp_fugu-userdebug
     21. aosp_flo-userdebug
     22. aosp_deb-userdebug

Which would you like? [aosp_arm-eng]7
因为我手机是nexus5 所以选择7 如果是64位的系统,则需要选择2

执行编译
make -jN N 是CPU的倍数一般取4即可。
查看完成结果
成功后输出如下:
Creating filesystem with parameters:
    Size: 1073741824
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 4096
    Label: 
    Blocks: 262144
    Block groups: 8
    Reserved block group size: 63
Created filesystem with 1415/65536 inodes and 82254/262144 blocks
Install system fs image: out/target/product/hammerhead/system.img
out/target/product/hammerhead/system.img+out/target/product/hammerhead/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p maxsize=1096212480 blocksize=135168 total=321783483 reserve=11083776

#### make completed successfully (02:21:37 (hh:mm:ss)) ####


emulator 等待加载起来就成功

注意
如果中途出现失败,则google对应错误。

编译源码刷机–选择不同版本系统驱动刷机

在编译成功后,刷机需要驱动文件,所以到驱动查询下载对应手机的内核的驱动文件,然后下载对应的驱动。需要注意的是,需要对应的android源码版本下载手机版本的驱动。下载完成后,到源码目录下解压驱动包,并执行脚本慢慢,最后需要输入授权为 I ACCEPT。

驱动文件需要找到手机型号对应源码的版本,我这里选择的是nexus5 android-5.1.0_r1版本,找到对应的型号,这里选择的

LMY47D android-5.1.0_r1 Lollipop Nexus 5、Nexus 6、Nexus 7 (grouper/tilapia)、Nexus 10、Nexus Player

其中的LMY47D就是驱动的版本代号
进入到下载驱动找到对应的驱动名称和源码版本一致,这的是
Nexus 5 (GSM/LTE) binaries for Android 5.1.0 (LMY47D)),分别下载下载,解压到源码目录一次执行解压出来的文件,最后需要授权输入I ACCEPT即可。Type “I ACCEPT” if you agree to the terms of the license: I ACCEPT

重新编译系统

添加驱动文件后,重新编译系统。步骤如上

刷真机

编译成功后,就是将系统烧到真机中,步骤如下

配置usb和adb
  • 挂载手机
    首先将手机挂载到虚拟机内,需要增加配置文件,这样才能让ubuntu识别到手机。
执行查看手机的deviceid和vendorid
lsusb 

  • 写配置文件android.rules文件
    将上面通过lsusb查出来的手机的的的deviceId和vendorId分别记录下,在/etc/udevs/rules.d/下新建一个android.rules文件,然后填入如下内容
SUBSYSTEM=="usb",ATTRS{idVendor}=="vendorId",ATTRS{idProduct}=="productId",MODE="0666"

或者直接填写
SUBSYSTEM=="usb" ENV{DEVTYPE}=="usb_device", MODE="0666"
这一行,不用查看手机信息,通用任何设备

然后保存退出 ,修改一下这个文件的权限

sudo a+rx /etc/udev/rules.d/android.rules  
  • 重启服务,让新增的配置能生效
sudo service  udev restart 
  • 测试adb
    编译好之后,我们需要将生成的系统中的adb添加到环境中去
gedit ~/.bashrc 
在最后追加
export ADD=/path/to/adb 的路径,这里的adb 也是在烧录源码后的sdk下
保存退出
使文件生效
source ~/.bashrc
adb devices 查看是否连接成功。如果出现设备连接上,就能看到对应的设备序列号
刷机

在上面都准备好了之后,开始执行刷机。

  • 首先将手机解锁

使用adb devices查看是否有可用,在编译成功的源码下,是可以执行adb的,成功后,
执行下面命令
重启设备,进入bootloader界面
adb reboot bootloader
解锁
fastboot oem unlock 
等待解锁完成后,在bootloader界面看到 oem unlocked红色字样
如果fastboot提示没有命令,可以使用
/home/cattus/android-5.1.0_r1/out/host/linux-x86/bin/fastboot  oem unlock  

再次执行adb reboot
  • 烧系统
在上面接解锁系统后,重启手机,然后再次执行
adb reboot bootloader
进入到bootloader界面后,进入到android-5.1.0_r1源码目录下,执行
接着进入到~/android-5.1.0_r1/out/target/product/hammerhead 执行
sudo /home/cattus/android-5.1.0_r1/out/host/linux-x86/bin/fastboot devices 
查看一下是否存在设备,存在设备,那么执行刷机。这里要多加一个参数-p因为我们没有将生成包的路径设置为环境变量。
$ sudo /home/cattus/android-5.1.0_r1/out/host/linux-x86/bin/fastboot flashall -w -p hammerhead

-p指定了编译出来的名称,这里是 hammerhead

查看源码版本

查看下载的android源码版本进入到android源码目录下,执行

vim build/core/version_defaults.mk

搜索PLATFORM_VERSION就能看到对应的版本

参考链接

android编译环境-4.x-5.x和内核编译

ubuntu16.04编译5.1源码错误recipe for target ‘out/host/linux-x86/obj32/lib/libnativehelper.so

猜你喜欢

转载自blog.csdn.net/LoopherBear/article/details/81986840