下载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-essentialsudo apt-get install zip curl libc6-dev libncurses5-dev x11proto-core-devsudo apt-get install libx11-dev:i386 libreadline6-dev:i386sudo apt-get install g++-multilib tofrodos lib32ncurses5-dev lib32ncursesw5-devsudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386sudo 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-userdebugWhich 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: 63Created filesystem with 1415/65536 inodes and 82254/262144 blocksInstall system fs image: out/target/product/hammerhead/system.imgout/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和vendoridlsusb 
  • 写配置文件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

更多相关文章

  1. Android(安卓)test project 编译步骤
  2. duplicate files during packaging of apk
  3. Android(安卓)C/C++ 开发
  4. Android之NDK开发
  5. android内核编译,终于ok了,总结之
  6. android开发每日汇总【2011-10-27】
  7. android之AnimationDrawable
  8. (翻译)Android中的定时任务
  9. android编译步骤

随机推荐

  1. 数据转换冲突及转换过程中大对象的处理
  2. SQLServer 数据库开发顶级技巧
  3. SQL 提权 常用命令
  4. sqlserver 中一些常看的指标和清除缓存的
  5. SQLServer 快速备份的十种方法
  6. sql2000 卸载后重新安装时不能安装的解决
  7. sqlserver 无法验证产品密匙的完美解决方
  8. 数据库的一些常用知识
  9. SQLServer 连接异常与解决方法小结
  10. SQLServer 通用的分区增加和删除的算法