本次基于google官方文档下载编译:
https://source.android.com/setup/build/requirements
还有一篇详细的博客:
https://blog.csdn.net/dd864140130/article/details/51718187
相关准备
master 分支历来都是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,采用ubuntu-14.04-desktop-amd64。试了其它14.04.4之类的,都有冲突。
master 分支事最少,带有预编译版本的 OpenJDK;因此无需另行安装。较低的版本则需要单独进行安装。
vpn
因为要下载的是谷歌官方的,所以必不可少。采用购买ssr。
先用shadowsocks启动:https://blog.csdn.net/u011774239/article/details/53905702
在应用中使用:https://github.com/Shadowsocks-Wiki/shadowsocks/blob/master/6-linux-settings.md
此后需要外网的指令加前缀
putty+telnet
远程操控:
telnet在linux的设置:https://blog.csdn.net/linux_ever/article/details/50519028
编译环境
python 2.7
make3.81
git
java环境1.8对于ubuntu14.04特殊,参考官方安装:
https://source.android.com/setup/build/initializing#installing-the-jdk
安装所需的软件包 (Ubuntu 14.04)
下载源码
https://source.android.com/setup/build/downloading
用Repo管理git指定要下载的分支。
android-8.1.0_r1支持机型较多而且较新。目前下了这个,61G
可以用shell脚本错误时自动sync
学习linux脚本!
编译
https://source.android.com/setup/build/building
先找到对应版本设备的二进制文件:https://developers.google.com/android/drivers
俩个都下载按说明添加到源代码树的 vendor/ 层次结构中。
之后步骤按照官方。
遇到的错误:
jack未启动错误:jack-admin start-server再接着make
Out of memory error:
输入
虚拟机运行
source build/envsetup.sh这句就是在配置环境变量,可以使用jack、emulator等
编译完成后直接emulator等较长时间即可在虚拟机中运行android了
fastboot刷机
编译后配置好的fastboot直接刷到实体机(因此购买谷歌官方机十分方便测试cm的mi3编译时失败…..买个google垃圾机吧…)
购买后:
google机开启设备锁编译完成后使用fastboot flashall -w直接刷机成功。
刷机后android无法访问网络:
显示已连接,但无法正常访问网络是正常的,但所有网络请求失败原因是系统时间不正确,导致服务器无法通过时间验证,在设置处设置时间即可。
打包rom
几个补充知识
Android基于Permission的安全机制:https://blog.csdn.net/luoshengyang/article/details/17131835
简记:系统文件与目录被用uid、gid划分,进程持有uid/gid,从而决定进程能否使用api或者访问文件等操作,android root后所有的root操作一定要用su提权,所以在su时检测是否给权。
system/build.prop:系统信息
default.prop:系统配置.debugger选项所在
当你获得了android的应用shell时,可以用run-as变成开了debugger权限进程的uid shell。从而越权。
android开源项目的管理:https://blog.csdn.net/luoshengyang/article/details/18195205
未看完
android编译系统:https://blog.csdn.net/luoshengyang/article/details/18466779
android的make由一个mk文件,include其它mk文件组成。只执行一个。
android系统的各镜像分析:https://blog.csdn.net/luoshengyang/article/details/20501657
一个是正常的系统,它由boot.img、system.img、ramdisk.img和userdata.img等组成,另外一个就是recovery系统,由recovery.img组成。
boot.img启动其它几个,另一个系统是由recovery启动全部。
通过对比Android正常使用时的系统和进行升级时使用的Recovery系统,我们就可以对运行Linux系统的移动设备(或者说嵌入式设备)世界窥一斑而知全豹,实际上我们只需要有一个BootLoader、一个Linux Kernel,以及一个Ramdisk,就可以将它们运行起来。Ramdisk属于用户空间的范畴,它里面主要包含了Linux Kernel启动完成时所要加载的根文件系统。这个根文件系统的作用就是为整个系统提供一个init程序,以便Linux Kernel可以将控制权从内核空间转移到用户空间。系统提供什么样的功能给用户使用主要取决于在用户空间层运行了哪些服务和守护进程。这些服务守护进程都是直接或者间接地由init进程启动的。例如,对于recovery系统来说,它最主要提供的功能就是让用户升级系统,也就是它的主要用户空间服务就是负责执行长级任务的recovery程序。又如,我们正常使用的Android系统,它的主要用户空间服务和守护进程都是由system.img镜像提供的,此外,我们还可以通过userdata.img镜像来安装第三方应用来丰富手机的功能。因此,我们也可以说,init进程启动的服务决定了系统的功能。当然 ,这些功能是建立是硬件的基础之上的。
CM ROM
androidROM刷机:https://blog.csdn.net/luoshengyang/article/details/29688041
下载编译需要前几篇的知识:repo和编译系统
用户正常使用Android设备时的系统,主要是包含有两个分区:System分区和Boot分区。System分区包含有Android运行时框架、系统APP以及预装的第三方APP等,而Boot分区包含有Kernel和Rootfs
fastboot为bootloader的一种交互启动方式,可以刷recover和普通模式,recovery则是可以刷普通模式。
recover与普通模式则是俩个系统。
关于cm:
2016年12月23日,Cyanogen公司宣布他们关闭CyanogenMod的服务器
CyanogenMod随即宣布会进行转移,并更名为LineageOS
于是编译小米3的lineageos
Cancro是mi3/4 :小米3的电信版和小米4移动版,刷机包前缀都是cancro
https://www.cnblogs.com/jiaoxiake/p/6875864.html 好的下载编译教程
https://github.com/LineageOS 其git仓库
https://www.lineageos.org/ 其官网
https://download.lineageos.org/cancro lineageos对小米的支持
https://wiki.lineageos.org/devices/cancro lineageos对mi3的信息
https://wiki.lineageos.org/devices/cancro/build 官方构建方法
https://wiki.lineageos.org/devices/cancro/install 官方刷机方法
一:找到目标测试:
在官网的支持https://download.lineageos.org/cancro上找到其编译好的镜像测试-同时按博客中的去git中查找是否存在源码与设备是否开源
刷机-adb可以在Android和恢复模式下工作
因为这个机子只能支持到14.1也就是android7.0.想测试更高版本的源代码请买google官方机
测试刷机成功
二:下载源代码
参考:https://www.cnblogs.com/jiaoxiake/p/6875864.html
https://wiki.lineageos.org/devices/cancro/build
远程连接telent
下载构建包,注意和官方的环境有所不同,不要重用
sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
由于需要vpn所以一直用root权操作,注意PATH配置,环变与变量是和shell绑定的,不是用户。
其它步骤一样。直到repo sync
三:编译
获取设备文件除了breakfast。还有单独的项目提供各设备的文件
https://github.com/TheMuppets
在.repo/loccal_mainifest/roomsevice.xml 文件中新增一行:
然后执行repo sync 同步
编译失败,java-doc:错误找不到okhttp.connectionpool的类文件。
未找到解决方法。