一、下载源码
1 . 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir ~/bin PATH=~/bin:$PATH
2 . 下载 Repo 工具,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
3 .创建一个空目录来存放您的工作文件:
mkdir AndroidSource cd AndroidSource
4. 配置GIT
git config --global user.name "Your Name" git config --global user.email "you@example.com"
5. 下载源码
-b 后面接的是分支名称,当前下的是android 9.0开发分支,在这个网站上可以查询android源码的分支:https://android.googlesource.com/platform/frameworks/base/+refs
repo init -u https://android.googlesource.com/platform/manifest -b pie-dev
6. 同步代码
repo sync -j8
7. 下载驱动
我使用的是Pixel2xl,在 https://developers.google.com/android/drivers 页面下载相应的二进制驱动
将下载的压缩包解压出的自解压脚本放在源码树的根目录下,并运行.sh 文件
运行后,会提示你查看证书,按Enter键一行行的查看,出现下面的输入提示时,输入 I ACCEPT
,解压到了vendor
目录下。其它驱动同理执行。
二、编译源码
1. 清理目录
为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用以下命令删除所有以前编译操作的已有输出
make clobber
2. 初始化编译环境
source build/envsetup.sh
3. 选中需要编译的 版本,需要和自己的手机,下载的驱动相对应
编译的版本有 user,userdebug,eng,三者具体差异Google也在官方文档中给出了说明:https://source.android.com/source/building
lunch
4. 编译
make -j8
三、导入源码到AS
1. 编译IDE iml
在编译完android源码后,再编译 IDE,成功后再源码根目录会生成android.ipr文件和android.iml文件
mmm development/tools/idegen/ ./development/tools/idegen/idegen.sh
可能会遇到的错误:
Couldn't locate the directory
解决方案:使用MAC原始终端bash,不要使用zsh等~
2. 修改android.iml文件中如下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <module version="4" relativePaths="true" type="JAVA_MODULE"> 3 <component name="ModuleRootManager" /> 4 <component name="NewModuleRootManager" inherit-compiler-output="true"> 5 <exclude-output /> 6 <content url="file://$MODULE_DIR$"> 7 <!--sourceFolder标签表示需要索引的代码目录--> 8 <sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/java" isTestSource="false" /> 9 <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" /> 10 <!--excludeFolder标签表示这个目录下所有内容都不索引--> 11 <excludeFolder url="file://$MODULE_DIR$/.repo" /> 12 <excludeFolder url="file://$MODULE_DIR$/abi" /> 13 <excludeFolder url="file://$MODULE_DIR$/art" /> 14 <excludeFolder url="file://$MODULE_DIR$/bionic" /> 15 <excludeFolder url="file://$MODULE_DIR$/bootable" /> 16 <excludeFolder url="file://$MODULE_DIR$/build" /> 17 <excludeFolder url="file://$MODULE_DIR$/cts" /> 18 <excludeFolder url="file://$MODULE_DIR$/dalvik" /> 19 <excludeFolder url="file://$MODULE_DIR$/developers" /> 20 <excludeFolder url="file://$MODULE_DIR$/development" /> 21 <excludeFolder url="file://$MODULE_DIR$/device" /> 22 <excludeFolder url="file://$MODULE_DIR$/docs" /> 23 <excludeFolder url="file://$MODULE_DIR$/external" /> 24 <excludeFolder url="file://$MODULE_DIR$/external/bluetooth" /> 25 <excludeFolder url="file://$MODULE_DIR$/external/chromium" /> 26 <excludeFolder url="file://$MODULE_DIR$/external/emma" /> 27 <excludeFolder url="file://$MODULE_DIR$/external/icu4c" /> 28 <excludeFolder url="file://$MODULE_DIR$/external/jdiff" /> 29 <excludeFolder url="file://$MODULE_DIR$/external/webkit" /> 30 <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" /> 31 <excludeFolder url="file://$MODULE_DIR$/frameworks/base/tests" /> 32 <excludeFolder url="file://$MODULE_DIR$/frameworks/base/tools" /> 33 <excludeFolder url="file://$MODULE_DIR$/hardware" /> 34 <excludeFolder url="file://$MODULE_DIR$/libcore" /> 35 <excludeFolder url="file://$MODULE_DIR$/libnativehelper" /> 36 <excludeFolder url="file://$MODULE_DIR$/ndk" /> 37 <excludeFolder url="file://$MODULE_DIR$/out" /> 38 <excludeFolder url="file://$MODULE_DIR$/pdk" /> 39 <excludeFolder url="file://$MODULE_DIR$/platform_testing" /> 40 <excludeFolder url="file://$MODULE_DIR$/prebuilt" /> 41 <excludeFolder url="file://$MODULE_DIR$/sdk" /> 42 <excludeFolder url="file://$MODULE_DIR$/tools" /> 43 <excludeFolder url="file://$MODULE_DIR$/vendor" /> 44 <excludeFolder url="file://$MODULE_DIR$/toolchain" /> 45 <excludeFolder url="file://$MODULE_DIR$/system" /> 46 <excludeFolder url="file://$MODULE_DIR$/prebuilts" /> 47 <excludeFolder url="file://$MODULE_DIR$/phoenix" /> 48 </content> 49 50 <orderEntry type="sourceFolder" forTests="false" /> 51 <orderEntry type="inheritedJdk" /> 52 <orderEntryProperties /> 53 </component> 54 </module>
3. 打开源码
使用androidstudio选择open(源码目录下android.ipr文件)
4. 实现跳转
实现在androidstudio中ctrl点击源码跳转:
点击下图箭头(或直接command+enter):
添加如下:
四、刷机
1. 检查刷机的镜像
编译的可刷机的文件有 boot.img、system.img、recovery.img、cache.img、userdata.img 五个镜像文件。
我们在刷机前输出ANDROID_PRODUCT_OUT变量的值,确保它的值和编译后镜像输出目录的路径值一致。如果不一致的话,重新设置ANDROID_PRODUCT_OUT的值与编译后镜像输出目录路径值一致。
echo $ANDROID_PRODUCT_OUT
2. 手机进入bootloader 模式
adb reboot bootloader
3. 手机解锁
fastboot oem unlock
4. 刷入镜像
fastboot -w flashall
5. 设备上锁
fastboot oem lock