zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    某题2
    某题1
    某题
    DAY 7
    DAY 4
    数据结构(六)图
    【转载】大数据面试知识图谱
    数据结构(四)二叉树
    Scala(一)基础
    Java虚拟机(一)
  • 原文地址:https://www.cnblogs.com/larack/p/9722954.html
Copyright © 2011-2022 走看看