V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  Android

自己编译 Android 源码烧写到手机里,需要做什么准备工作?

  •  1
     
  •   amiwrong123 · 2022-03-23 20:41:15 +08:00 · 8743 次点击
    这是一个创建于 735 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前手里有书《深入理解 Android 内核设计思想》《深入理解 Android 卷 I 》,我可以按照书上的步骤编译出 img 来。这两本书里都有介绍怎么编译 Android 源码。

    但之前确实没有烧写过手机,只是之前买过小米手机(忘了什么型号,这手机还掉了),然后升级过 ROM ,我记得步骤是先解锁,然后用 论坛上的方法来 线刷。

    1. 第一个问题,我是从淘宝上随便买一个二手安卓手机就可以吗(如何询问卖家,哪种二手手机才是我需要的 可以烧写的手机)?是不是最好买小米的,因为小米的可以解锁

    2. 如果把自己编译出来的 img ,烧写进手机里,我可以之后自己再去百度。不过大佬们也可以推荐点 博客或者教程。

    搞这个事的目的,主要是为了研究 Android 源码,光看书总觉得少了点什么。理论上,我可以加打印日志,或者修改源码了。

    24 条回复    2022-04-06 00:29:35 +08:00
    Donahue
        1
    Donahue  
       2022-03-23 20:45:08 +08:00
    研究源码可能虚拟机也可以?不懂但是感觉物理机刷机很麻烦
    0o0O0o0O0o
        2
    0o0O0o0O0o  
       2022-03-23 20:55:01 +08:00   ❤️ 1
    > 如何询问卖家,哪种二手手机才是我需要的
    在这里挑设备
    https://developers.google.com/android/images

    > 如果(何)把自己编译出来的 img ,烧写进手机里
    你完成了第一点,第二点的确是搜索一下就能知道。
    amiwrong123
        3
    amiwrong123  
    OP
       2022-03-23 21:11:01 +08:00
    @0o0O0o0O0o #2
    谢谢,所以我只能选择 Nexus and Pixel 了呗。网页里只有这两个
    learningman
        4
    learningman  
       2022-03-23 21:12:07 +08:00   ❤️ 1
    任意 lineage 的 offical 机型都可以吧,官方给的编译教程还挺友好的
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2022-03-23 21:15:58 +08:00   ❤️ 1
    @amiwrong123 不是必须,但这样选择一般能轻松很多。

    也可以和 #4 一样考虑别的开源分支
    gam2046
        6
    gam2046  
       2022-03-23 21:17:01 +08:00   ❤️ 1
    想学习,淘宝上购买一些全志、瑞芯微的开发板,而不是二手手机。

    像 lineageos 这类系统,是没有 vendor 代码。当然对 vndk 不感兴趣是不需要了解这部分,仅仅学习 framework 部分也足够。

    不过开发板价格也就一两百,并不贵。

    同理,如果只是想学习 framework ,虚拟机同样可以满足要求,AOSP 编译后直接直接上 AVD 。
    WebKit
        7
    WebKit  
       2022-03-23 21:22:37 +08:00 via Android
    aosp 是没有驱动的。如果你只是要刷自己编译的 rom ,买个以前的 pixel 就可以
    amiwrong123
        8
    amiwrong123  
    OP
       2022-03-23 22:15:45 +08:00   ❤️ 1
    @gam2046 #6
    谢谢回答。但为什么推荐 开发板而不是手机,我有点没懂,因为我感觉不是手机的话,你就没测试一些 app 了,可能也没法去使用 audio 子系统了。(可能我的理解有点肤浅,见谅)

    另外你说的 vndk ,我应该也是需要学习的,因为目前处于 车载安卓 framework 开发 行业。能先把 framework 学习明白了就很不错了。

    不过好像虚拟机也是不错的选择。

    目前对安卓 framework 的学习还是有点迷茫,对 AMS 、PMS 、WMS 之类的服务也没有接触到,所以我觉得 可以写个简单 app (比如我会使用到 activity )来从使用的方式来理解一下,也是找一下 自顶向下 理解的感觉。
    Chowe
        9
    Chowe  
       2022-03-23 22:58:12 +08:00 via iPhone   ❤️ 1
    买个 rk 的开发板,除了通话功能外,其他你都能在上面使用,还有社区和文档,算是比较友好的
    gam2046
        10
    gam2046  
       2022-03-24 07:51:43 +08:00   ❤️ 3
    开发板可以做几乎手机上所有的事情,可以正常安装应用以及使用 Android 全部功能,同时因为开发板资料齐全,即使要使用语音通话一类功能也可以通过相关模块支持。(当然啦,应该需要你自己实现 vendor

    而手机,即使是小米对于开源支持还不错的,也只是开源了内核。从内核到实际能用的 ROM 中间还差了好几步。

    即使是 OEM 厂商,几乎也没有厂家会直接从 AOSP 开始开发,工程量实在巨大,vendtor 的调试令人头秃。通常是 OEM 像 SoC 厂家直接购买一套母版 AOSP 代码,在此基础上开发。因此市面上部分手机从出厂到报废都没升级过 Android 大版本,就是厂家不愿意掏钱去向 SoC 厂家买新版本的代码。

    所以罗永浩说国内手机厂商都是组装厂,并不是毫无依据的。
    FranzKafka95
        11
    FranzKafka95  
       2022-03-24 08:08:20 +08:00 via Android
    @gam2046 哥们有没有合适的开发板推荐,比如说如果我要开发 Camera/ Audio 相关的
    gam2046
        12
    gam2046  
       2022-03-24 08:24:01 +08:00
    @FranzKafka95 #11 不太明白你的需求。如果是 framework 、vendor 相关音视频开发,非特殊需求的话,音频上没什么开发需求了(变声?大雾
    摄像头方向的多用于自动美颜、拍月亮啥的。随便选择一款便宜的开发板即可(全志一般会更便宜些,厂家也不藏资料,RK 有些资料遮遮掩掩),让商家帮你配置好摄像头,并且确认能够提供摄像头驱动代码在内的相关资料,对性能不需要太多的要求,咸鱼上有 100 出头的。甚至模拟器也是可以完成任务的。

    而同样的需求,在应用层也是可以完成的,甚至会更简单,毕竟应用层可以用标准的 c++(非要用 Java 当然也不是不可以)应用层开发就随便找个淘汰手机、模拟器都可以。

    说实话,上来就整 vndk 那一套玩意,难度挺大的,通常还要伴随对内核的了解,至少我当初学的非常困难。许多需求其实在 framework 里也可以完成,只是不优雅而已。

    我看小米、华为这些厂家对于摄像头的优化,极少部分功能是在驱动上完成的,几乎全在应用层实现。
    yolee599
        13
    yolee599  
       2022-03-24 08:46:00 +08:00 via Android   ❤️ 1
    因为手机厂家会定制化开发一些东西,这些资料你是无法拿到的,还有厂家定制的源码不开源的,即使是不开源的你也无法拿到任何库供你使用。比如显示屏驱动,你你知道开背光用的哪个芯片管脚吗?还有手机厂家用的方案不是普通人能接触到的,比如高通,手机厂家想要获取技术支持要和签 NDA 协议,交几百万的钱才行,资料不可能流出来了,泄密了要赔钱的。

    而开发板专门用于开发的,商家会给你提供原理图和 SDK ,用的是比较通用的方案,资料的公开性也更高一点。
    zinwalin
        14
    zinwalin  
       2022-03-24 13:30:19 +08:00
    建议用真机, 我用的是 Pixel 3 , 闲鱼上有那种屏幕有小部分破碎的机器,300 多块钱,用来学习 AOSP 源码很方便。

    编译的机器配置要求挺高,我用的是 AMD 5950x , 应该是家用机比较快的选择,全新编译大概是 40 分钟左右,小修改编译大概是 3 分钟左右。SSD 建议用 980 Pro 这类高速硬盘,内存频率也可以适当提高。

    系统方面,我只推荐用 Ubuntu, 比较好的选择是 Ubuntu 20.04 , 可以用 Desktop 或 Server 版本,看你的需求,学习的话,还是 Desktop 版本方便一些。
    zinwalin
        15
    zinwalin  
       2022-03-24 13:31:31 +08:00
    @WebKit 是的。买谷歌的亲儿子,驱动问题很好解决,有专门的下载链接,下载后在 aosp 的根目录下执行.sh 的脚本就行。
    debuggeeker
        16
    debuggeeker  
       2022-03-24 15:02:00 +08:00
    这种情况下最好就是 nexus 或者 pixel ,下 aosp ,官方提供对应型号的驱动包,一起编译,得到 img 之后,回到 fastboot ,刷 img 就行了。编译的时候记得编译 arm 的。如果是编译虚拟机跑的模拟器就是 x86 就行了。
    zhongchaowade
        17
    zhongchaowade  
       2022-03-24 15:32:50 +08:00
    rk3399 性能真的不错,性价比很高
    @FranzKafka95
    lee1997
        18
    lee1997  
       2022-03-24 18:52:56 +08:00
    @zinwalin 请问你的 5950x 花 40 分钟是编译 Android 12 吗
    zinwalin
        19
    zinwalin  
       2022-03-24 21:42:50 +08:00
    @lee1997 Android 10, Android 10 Go
    StrorageBox
        20
    StrorageBox  
       2022-03-24 22:13:49 +08:00
    如何自己编译一个 rom?

    你需要准备
    1. 类 unix 系统的主机(作为编译服务器,推荐 ubuntu)。
    2. 一部已经被支持 LineageOS 的手机,相对于 google 亲儿子,这种也许更便宜(不过坑也更多,上面有人说的 pixel3 是个好主意)。
    3. 可能需要一部能解锁 bootloader 、fastboot 的 win pc 。

    编译 rom
    针对你手机不同的支持,可以选择不同 asop 分支的代码,在此就以 LineageOS 的源码为例
    1. 在编译服务器中,使用 repo 来初始化 asop 仓库。repo 是 Android 中专门管理多组 git 的工具,很方便。
    2. 同样还是使用 repo ,切换成指定分支,如 stage 等
    3. lunch 指定不同的编译架构,因为编译服务器的架构必定与手机的架构不同,这里使用要制定交叉编译的具体版本和一些其他参数
    4. make

    如果都齐备了,开始
    1. 首先将你的手机解锁,刷入第三方 Recovery ,推荐 TWRP 。
    2. 然后就可以刷入编译好的 rom 了。

    如上只是粗略的步骤,里面还有不少坑,比如 mac 编译的问题,等等。
    shangyu7
        21
    shangyu7  
       2022-03-25 17:27:47 +08:00
    这都要问,不建议继续搞下去
    huruwo
        22
    huruwo  
       2022-03-25 18:24:08 +08:00
    纯净的 ubuntu 环境编译 ASOP 完成步骤

    ### 下载同步 repo 源码

    #### 1.安装 repo

    repo:管理多个 git 项目的项目管理工具

    ```
    sudo apt install repo
    ```
    #### 2.安装 curl
    curl:下载工具

    ```
    sudo apt-get install curl
    ```

    #### 3.下载全局 repo 配置文件

    参考 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

    ```

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    ```

    下载完成检测

    ```
    huruwo@ubuntu:~/bin$ ls
    repo
    ```

    #### 4.设置更新镜像地址

    ```
    sudo gedit ~/.bashrc
    ```
    新增代码

    ```
    # repo
    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
    ```
    配置生效
    ```
    source ~/.bashrc
    ```

    ![599c69079316046551daba98c6bfc61f.png](en-resource://database/1886:1)


    #### 5.配置 git config 信息

    ```
    git config --global user.email "[email protected]"
    git config --global user.name "huruwo"
    ```

    #### 6.查询适配的系统版本 初始化 repo

    https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

    ![deda6924d9dbfb70dcb2bd25548eda0f.png](en-resource://database/1888:1)


    选择 android-10.0.0_r30 进行下载编译

    ```
    python3 ~/bin/repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r30
    ```

    初始化仓库 不要很久

    #### 7.同步代码

    耗时最久 还容易失败的操作

    ``
    python3 ~/bin/repo sync
    ```

    ### 编译

    #### 1.安装 open jdk

    ```
    sudo apt install openjdk-8-jdk-headless
    ```
    nicevar
        23
    nicevar  
       2022-03-27 11:54:47 +08:00
    楼主可能连 fastboot 这东西都还不知道,更不要说 EDL 了,手机不是随便就能刷 ROM 的,驱动、BL 解锁、校验这些东西都有影响,这些问题不解决,ROM 刷进去你也没法开机启动,你需要有一整套开发板还得配备资料齐全,从头开始学习,uboot/UEFI 之类的,再往前还得知道数电模电,坑很大,如果知识储备相差很远真不如在模拟器玩玩就好了。
    SupperMary
        24
    SupperMary  
       2022-04-06 00:29:35 +08:00
    楼上说的蛮全的。小小的给几个关键点
    如果你不需要调试 WiFi ,蓝牙这些硬件,只是单纯的看 framework 的话,直接用虚拟机就可以。
    如果你需要调试硬件,推荐 pixel 或者配套安卓源码的机子。

    编译环境:Ubuntu ,CPU 频率尽量高,核数尽量多,最好使用固态来编译。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3233 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:16 · PVG 20:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.