7、安卓源码的下载与编译

一、 REPO仓库


image.png

在 Android 开源项目(AOSP)和其他大型项目中,repo 是一个管理多个 git 仓库的工具,它帮助开发者方便地管理、同步和构建多个代码仓库。repo 使用 manifest 文件来定义项目的仓库结构和版本关系。以下是 repo、manifest 文件、仓库及分支之间的关系及一些使用案例。

  1. repo 工具的原理
    repo 是 Google 开发的一个 Python 脚本,用于管理多个 git 仓库,尤其适用于管理拥有大量独立仓库的大型项目。其主要功能包括:
    ● 同步:可以从远程服务器拉取多个仓库的数据并同步到本地。
    ● 版本控制:通过 manifest 文件指定每个仓库的分支和提交版本。
    ● 更新管理:在 manifest 文件中定义不同版本,使项目组可以控制整个项目中各仓库的版本一致性。

  2. manifest 文件的作用
    manifest 是一个 XML 文件,定义了项目中所有仓库的结构和版本。manifest 文件的主要内容包括:
    ● 项目列表:列出所有仓库的 URL、路径、分支和具体的提交版本。
    ● 分支设置:为每个仓库指定特定的分支,使 repo 可以检出指定分支的内容。
    ● 远程服务器:定义远程仓库的 URL,让 repo 知道从哪里拉取代码。

一个简单的 manifest.xml 例子如下:


image.png

在上面的例子中:
● 定义了一个远程仓库 aosp,从指定 URL 获取代码。
● 默认分支为 master。
● 项目 platform/frameworks/base 使用 android-14.0.0_r1 分支。
● 项目 platform/system/core 使用 master 分支。
● fetch 是 remote 标签中的一个属性,表示项目代码从哪里拉取,即 git 仓库的基本 URL。
设置 git 的远程地址:fetch 决定了 repo 如何在每个 project 标签中构建完整的 git 克隆地址。
相对路径配置:当 manifest.xml 文件中的 project 标签指定了一个仓库名时,它会被附加到 fetch URL 后构成完整的地址

  1. 仓库和分支的关系
    ● 仓库:仓库是项目中的一个单独的代码库。每个仓库可以有多个分支。
    ● 分支:不同的分支表示代码库的不同版本。repo 可以根据 manifest 文件为每个仓库选择合适的分支。

  2. 使用案例
    案例 1:克隆和同步代码


    image.png

案例 2:切换到不同分支
<project name="platform/frameworks/base" path="frameworks/base" revision="android-12.0.0_r1" />
repo sync

案例 3:切换 manifest 版本
开发过程中可能需要在不同版本间切换,可以重新初始化并同步:


image.png

二 aosp版本选定

我们使用的源码是基于android 14.0.0_r45版本,r是发布修订版本编号
参考网站:
https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn

三 下载aosp源码及下载工具
3.1 一些必要的其它资源的安装工作:apt-get install xxxx

  sudo apt-get update
  sudo apt-get install git
  sudo apt-get install curl
  sudo apt-get install adb
  sudo apt-get install repo
  sudo apt-get install vim
  sudo apt-get install -y git devscripts equivs config-package-dev debhelper-compat golang curl

3.2 git 配置

git config --global user.name "hello"      
git config --global user.email "hello@126.com"

3.3 下载repo脚本工具

mkdir aosp
cd aosp
mkdir bin
//这个链接失效
//curl https://storage.googleapis.com/git-repo-downloads/repo> bin/repo

//用下面这个
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o bin/repo
chmod a+x bin/repo

3.4 aosp源码下载
指定manifest仓库
清华mirror:

export REPO_URL='https://mirrors.ustc.edu.cn/aosp/git-repo.git/'
bin/repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-14.0.0_r45

中科大mirror:

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/aosp/git-repo.git/' 
bin/repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b         android-14.0.0_r45

开始同步:

bin/repo sync -j2 (建议不要超过2,否则可能会下载失败)

3.5 谷歌官网下载aosp方法(需要梯子)
参考谷歌官网:
https://source.android.google.cn/docs/setup/download/downloading?hl=zh-cn

image.png

四 系统aosp源码编译:

cd aosp
source build/envsetup.sh
lunch  选择编号
make -j18  //配置自己电脑配置选择线程数

关于编号的说明:
● user: 权限受限,适用于生产环境
● userdebug: 与user类似,但具有root权限与调试功能
● eng: 工程师版本,具有root权限,并且具有额外调试工具的开发配置

我们需要选择的是有手机界面的具有模拟器功能的版本:需要手动添加配置:
vim build/make/target/product/AndroidProducts.mk
在最后一行添加:sdk_phone_x86_64-eng
重新 执行上面的指令,会出现我们刚配置的新选项,选 择它的编号或者直接输入:lunch sdk_phone_x86_64-eng

五. 启动虚拟机

source build/envsetup.sh
lunch  sdk_phone_x86_64-eng
emulator -verbose -writable-system

 sudo groupadd -r kvm
 sudo gpasswd -a $USER kvm

注意:报错的异常处理1:


image.png

报错的异常处理2:
emulator报错 This user doesn't have permissions to use KVM (/dev/kvm)
这个时候运行一下以下命令就可以了:

sudo chown hello -R /dev/kvm

可以将此命令设置到~/.bashrc中

五 git 提交代码

cd build/make/target/product/
新建本地分支:git checkout -b build_branch
git status:查看
git add "AndroidProduct.mk"
git commit -m "add sdk_phone_x86_64-eng lunch choice"
git log

六 编译生成android.iml和android.ipr

目的:使用生成的android.ipr导入android studio.方便阅读

- source build/envsetup.sh
- lunch sdk_phone_x86_64-eng
- make idegen -j4
- sudo development/tools/idegen/idegen.sh

生成的代码位于aosp根目录下。
导入方法:

  • 修改android.iml: 删除所有的jar库、排除不需要的目录,使用exclude方法。
  • 直接打开android studio, open后选择android.ipr这个文件即可
    整个过程持续时间大约1小时左右,如果电脑配置低点的甚至更久。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容