• 【AOSP】手把手教你编译和调试AOSP源码


    一、下载AOSP源码

    在开始之前,我们先安装编译AOSP需要的一些系统基本依赖,如下命令

    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
    
    • 1

    基于 AOSP 的开发推荐在 Ubuntu 20.04 LTS 下进行,因此你电脑最优选择是 Ubuntu 系统。如果不选择 Ubuntu 系统,也可以使用 DeepinDebian 等环境相似的系统。假设你对AOSP 有一定的了解,但还没有真正实践,这篇文章很适合你。

    如果你电脑没有repo工具需要先安装 repo 工具,命令如下

    mkdir ~/bin
    # 使用tuna镜像下载repo
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
    chmod +x ~/bin/repo
    # 以下这条命令可以添加到 `~/.bashrc` 文件中
    export PATH=~/bin:$PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    假设电脑已经包含了git工具,接下来需要同步源代码,命令如下

    mkdir aosp 
    cd asop
    # 初始化repo,指定源码分支为 `android-10.0.0_r41`
    repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41
    # 同步远程代码
    repo sync
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    同步源码的耗时较长,耐心等待即可。源码同步完成后,即可进行第二步以后的操作。

    二、编译SDK

    初始化 AOSP 编译环境与选择 SDK 作为编译目标

    # 初始化环境
    source build/envsetup.sh
    # 选择编译目标
    lunch sdk-eng
    
    • 1
    • 2
    • 3
    • 4

    终端输出信息如下

    pan@pan-PC:~/Android/aosp/android13$ lunch sdk-eng
    
    ============================================
    PLATFORM_VERSION_CODENAME=VanillaIceCream
    PLATFORM_VERSION=VanillaIceCream
    TARGET_PRODUCT=sdk
    TARGET_BUILD_VARIANT=eng
    TARGET_ARCH=x86
    TARGET_ARCH_VARIANT=x86
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-5.15.77-amd64-desktop-x86_64-Deepin-20.9
    HOST_CROSS_OS=windows
    BUILD_ID=AOSP.MASTER
    OUT_DIR=out
    ===========================================
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    编译sdk

    make sdk
    
    • 1

    最后生成的sdk目录在 out/host/linux-x86/sdk/sdk/android-sdk_eng.{$USER}_linux-x86 下,用于 AOSP 的后续开发和调试。

    三、编译AOSP并启动模拟器

    初始化 AOSP 编译的目标运行设备,这里我们选择 aosp_x86_64-eng

    lunch aosp_x86_64-eng
    
    • 1

    编译

    # 使用 make 数值 的命令进行指定线程数编译,也可以使用 m 命令自动选择最大线程数
    make -j$(nproc)
    
    • 1
    • 2

    编译完成之后,使用如下命令启动模拟器

    emulator
    
    • 1

    四、使用ASFP打开AOSP的子模块

    我们先介绍 ASFP,它是 Android Studio for Platform 的简称,谷歌官方提供了该工具,可以方便的进行基于 AOSP 的开发。如果你电脑上还没有安装 ASFP,可以到 https://developer.android.google.cn/studio/platform?hl=en 下载安装。

    这里我们要打开 Setting (系统设置APP)源代码并进行调试,步骤如下:

    • 首页点击:Import Asfp Project

    • 填写项目信息

    项目关键信息如下图红标部分
    在这里插入图片描述

    配置完成之后,点击 Finish 打开到代码编辑器窗口。

    • 配置SDK

    (1)打开 Project Struct -> Platform Settings -> SDKs -> + -> Add Android SDK:添加 Android SDK,选择 out/host/linux-x86/sdk/sdk/android-sdk_eng.{$USER}_linux-x86,添加后可重命名为 aosp10-sdk,点击 Apply

    (2)打开左侧的Project,配置SDK,选择刚才添加的SDK。

    (3)Project Settings -> Modules,确保 Settings 模块已经使用了上述配置的SDK。这个时候项目就配置好了。

    五、调试代码

    回到代码主编辑器窗口后,首先找到关键的代码打断点,然后点击 Attach Debugger to Android Process 按钮连接到模拟器,就可以看到代码的调试效果了。如下图:
    在这里插入图片描述

    在上图中,我打断点的位置是Settings 模块的 SettingsHomepageActivity 类的 onCreate 方法。该方法在启动系统设置时被调用,用来初始化界面。

    点击 OK 后,我们需要在虚拟机上手动打开系统设置,然后就可以进行调试了。效果如下图:
    在这里插入图片描述

  • 相关阅读:
    对象创造模式
    如何在SpringBoot中定义一个自定义的Starter?
    CST初级教程 七
    搜索技术【二分搜索】 - 简介 & 原理
    FL Studio2023水果完整中文版音乐制作软件
    Django vs Spring
    实践:在模型空间下的法线纹理映射
    分享一个基于Python+Django的高校食堂外卖点餐系统的设计实现(源码、调试、开题、lw、ppt)
    针对CSP-J/S的每日一练:Day 8
    CentOS 7
  • 原文地址:https://blog.csdn.net/qq_34330286/article/details/137440618