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系统. 

      

  • 相关阅读:
    iOS微信支付
    iOS登录及token的业务逻辑(没怎么用过,看各种文章总结)
    IOS 支付宝支付开发流程
    iOS SDWebImage实现原理
    站立会议1
    作业六:团队项目——编写项目的Spec
    作业5
    站立会议8
    站立会议 3
    站立会议 2
  • 原文地址:https://www.cnblogs.com/ciml/p/13714036.html
Copyright © 2011-2022 走看看