MAC环境下 Android P 系统源码下载、编译、导入到AS、Pixel2xl刷机 实战

一、下载源码

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>
View Code

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

 

posted @ 2018-09-29 16:25  狐狸已化妖  阅读(2611)  评论(0编辑  收藏  举报