zoukankan      html  css  js  c++  java
  • 编译AOSP并刷入Pixel设备

    我的设备是*鱼上淘的Pixel 2, 2015年之后的设备刷写步骤基本一致(Pixel 2XL, Pixel 3, Pixel 3XL, Pixel 4)

    上一篇博客讲了如何下载编译AOSP, 但只能编译出模拟器版本, 缺少厂商驱动(没有vendor目录), 不能用来刷机, 因此首先要下载厂商驱动

    下载驱动

    https://developers.google.com/android/drivers 包含AOSP非master分支Nexus and Pixel设备的驱动. 这里我们下载 驱动 与上篇提到的分支 android-8.1.0_r35 对应

    将下载的2个tar文件放到aosp根目录 解压, 安装驱动

    # 解压得到2个sh自释放文件
    extract-google_devices-walleye.sh  extract-qcom-walleye.sh
    # 安装 
    sh extract-google_devices-walleye.sh
    sh extract-qcom-walleye.sh
    
    # 看完license输入 I ACCEPT 安装完成, 此时ls会看到vendor文件夹

    重新编译AOSP

    source build/envsetup.sh
    lunch aosp_walleye-userdebug
    # 经历漫长的等待后, 编译出镜像

    刷写镜像 

    1. 解锁

    参考 https://www.cnblogs.com/ciml/p/13949911.html

    2. 刷写设备

    fastboot flashall -w # -w选项意思wipe data, 会清空手机上的所有数据
    # 注意! 此命令需要在刚才编译源码的同一终端窗口内执行, 或者执行过lunch的终端中, 否则环境变量中没有如 $OUT 的变量

    刷好设备, 即可体验原版Android系统了, 但原版系统连上WiFi后, 总是提示网络连接不可用

    为啥嗫-因为原版系统的网络探针访问的是Google的服务器,不够科xue的网络肯定是连不上了. 这个WiFi图标让人很不爽,下面我们来改点东西修复它.

    修改Captive Portal Server

    打开 vim frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java 可以看到如下两行代码

    // Default configuration values for captive portal detection probes.
    private static final String DEFAULT_HTTPS_URL     = "https://www.google.com/generate_204";
    private static final String DEFAULT_HTTP_URL      =
                "http://connectivitycheck.gstatic.com/generate_204";

    这就是AOSP默认的检测网络是否畅通的探针地址, AOSP默认使用https (如果你没有通过adb修改的话)

    现在修改为如下:

    // https://captive.v2ex.co/generate_204 is also acceptable 
    // 这里我们改为小米的, V2EX的也可以, 我测试这里小米的快一点
    private static final String DEFAULT_HTTPS_URL = "https://connect.rom.miui.com/generate_204"; private static final String DEFAULT_HTTP_URL = "http://connect.rom.miui.com/generate_204";

     重新编译, 生成亲的系统镜像, 因为framework位于system.img, 所以这里我们单独刷system分区就可以.

    # 重新编译, 成功后 可见类似输出

    [ 99% 615/616] Install system fs image: out/target/product/walleye/system.img
    out/target/product/walleye/system.img+ maxsize=2740531200 blocksize=135168 total=1077064032 reserve=27709440
    [100% 616/616] Target vbmeta image: out/target/product/walleye/vbmeta.img

    单刷system分区

    fastboot flash system system.img
    fastboot flash system_a system_other.img
    fastboot set_active b              # 将slot b设为启动分区
    fastboot reboot

     由于Android8之后采用A/B更新, 所以有2套分区, 刷分区方式和以往不同, 参考: https://wertherzhang.com/android8-partiton-table/

    补充一下: 一般修改framework目录的代码, 重新编译单刷system分区即可, 但有时可能会更新到其它分区的镜像, 要以make的最终结果为准, 比如上面我的日志, vbmeta.img镜像也有更新, 则vbmeta.img也要刷入设备, 还有一种方法是到out目录下, 执行 ls -tl 看哪些镜像的修改时间是最新的, 就刷哪些.  如果有漏刷则可能导致无法进入Android系统. 

      

  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/ciml/p/13714036.html
Copyright © 2011-2022 走看看