sudo apt-get install git
mkdir ~/bin
PATH=~/bin:$PATH
git config --global user.email "[email protected]"
git config --global user.name "xxx"
sudo apt-get install python
repo 是一个python 脚本(所以我们上面要配置Python环境),因为Android源码包含数百个git库,简化帮助管理git Android版本库的工具。
sudo apt-get install curl
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
google 的AOSP 的话,因为FQ和数据量太大,且需要需要影响速度,因此优先考虑国内的镜像(本文使用的是清华的源)。
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
创建一个AOSP文件夹,cdd到文件夹里面去待会儿需要把源码下载到这里:
mkdir aosp
cd aosp
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r36
AOSP对应关系查看地址: 对应关系
repo sync -j4
-j表示并发数.
因为Android的源码越来越大,repo sync失败的概率也越来越高。所以我们可以避开使用repo sync的方式,而采用下载预下载包的方式来实现下载源码。
在windows或者Linux上面通过迅雷下载https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
。
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar #下载初始化包
tar xf aosp-latest.tar
cd AOSP->解压得到的 AOSP 工程目录,这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
cd .repo/manifests
git branch -a
repo init -b android-9.0.0_r55
repo sync # 正常同步一遍即可得到完整目录
或者直接在aosp目录设置好你要同步的分支:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r36
repo sync # 正常同步一遍即可得到完整目录
如果仅加载具体模块:
repo sync platform/prebuilts/clang/host/darwin-x86
通过自定义Shell脚本启动源码下载可以有效防止,同步源码时脚本被卡死的问题。
#!/bin/bash
echo “======= start repo sync =======”
cd ~/Desktop/AOSP
repo sync -j4
while [ $? == 1 ]; do
echo “====== sync failed! re-sync again =====”
sleep 3
repo sync -j4
sh down.sh
编译AOSP源码需要配置好JAVA环境.
sudo apt-get update
sudo apt-get install openjdk-8-jdk
source build/envsetup.sh
make clobber
lunch XX
选择与设备对应的编译版本.如:编译开发工程师的版本lunch aosp_x86-eng
,可以方便debug
编译版本选择
如果lunch
命令没有加对应的编译版本则会有以下信息输出:
You're building on Linux
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. full_fugu-userdebug
8. aosp_fugu-userdebug
9. mini_emulator_arm64-userdebug
10. m_e_arm-userdebug
11. m_e_mips64-eng
12. m_e_mips-userdebug
13. mini_emulator_x86_64-userdebug
14. mini_emulator_x86-userdebug
15. aosp_dragon-userdebug
16. aosp_dragon-eng
17. aosp_marlin-userdebug
18. aosp_sailfish-userdebug
19. aosp_flounder-userdebug
20. aosp_angler-userdebug
21. aosp_bullhead-userdebug
22. hikey-userdebug
23. aosp_shamu-userdebug
Which would you like? [aosp_arm-eng]
这里需要选择编译目标的格式(选择前面的序号,按回车即可),编译目标的格式组成为BUILD-BUILDTYPE
,比如aosp_arm-eng的BUILD为aosp_arm,BUILDTYPE为eng。 其中BUILD表示编译出的镜像可以运行在什么环境,aosp代表Android开源项目,arm表示系统是运行在arm架构的处理器上。 更多参考官方文档文档。
BUILDTYPE 指的是编译类型,有以下三种:
make -j8
j后面数字几就是多少线程,最多不超过你的cpu总线程,
编译成功会显示如下:
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label: system
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2216/131072 inodes and 199826/524288 blocks
[100% 7669/7669] Install system fs ima.../target/product/generic_x86/system.img
out/target/product/generic_x86/system.img+ maxsize=2192446080 blocksize=2112 total=2147483648 reserve=22146432
#### make completed successfully (01:24:41 (hh:mm:ss)) ####
会在源码跟目录out/target/product/angler目录下生成镜像文件:
最终会在 out/target/product/generic_x86/目录生成了三个重要的镜像文件: system.img、userdata.img、ramdisk.img。大概介绍着三个镜像文件:
报错信息:
error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
解决方式:
sudo apt-get update
for 32-bit binaries :
sudo apt-get install libncurses5:i386
for 64-bit binaries :
sudo apt-get install libncurses5
报错信息:
/bin/bash: m4: command not found
解决方式:
sudo apt-get install m4
报错信息:
FAILED: out/host/linux-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_scan.c
解决方法:
export LC_ALL=C
LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行, 但是不可以修改~/.bashrc,会导致终端内中文显示为数字(应该是对应的编码)
jack server交互命令:
jack-admin start-server
jack-admin kill-server
jack-admin list-server
jack-admin uninstall-server
mm -j32 showcommands &> mm.out
jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
jack-admin dump-report
jack-admin dump-re
jack-admin server-log 查找log所在目录
问题一:多用户同时编译时报错
错误信息:
FAILED: setup-jack-server
/bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 4.11.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-4.31.CANDIDATE.jar 4.31.CANDIDATE || exit 47 )"
Jack server already installed in "/home/disk/lixialong/.jack-server"
Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log
SSL error when connecting to the Jack server. Try 'jack-diagnose'
SSL error when connecting to the Jack server. Try 'jack-diagnose'
解决方案:同时修改 H O M E / . j a c k − s e t t i n g s 和 HOME/.jack-settings和 HOME/.jack−settings和HOME/.jack-server/config.properties中的端口号(比如都改为8386/8387,端口号值为0~65535,1024下的值不要用),方可支持多用户同时编译。
查看端口是否一致:cat ~/.jack-server/config.properties|grep -i port && cat ~/.jack|grep -i port|grep -v LOG &&cat ~/.jack-settings|grep -i port
SERVER_PORT_SERVICE=8386
SERVER_PORT_ADMIN=8387
jack.server.service.port=8386
jack.server.admin.port=8387
SERVER_PORT_SERVICE=8288
SERVER_PORT_ADMIN=8289
问题二: No Jack server running. Try 'jack-admin start-server’
错误信息
com.android.jack.server.api.v01.ServerException: './config.properties' musthave permission rw------- but have rwx------
Caused by: java.io.IOException: './config.properties' must have permissionrw------- but have rwx------
...
解决方案:通过查看文件 H O M E / . j a c k − s e r v e r / l o g s / j a c k − s e r v e r − 0 − 0. l o g : 发 现 是 配 置 文 件 的 权 限 不 对 造 成 的 , 把 文 件 HOME/.jack-server/logs/jack-server-0-0.log: 发现是配置文件的权限不对造成的,把文件 HOME/.jack−server/logs/jack−server−0−0.log:发现是配置文件的权限不对造成的,把文件HOME/.jack-server/config.properties的权限由rwx改为rw即可解决问题。
问题三:未配置变量信息导致问题
错误信息:
ERROR: Communication error with Jack server (52) make: *** [out/target/common/obj/JAVA_LIBRARIES/libutil_intermediates/classes.jack] Error
这种情况多半属于jack-admin缺少变量JACK_JAR而导致的。
解决方案:
工程根目录内执行以下三句,再进行编译。
export JACK_JAR=./out/host/linux-x86/framework/jack.jar
./out/host/linux-x86/bin/jack-admin stop-server
./out/host/linux-x86/bin/jack-admin start-server
问题四:TLSv1, TLSv1.1 禁用
报错信息:
Ensuring Jack server is installed and started
解决方式:
sudo vim /etc/java-8-openjdk/security/java.security
vim里面输入/搜索jdk.tls.disabledAlgorithms= 将TLSv1, TLSv1.1 光标选中输入x删除掉取消禁用.然后wq保存.
修改后:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
aosp/prebuilts/sdk/tools/ 目录下执行./jack-admin kill-server && ./jack-admin start-server 成功。
报错信息:
/bin/bash: xmllint: command not found
解决方案:
sudo apt-get install libxml2-utils
报错信息
Try increasing heap size with java option '-Xmx'错误
解决方案:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
jack-admin kill-server
jack-admin start-server
在编译完成之后,就可以通过以下命令运行Android虚拟机了,由于之前已经执行过source和lunch命令了,可以直接运行:
source build/envsetup.sh
lunch aosp_x86-eng
emulator
就会启动模拟器了.
尝试使用-verbose选项(即“emulator -verbose”),这将打印模拟器正在做什么/正在探测哪些文件,并给出有关错误的更多详细信息。
emulator -use-system-libs
启动模模拟器报错:
emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
Please ensure KVM is properly installed and usable.
CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm)
sudo apt-get install qemu-kvm cpu-checker
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
sudo addgroup kvm
sudo usermod -a -G kvm peng
sudo chgrp kvm /dev/kvm
sudo gedit /etc/udev/rules.d/60-qemu-kvm.rules
KERNEL=="kvm", GROUP="kvm", MODE="0660"
上面的编译我们都是对整个Android系统进行编译的.如果我们要编译系统的Settings应用模块,这就属于源码单编某一个模块.
在AOSP根目录执行:
source build/envsetup.sh
lunch aosp_x86-eng
进入Settings的目录:
cd packages/apps/Settings
通过mm编译当前目录下的模块,不编译依赖模块。
mm
编译成功后会有提示生成文件的存放路径。除了Settings.odex文件,还会在out/target/product/generic_x86/system/priv-app/Settings目录下生成Settings.apk。
此外还有以下命令可以进行单编:
如果对系统模块的源码进行修改,查看生成的APK文件,有两种方式:
在源码中,存在idegen模块,该模块专门用来为idea工具生成系统源码的project.默认情况下aosp编译并不会生成该文件。
在开始编译该模块之前,首先确保你已经编译过Android源码了,如果没有,先要进行AOSP编译.和编译普通的模块一样,我们用mmm命令编译idegen.
在开始编译之前,检查out/host/linux-x86/framework/目录下是否存在idegen.jar文件,存在则说明你已经编译过该模块,否者,则需要编译.执行如下命令即可:
source build/envsetup.sh 将脚本添加到系统内
lunch 并选择要编译的项目
mmm development/tools/idegen/
sudo ./development/tools/idegen/idegen.sh
其中mmm development/tools/idegen/执行完成后会生成idegen.jar,而sodo ./development/tools/idegen/idegen.sh则会在源码目录下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.
简单的说明一下这三个文件的作用:
"android.iml"和"android.ipr"一般是"只读"的属性,我们这里建议大家,把这两个文件改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况,执行如下两条命令即可。
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
IDE内存优化
因为源码数量非常多,所以导入时IDEA/AS会需要大量内存。所以我们需要编辑IDE的VM选项。配置文件为
IDEA的是IDEA_HOME/bin/idea.vmoptions
AS的是AS_HOME/bin/studio.vmoptions
注意,AS有一个64位版本的配置文件studio64.vmoptions最好一并修改了。
找到上面的配置文件,将对应的内容修改为
-Xms748m -Xmx748m
即将VM的堆内存最小和最大都设置为748m。官方要求至少在748m以上,根据实际情况进行配置即可
接下来,我们导入源码:打开Android Studio,点击File->Open,选择刚才生成的android.ipr文件即可,然后就是漫长的等待,注意此时是将源码完全导入到AS中了。
如果AS运行比较慢我们就需要排除一些不需要导入的模块。
很多情况下,我们希望不导入某些模块,那么就可以在导入前修改android.iml文件,通过添加配置的方式告诉AS不导入某些模块,比如现在我不想导入art模块,那么就在android.iml文件中添加:
不难发现,其格式为:
注:编译生成的android.iml文件中已经默认排除了一些模块,通过搜索excludeFolder关键字可找到.
如果比较关心framworks和packages模块,则保留framworks和packages模块,将其他模块全部排除,在android.iml中添加了以下配置:
完成之后,按照上面说的步骤,使用Android Studio选中"android.ipr"打开项目即可。
等项目加载完成后,我们还可以通过Android Studio对Exclude的Module进行调整,所以也不用害怕这里Exclude掉了有用的代码,或少Exclude了一部分代码,在项目加载完以后再进行调整就行了。此处和在android.iml文件中添加excludeFolder 的功能是一样的;
打开"Project Structure",中间的窗口选择"android",在弹出的窗口中左边栏中选择"Modules",而后在右边的窗口中选择"Sources"。
在这里我们可以看到项目的所有代码目录,我们可以选中不需要的module,并点击上面的"Excluded"按钮,当被选中的目录变为橙色,即表示完成Exclude操作;
如果想要取消对某代码目录的Exclude操作,选中该目录,再次点击"Excluded"按钮,等待目录变为蓝色即可。
当我们导入完源码后,就可以查看整个系统的源码,但是有个问题,打开的Java代码,查看集成关系或者调用关系的时候,还是会跳转到.class文件中,而不是相应的Java类,
比如PhoneWindow.java继承了Window.java,但是我们跳转的时候却跳到了Window.class,并没有跳转到frameworks目录下对应的源码类,而是jar包中的类。
我们需要让其跳转到相应的类中。我们就需要新建一个没有任何jar库的SDK给到系统源码项目的依赖, 这里的配置JDK/SDK,是用于解决在分析和调试源码的过程,能正确地跳转到目标源码,
而非SDK中的代码。
新建JDK
Project Structure -> SDKs, 新建 JDK, 其中JDK目录可选择跟原本JDK一致即可,任意取一个名字,这里取empty_jdk 然后删除这里取empty_jdk其classpath和SourcePath的内容,确保使用Android系统源码文件
jdk_none
配置SDK
Project Structure -> SDKs, 选中与自己编译的AOSP对应的SDk版本(如果没有对应的就到SDKmanager里面取下载一个对应的版本) Android API 28 Platform, 然后选择其Java SDK为前面新建的empty_jdk
sdk_none
选择SDK
Project Structure -> Project -> 选中Project SDK, 选择前面的Android API 28 Platform
project_sdk
建立依赖
Project Structure -> Modules -> android -> Dependencies: Module选择我们上面编辑过的SDK。然后点击下图绿色的+号来选择Jars or directories,将 aosp/frameworks 目录添加进来,再按照同样的步骤将aosp/external 目录, 也可添加其他所关注的源码;
然后选中其他所有的依赖,点击右边的下移箭头将其他依赖移动到我们添加的目录下面。(或者将其他的所有依赖删除)
注意,一般我们大部分人不在ubuntu下开发app ,为了能在Windows或Mac系统下也能使用Android Studio查看源码,
可以按照上面的步骤,那样直接拷贝ubuntu下的android.iml和android.ipr文件到Windows或Mac系统下的android源码根目录下,
然后导入Adnroid Studio中,这样就可以在这两个平台上进行查看源码了。
要调试代码,首先要打开模拟器,注意不是Android Studio自带的模拟器,而是通过编译后的代码启动的模拟器,否则可能出现代码不对应的问题。
直接运行emulator命令是无法启动的,执行方法如下:
source build/envsteup.sh
lunch 6 //和编译时对应
emulator
接下来通过Run->Attache debugger to Android process,在弹出的Choose Process框内必须选择Show all processes,否则看不到相关的进程:然后选择system_process,就可以进行调试了。
机器首先要启动,CPU 最先执行的一段程序就是 BootLoader,是在操作系统内核运行之前运行的一段小程序。其实Bootloader就相当于电脑的bios。 通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
。很多的手机厂商都会锁住BootLoader,这样你就只能使用官方的系统,想要第三方的ROM能够运行,或者破解官方系统这时候就需要进行bootloader解锁!这是刷机的第一步, 当然也有很多手机没有bootloader锁!我们只需要知道要想刷机就得先bootloader解锁。
fastboot,它是bootloader后期进入的一个特殊阶段。例如小米手机开机同时按音量下建就会进入这个模式.也是一种模式。可以通过数据线与电脑连接,然后在电脑上执行一些命令,如刷系统镜像到手机上。fastboot可以理解为实现了一个简单的通信协议,接收命令并更新镜像文件,其他什么的干不了。
需使用USB数据线连接电脑和手机的一种线刷刷机模式,大部分第三方的Recovery刷入,或者救砖均是在Fastboot模式下进行,所以这种方式称为线刷。 fastboot需要bootloader的支持,所以不是每家手机都会支持这种模式。Fastboot 可以说是一个通信协议,电脑可以通过这个通信协议,直接向手机系统不同分区中写入文件(.img 文件)。
大多数安卓手机,都可以在关机状态下,然后同时按住【电源键】+【音量+】键,大约2-3s后,就可以进入Fastboot模式。 作为开发者在开机状态下可以用下面的方式进入:
adb reboot bootloader
然后就可以执行下面的fastboot命令了:
fastboot flashing unlock #6.0以上设备 设备必须解锁,开始刷机(这个不同的手机厂商不同)
fastboot erase {partition} # 擦除分区
fastboot erase frp # 擦除 frp 分区,frp 即 Factory Reset Protection,用于防止用户信息在手机丢失后外泄
fastboot flash boot boot.img # 刷入 boot 分区
fastboot flash system system.img # 刷入 system 分区
fastboot flash recovery recovery.img # 刷入 recovery 分区
fastboot flashall #烧写所有分区,注意:此命令会在当前目录中查找所有img文件,将这些img文件烧写到所有对应的分区中,并重新启动手机。
fastboot format data # 格式化 data 分区
fastboot flashing lock # 设备上锁,刷机完毕
fastboot continue # 自动重启设备
fastboot reboot# 重启手机
fastboot reboot-bootloader# 重启到bootloader 刷机用
fastboot devices ## 发现手机,显示当前哪些手机通过fastboot连接了
如果没有进入fastboot,bootloader继续执行,如果又发现有特殊的按键组合,比如小米上是音量上键和开机键,则会进入recovery模式。它里面包含了一个kernel以及一个可执行程序recovery,以
及一些初始化文件。Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式,也叫工程模式,像是电脑上的小型winPE系统,winPE可以在电脑上安装操作系统,或者做些删除备份、管理的工作。
官方Recovery用处不大,所以通常会刷入一个第三方的Recovery ,Recovery 更类似于一个小型的管理系统。只不过功能简单,所做的管理有限。在recovery模式下,会加载了部分文件系统,所以才可以读sdcard中的update.zip进行刷机,当然,也可以清除cache和用户数据。
该模式可根据用户的需要进行修改,因此有官方recovery模式以及第三方recovery模式。第三方recovery模式可以识别第三方rom包,因此可以用来刷机。而官方recovery一般不能识别第三方zip文件。好用的第三方RE:TWRP 和 CWM Recovery刷机包是称为Google Update 格式。在用Recovery恢复时,刷机包通常放在SD卡里,所以这里刷机一般称为卡刷。
AOSP是一个由谷歌维护的开源操作系统开发项目,既然是开源项目,也就意味着任何人都可以自由地审查和贡献代码以及修复项目仓库,而谷歌引领着大方向和大部分的开发工作。AOSP会定期为Android加入最新的安全补丁,谷歌每年也会在其I/O开发者大会上公布操作系统的新功能。除了开放贡献代码外,AOSP还可以在开源许可下自由使用和修改。
比如,小米,华为等厂商根据自己的目的自由调整该项目,并开发了自己的衍生产品,包括多用途的emui和miui。需要注意的是,AOSP包含了开发者构建Android所需的一切,但它并不包括成品智能手机所需的一切。
谷歌和AOSP无法为所有硬件配置提供内核设备驱动。所谓设备驱动,是指手机硬件所需的固件,比如处理器或摄像头。手机和SoC制造商,如高通和三星,必须将这些驱动程序纳入他们的Android构建中。
这也是为什么从AOSP到实际设备的系统更新需要一定时间的原因。其次AOSP也不包含谷歌的软件应用套件,如Chrome浏览器、YouTube,甚至谷歌Play商店。
它也不包括谷歌的一些底层技术和API,而这些技术和API可以实现移动支付、语音命令和云存储等功能,这些都是作为谷歌移动服务(GMS)单独授权的。 任何厂商想要在系统中安装GMS,都必须为自己的设备获得GMS授权和移动应用分发协议(MADA),然后通过多项兼容性测试。有Android兼容性测试套件(CTS)来验证软件和硬件以及API。
正因为AOSP开源的特性,许多的硬件厂商的驱动代码并不是开源的,所以AOSP会有一个硬件抽象层 (HAL),来保证驱动程序代码不被泄露。大多数手机厂商都是从高通等芯片厂商那里获得AOSP版本,该AOSP版本为硬件量身定坐了高通驱动程序,所以刷入真机是可以正常的运行。
在上面步骤中我们编译好了AOSP可以直接通过模拟器运行.编译aosp时也会生成system.img文件,这个文件是最终刷机用的,但是system.img文件必须依赖驱动文件生成,
如果没有放入对应的驱动就编译,那么生成的镜像也是无法正常刷机的。通过上文我们知道aosp 仅是一套源码,真机运行需要厂商的驱动,厂商的驱动是不包含在AOSP中的,
第三方ROM(如CM等)的厂家驱动是自行提取的。但是google也开源了nexus和pixel对应的AOSP版本的硬件驱动代码.如果我们有nexus或者是pixel设备就可以下载相应的驱动进行编译,
然后将编译好的系统输入到设备中去.
需要根据你选择的版本
去驱动页面下载合适的驱动。
将驱动文件下载后,解压到AOSP根目录,得到几个.sh文件,执行后,会在AOSP下创建vendor目录,里面包含了驱动。
再次make -j4
,此次编译的结果就包含了驱动,编译出新的系统.
一般定制ROM其实就是对手机内存里的system/app文件夹的内容进行自定义,系统所有的程序都在这个文件夹里,比如浏览器、拨号器、联系人等。自己安装的软件\data\文件夹中。
在上文中可以了解到厂商的驱动是不包含在AOSP中的.因此编译出来的AOSP系统源码要在真机上运行,还需要加上厂商驱动进行编译才能烧录到真机上使用.
Google提供了Nexus和Pixel这两个太子机的驱动,我们可以在驱动页面下载合适的驱动。
Driver Binaries for Nexus and Pixel Devices
extract-google_devices-blueline.sh
,extract-qcom-blueline.sh
sh extract-google_devices-blueline.sh
vendor/
vendor/google_devices/
vendor/google_devices/marlin/
vendor/google_devices/marlin/device-vendor-marlin.mk
vendor/google_devices/marlin/android-info.txt
vendor/google_devices/marlin/BoardConfigVendor.mk
vendor/google_devices/marlin/BoardConfigPartial.mk
vendor/google_devices/marlin/proprietary/
vendor/google_devices/marlin/proprietary/vendor.img
vendor/google_devices/marlin/device-partial.mk
Files extracted successfully.
第2个 高通驱动
sh extract-qcom-blueline.sh
vendor/
vendor/qcom/
vendor/qcom/marlin/
vendor/qcom/marlin/BoardConfigPartial.mk
vendor/qcom/marlin/proprietary/
vendor/qcom/marlin/proprietary/lib64/
vendor/qcom/marlin/proprietary/lib64/libbcc.so
vendor/qcom/marlin/proprietary/lib64/libLLVM_android.so
vendor/qcom/marlin/proprietary/lib64/libiperf.so
vendor/qcom/marlin/proprietary/lib64/libminui.so
vendor/qcom/marlin/proprietary/ATT_profiles.xml
vendor/qcom/marlin/proprietary/pktlogconf
vendor/qcom/marlin/proprietary/VZW_profiles.xml
vendor/qcom/marlin/proprietary/ROW_profiles.xml
vendor/qcom/marlin/proprietary/libclcore_neon.bc
vendor/qcom/marlin/proprietary/sanitizer-status
vendor/qcom/marlin/proprietary/libiperf.so
vendor/qcom/marlin/proprietary/qcrilhook.jar
vendor/qcom/marlin/proprietary/libminui.so
vendor/qcom/marlin/proprietary/libion.so
vendor/qcom/marlin/proprietary/iperf3
vendor/qcom/marlin/device-partial.mk
vendor/google_devices/
vendor/google_devices/marlin/
vendor/google_devices/marlin/device-vendor-marlin.mk
vendor/google_devices/marlin/android-info.txt
vendor/google_devices/marlin/BoardConfigVendor.mk
Files extracted successfully.
执行后,会在AOSP下创建vendor目录,里面包含了驱动。编译完成后,执行make fastboot adb
单独编译fastboot和adb。
重新对AOSP进行编译.此次编译的结果就包含了驱动,编译完成后,执行make fastboot adb 单独编译fastboot和adb。
参考资料:
Android 镜像使用帮助
MIUI ROM适配之旅第一天——认识Android手机
Android FrameWork 学习之Android 系统源码调试
从CM刷机过程和原理分析Android系统结构
Android ROM移植
android rom移植知识普及
Android系统源码修改
android系统的分区结构
Android ROM的制作与烧录
android系统源码中添加app源码(源码部署移植)