AOSP 源码编译android 12

这篇具有很好参考价值的文章主要介绍了AOSP 源码编译android 12。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、python安装 

    a. python2安装

    b. python3安装

二、repo管理多个git

   a.第一步,   新建一个空白文件夹保存repo引导文件,并包含你的路径

   b.下载启动器

 c.将git-repo中的repo文件复制到 1 创建的.bin目录中

 d.修改权限

e. 执行版本检查

三、初始化工程

  a.执行创建文件夹命令,创建android12文件夹

  b.切换到android12目录下

   c.初始化android12

初始化git

d.同步下载android源代码 -j4代表的是指定作业数

四、准备编译环境

    a. 安装 jdk8

   b.安装依赖包

安装所需的软件包 (Ubuntu 14.04)

   或

安装所需的软件包(Ubuntu 18.04 及更高版本)

五、下载内核源码

a.与下载AOSP源码类似,需要先建立文件夹 

 b.使用清华的镜像

 c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令

 六、交换空间

方法一

方法二

七、编译

 a.初始化环境

  b. 选择编译目标

  c.Which would you like?

八、编译完成之后,可以通过使用模拟器来模拟运行,或者使用真机进行刷机。

8.1 模拟器测试

a.模拟器运行直接运行这条指令:

   注意1:

   注意2:

8.2 手机测试

附录:AOSP常用编译和查找命令


效果

AOSP 源码编译android 12,linux,Android系统与嵌入式,linux,ubuntu,运维

一、python安装 

    a. python2安装

     sudo  apt-get install python 

    b. python3安装

     sudo  apt-get install python3

来自谷歌官网Android的警告

警告:对 Python 2 的支持已于 2020 年 1 月 1 日停止,详情请见 Sunsetting Python 2(废弃 Python 2)一文。所有主要的 Linux 发行版都在停止支持 Python 2 软件包。Google 强烈建议您将所有脚本改用 Python 3。

二、repo管理多个git

   repo因为Android源码由多个git组成,故安装repo利于管理git工程.

    repo安装步骤

   a.第一步,   新建一个空白文件夹保存repo引导文件,并包含你的路径

  mkdir ~/bin
  PATH=~/bin:$PATH    //配置环境变量

   b.下载启动器

   注意

   如果提示 curl: command not found ,那是因为没装 Curl

   执行 :sudo  apt-get install curl -y

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
或
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo

chmod a+x ~/bin/repo

我采用的是另外一种方法

 首先

如果没安装过git先安装执行以下指令
sudo apt update 
sudo apt install git

再执行
sudo snap install git-repo

其次

git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo


下载repo
    git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo

 c.将git-repo中的repo文件复制到 1 创建的.bin目录中

cd git-repo/
cp repo ~/bin/

 d.修改权限

chmod a+x ~/bin/repo

e. 执行版本检查

repo --version


如果报错
 File "/bin/repo", line 51
    def print(self, *args, **kwargs):
            ^
    SyntaxError: invalid syntax

发现是python链接的不对,我的ubuntu装了两个版本的python,分别是python2.7和python3.8,输入python后提示是python2.7,因为python软链接到python2上面了:

     /usr/bin/python
    -> /usr/bin/python2*

repo需要的是python3,所以需要修改一下上面的软链接:   

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python

三、初始化工程

  a.执行创建文件夹命令,创建android12文件夹

mkdir android12

  b.切换到android12目录下

cd android12/

   c.初始化android12

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47

 注意如果被拒绝

报错

Downloading Repo source from https://gerrit.googlesource.com/git-repo
fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 111] Connection refused
fatal: double check your --repo-rev setting.
fatal: cloning the git-repo repository failed, will remove '.repo/repo' 
 

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc

 执行:

gedit ~/.bashrc


 在末尾添加

export PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

保存文件后运行命令,使更改生效:

source ~/.bashrc

初始化git

git config --global user.email "450561200@qq.com"
git config --global user.name "mogutou"

 再执行

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-security-12.0.0_r47

d.同步下载android源代码 -j4代表的是指定作业数

作业数是在编译的时候指定主机的CPU个数

repo sync -j4

  (可选操作 )下载完成可以执行   

 du -sh -BG  //查看目录大小

四、准备编译环境

    a. 安装 jdk8

sudo apt-get update
sudo apt-get install openjdk-8-jdk

   b.安装依赖包

安装所需的软件包 (Ubuntu 14.04)

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

   或

安装所需的软件包(Ubuntu 18.04 及更高版本)

您需要 64 位版本的 Ubuntu。

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python

五、下载内核源码

   AOSP源码中并不包括内核源码,需要单独下载,内核源码有很多版本,比如common是通用的Linux内核,msm是用于使用高通MSM芯片的Android设备,goldfish是用于Android模拟器的内核源码,这里以goldfish为例

a.与下载AOSP源码类似,需要先建立文件夹 

mkdir kernel
cd kernel

 b.使用清华的镜像

git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git

 c.完成后kernel目录中会生成一个goldfish文件夹,进入goldfish目录并使用git命令

cd goldfish
git branch -a

 这时会列出有哪些内核的版本分支可以下载

这里选择下载goldfish 3.4版本

git checkout remotes/origin/android-goldfish-3.4

 六、交换空间

由于电脑内存不够,采用了交换空间的方式解决。

方法一

#停用交换文件
swapoff /swapfile
#删除文件
rm /swapfile
#新建swap空间,个人设置的是20G
fallocate -l 20G /swapfile
#设置文件权限 
chmod 600 /swapfile
#挂载
mkswap /swapfile
#激活启用
swapon /swapfile
#安装vim(可选)
apt-get install vim
#接下来,需要将交换信息写入系统配置
#打开配置文件
vim /etc/fstab
#在最末尾处插入(输入i进行插入,ctrl + shift + v是粘贴,如果不能实现粘贴,自行搜索处理一下,esc退出编辑,输入wq进行保存)
/swapfile  swap  swap  defaults  0  0
#更改交换空间大小
vim /etc/sysctl.conf
#在最末尾处插入
vm.min_free_kbytes=1500000

方法二

迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G,如果在编译过程中,因内

存不够而编译报错,可以参考本小节进行设置。

这里举例分配 5G 交换内存。

在开始之前,使用命令检查一下您的 ubuntu 的 swap 分区。

sudo swapon --show

通过以下命令创建一个用于 swap 的文件

sudo fallocate -l 5G /swapfile

注意,此时可能会显示

fallocate:fallocate failed:Text file busy

此时,执行以下命令:

sudo swapoff -a

然后再执行以下命令:

sudo fallocate -l 5G /swapfile

执行以下命令为 swapfile 文件设置正确的权限:

sudo chmod 600 /swapfile

使用 mkswap 实用程序在文件上设置 Linux SWAP 区域:

sudo mkswap /swapfile

使用以下命令激活 swap 文件:

sudo swapon /swapfile

要让创建好的 swap 分区永久生效,可以将 swapfile 路径内容写入到 /etc/fstab 文件当中:

sudo vim /etc/fstab

在/etc/fstab 文件最后添加如下内容:

/swapfile swap swap defaults 0 0

AOSP 源码编译android 12,linux,Android系统与嵌入式,linux,ubuntu,运维

使用 swapon 或 free 命令验证 SWAP 是否处于活动状态,如下所示:

sudo swapon --show

sudo free -h

AOSP 源码编译android 12,linux,Android系统与嵌入式,linux,ubuntu,运维

七、编译

 a.初始化环境

  cd进入android12的目录,依次输入如下2个命令:  

source build/envsetup.sh
// 编译前删除build文件夹A
make clobber

  b. 选择编译目标

   输入命令:

lunch 

然后出现


Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_barbet-userdebug
     4. aosp_blueline-userdebug
     5. aosp_blueline_car-userdebug
     6. aosp_bonito-userdebug
     7. aosp_bonito_car-userdebug
     8. aosp_bramble-userdebug
     9. aosp_bramble_car-userdebug
     10. aosp_car_arm-userdebug
     11. aosp_car_arm64-userdebug
     12. aosp_car_x86-userdebug
     13. aosp_car_x86_64-userdebug
     14. aosp_cf_arm64_auto-userdebug
     15. aosp_cf_arm64_phone-userdebug
     16. aosp_cf_x86_64_foldable-userdebug
     17. aosp_cf_x86_64_pc-userdebug
     18. aosp_cf_x86_64_phone-userdebug
     19. aosp_cf_x86_64_tv-userdebug
     20. aosp_cf_x86_auto-userdebug
     21. aosp_cf_x86_phone-userdebug
     22. aosp_cf_x86_tv-userdebug
     23. aosp_coral-userdebug
     24. aosp_coral_car-userdebug
     25. aosp_crosshatch-userdebug
     26. aosp_crosshatch_car-userdebug
     27. aosp_crosshatch_vf-userdebug
     28. aosp_flame-userdebug
     29. aosp_flame_car-userdebug
     30. aosp_redfin-userdebug
     31. aosp_redfin_car-userdebug
     32. aosp_redfin_vf-userdebug
     33. aosp_sargo-userdebug
     34. aosp_sargo_car-userdebug
     35. aosp_sunfish-userdebug
     36. aosp_sunfish_car-userdebug
     37. aosp_trout_arm64-userdebug
     38. aosp_trout_x86-userdebug
     39. aosp_x86-eng
     40. aosp_x86_64-eng
     41. arm_krait-eng
     42. arm_v7_v8-eng
     43. armv8-eng
     44. armv8_cortex_a55-eng
     45. armv8_kryo385-eng
     46. beagle_x15-userdebug
     47. beagle_x15_auto-userdebug
     48. car_x86_64-userdebug
     49. db845c-userdebug
     50. gsi_car_arm64-userdebug
     51. gsi_car_x86_64-userdebug
     52. hikey-userdebug
     53. hikey64_only-userdebug
     54. hikey960-userdebug
     55. hikey960_tv-userdebug
     56. hikey_tv-userdebug
     57. pixel3_mainline-userdebug
     58. poplar-eng
     59. poplar-user
     60. poplar-userdebug
     61. qemu_trusty_arm64-userdebug
     62. sdk_car_arm-userdebug
     63. sdk_car_arm64-userdebug
     64. sdk_car_x86-userdebug
     65. sdk_car_x86_64-userdebug
     66. silvermont-eng
     67. uml-userdebug
     68. yukawa-userdebug
     69. yukawa_sei510-userdebug

Which would you like? [aosp_arm-eng] 

  c.Which would you like?

    Which would you like? [aosp_arm-eng]后面直接输入对应序号39就可以。

   lunch命令用来让用户选择编译目标,只有在source build/envsetup.sh之后才会有效,不然会报命令not found
这里我又踩了一个坑,参照其他人的比较老的教程选择了aosp_x86-eng,这是可以运行在模拟器上。

编译:lunch arm_v7_v8-eng

执行make -j4编译或者执行m(表示选择合适的线程)编译

make -j4
或者
m

常见报错

failed to build some targets(看看虚拟机是不是分配低于400G硬盘)

prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real: error while loading shared libraries:-CSDN博客

提示:

     编译时候有时候terminal显示区域有限,有时候编译出错想要找一个编译错误原因可能在terminal上就比较麻烦,或者很可能缓存有限导致找不到根本错误,这个时候就需要我们把编的整个日志需要输出到一个文件中,具体命令:

make   2>&1 | tee build.log  


这里首先make不用介绍了,重点介绍2>&1和tee
2>&1:
在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:

标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
2是标准错误,&1是标准输出,2>&1意思就是将标准错误输出到标准输出中。
如果没有2>&1,只会有标准输出,没有错误;

tee build.log
这里tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
所以命令就是tee从make 2>&1 获取输入,输出到build.log

   

八、编译完成之后,可以通过使用模拟器来模拟运行,或者使用真机进行刷机。

8.1 模拟器测试

a.模拟器运行直接运行这条指令:

 emulator

 错误, 你肯定是在没有导入环境的窗口执行 emulator 了

  -bash: emulator: command not found

这里要先导入环境, 如下

source build/envsetup.sh

选择运行的项目 (这个和你编译的一样)

lunch 选择对应版本

然后  emulator
即可启动模拟器

提示:在windows系统下,用VMware搭建Ubuntu系统,在Ubuntu中搭建安卓emulator,启动emulator时报错:

ERROR: x86 emulation currently requires hardware acceleration!

解决方法:.

1. 关闭Ubuntu虚拟机。
2. VMware右击Ubuntu虚拟机的名字,选择设置。
3. 虚拟机设置界面选择【硬件】下的【处理器】,勾选虚拟化引擎下的【虚拟化Intel VT-x/EPT或AMD-V/RVI(V)】,点击确定。
4. 重启Ubuntu。

   注意1:

a.尝鲜了下android12的模拟器,基于android-12.0.0_r3,发现按照以往的方法,lunch aosp_x86_64-eng编译后模拟器无法启动,无法启动的原因是没有生成相关*-qemu.img, 提示:Could not open '****/userdata-qemo.img':No such file or directory

修改成重新编译即可。主要原因是```aosp_x86_64-eng```不会生成qemu相关镜像, 换成lunch sdk_x86_64 即可

完整步骤
source build/envsetup.sh
lunch sdk_x86_64
make
emulator

b. 修改AndroidProduct.mk使支持x86_x64镜像编译
由于android12 默认lunch默认选不到模拟器镜像,所以首先需要修改mk。
修改build/make/target/product/AndroidProducts.mk文件,添加sdk_phone_x86_64-eng支持

diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk
index 7d9d90e92a..419cccb80a 100644
--- a/target/product/AndroidProducts.mk
+++ b/target/product/AndroidProducts.mk
@@ -84,3 +84,4 @@ COMMON_LUNCH_CHOICES := \
     aosp_arm-eng \
     aosp_x86_64-eng \
     aosp_x86-eng \
+    sdk_phone_x86_64-eng \

   注意2:

此处的emulator命令是代码编译时,source build/envsetup.sh和lunch设置的命令,emulator的实际位置在android源码的prebuilts/android-emulator下面:

~/code/android12_12.1.0.r3/out/target/product/emulator_x86_64$ which emulator
/home/zdm/code/android12_12.1.0.r3/prebuilts/android-emulator/linux-x86_64/emulator

如果执行模拟器时出现下面的错误

mulator: ERROR: Running multiple emulators with the same AVD is an experimental feature.
Please use -read-only flag to enable this feature.

表示已经有模拟器在运行了,或者是由于模拟器异常退出导致,删除下面两个lock文件即可正常:

$ croot
$ cd out/target/product/emulator_x86_64
$ ls *.lock
hardware-qemu.ini.lock  multiinstance.lock

8.2 手机测试

通过 adb 连接手机,也可以把系统镜像刷入真机。

先通过 adb 让手机重启到fastboot模式:

 adb reboot bootloader

在fastboot模式下,使用该命令刷入:

fastboot flashall -w

其中 -w 表示擦除掉 /data 分区。

常见报错

 有时候执行  lunch sdk_x86_64
会有如下提示
In file included from build/make/core/config.mk:313:
In file included from build/make/core/envsetup.mk:323:
build/make/core/board_config.mk:181: error: Multiple board config files for TARGET_DEVICE emulator_x86_64: build/make/target/board/emulator_x86_64/BoardConfig.mk device/manufacturer/emulator_x86_64/BoardConfig.mk.

解决方法就是把以下文件夹

manufacturer/emulator_x86_64/BoardConfig.mk.删掉文章来源地址https://www.toymoban.com/news/detail-794555.html

附录:AOSP常用编译和查找命令

  • m :等同于 make ,进行一次完整编译。
  • mm:在当前目录下编译所有模块,但不包括依赖项。
  • mmm [目录]:编译指定目录下的所有模块,但不包括依赖项。只编译指定模块:mmm [dir/:target1,target2]
  • mma:在当前目录下编译所有模块,包括依赖项。
  • mmma [目录]:编译指定目录下的所有模块,包括依赖项。
  • make clean:删除整个 out/ 目录。
  • make clobber:用于清除编译缓存。
  • make snod:当重新编译部分模块完成后,快速生成img文件。
  • cgrep:对C/C++文件执行 grep (只搜寻C/C++文件类型,也包括.h类型)。
  • jgrep:只对Java文件执行 grep (只搜寻Java文件类型)。
  • resgrep:只匹配 /res 目录下的 xml 文件。
  • sepgrep:只查找sepolicy文件。

到了这里,关于AOSP 源码编译android 12的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Framework | AOSP源码下载及编译指南(基于Android13)

    AOSP(Android Open Source Project)是Android操作系统的开源项目,通过下载和编译AOSP源码,您可以获得原始的Android系统,并进行定制和开发。本教程将向您介绍如何下载AOSP源码并进行编译的步骤。 如何只是浏览查看AOSP源码,则没必要下载源码,可以使用google提供的Code Search工具进

    2024年01月16日
    浏览(59)
  • 【Linux驱动开发】编译Android12源码

    基于讯为电子rk3568教程 rk_android12.0_sdk_20220720.tar.gz 解压 设置屏幕配置 整体编译 Android 固件 使能编译环境 开始整体编译 rockdev/Image-rk3568_s // 编译成功镜像存放位置 单独编译u-boot (方法一) 编译完成后在 u-boot 目录会生成 rk356x_spl_loader_v1.13.112.bin 文件、uboot.img 文件、 resourc

    2024年02月05日
    浏览(47)
  • 【Android 12 AOSP学习】Android内置第三方apk到系统

    这篇文章将介绍如何在Android系统中内置第三方apk 编译好的Android源码 Android apk文件:也就是安卓应用安装包 (1)在源码 packages/apps 目录下以我们需要内置的APK名字来创建一个新的文件夹 以 qqmusic.apk 为例,在 Android_12_AOSP/packages/apps 目录下新建qqmusic文件夹 (2)将 qqmusic.apk 放入

    2024年02月02日
    浏览(65)
  • 0.【AOSP+Pixel 5】Android13 开发环境搭建及源码下载、编译和刷机

    本人——入行Android没多久的萌新一枚。这个系列文章主要是我客制化Android系统的一些记录。以下是我的开发环境的信息: Android 版本:13 Android 设备:Pixel 5(欧版) 操作系统:Ubuntu 20.04.5 LTS(64位) 先更新一下软件源和软件 Ubuntu 20.04 LTS已经移除Python2,默认安装python3,但是

    2024年02月14日
    浏览(56)
  • Docker系列(1)安装Linux系统编译Android源码

    目录 一、开发环境搭建 1.Windows docker环境安装 2.配置ubuntu18.04系统 2.0 准备工作 2.1 安装ubuntu18.04 2.2 安装常用工具 2.3 安装rk3568环境编译工具 2.4 新增用户 2.5 注意避坑!! 二、下载编译 Android_SDK 3.1 第一步,下载 SDK 3.2 第二步,更新 SDK 3.3 第二步,编译 SDK 手动编译 iCore-3568JQ An

    2024年02月11日
    浏览(45)
  • Android studio导入Android源码(AOSP Android 14)

    1. 完整编译AOSP源码 有些java文件是在编译过程中动态生成的,需要完整编译一遍,源码的依赖才能完整。 2. 生成IDE导入的工程文件 执行完成后,在AOSP根目录下生成文件: 3. 导入前,编辑工程文件 (这步很重要,影响代码的加载速度和跳转) 编辑android.iml文件,需要修改2部

    2024年02月10日
    浏览(43)
  • Android12 源码下载、编译、刷机、单编调试Framework

    深入学习Android系统框架开发前,首先要搭建Android工程的开发环境(建房子前先搞地基),详细的配置要求和操作步骤见官网说明 Establishing a build environment,本文也汇总了Android 12工程源码的下载、编译和刷机的实操过程。 在开始代码下载之前,先强调下源码编译对硬件/软件

    2024年02月03日
    浏览(57)
  • AndroidStudio导入Android AOSP源码

    编译完成后,就可以在Android源码的根目录下看到android.iml和android.ipr文件了。 打开android.iml文件看看,默认把几乎所有的源码都导入了,只有几个文件夹被排除在外,工程将会非常大,而且会很耗时间。 然而我们并不关心这么多的源码,我们可以自己加excludeFolder标签,把自己

    2024年02月01日
    浏览(98)
  • Android12源码编译报错ninja: build stopped: subcommand failed.解决

    虚拟机:wsl 2.0 Ubuntu18.04 虚拟机配置:8G内存,1T存储 软件版本:安卓系统目前最高版本是Android S,也就是Android 12 beta版本源码,无任何修改 报错内容:编译至54%时,ninja编译中断,ninja: build stopped: subcommand failed. 报错后尝试多次增量编译,始终在54%作用报错,报错内容一致。

    2024年01月19日
    浏览(50)
  • Android 系统源码编译

    Android系统源码编译网上流传着很多优秀的文章,为什么我要写这个呢,主要的原因是记录编译系统的过程,这里以Android9.0,手机设备Piexl一代为例来讲述编译和刷机过程。 ubuntu18.04 内存至少12G RAM 硬盘空间至少200GB (1) 安装python (2)安装Git 配置Git信息 (3)安装curl (4)

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包