首页 > 系统相关 >Android开发window安装Ubuntu虚拟机编译aosp安卓12源代码

Android开发window安装Ubuntu虚拟机编译aosp安卓12源代码

时间:2024-03-13 12:49:00浏览次数:30  
标签:12 编译 虚拟机 repo aosp git https 源代码 下载

Window安装Ubuntu虚拟机编译aosp安卓12源代码

1. 安装VMWare虚拟机,以及安装Ubuntu

1.1 下载安装VMWare虚拟机

  1. 下载地址和密钥,请见:
    1. https://www.cnblogs.com/yongfengnice/p/17413934.html

1.2 下载安装Ubuntu

  1. ubuntu下载地址:

    1. https://ubuntu.com/download/alternative-downloads
    2. 我选择下载20.04.6 LTS Desktop版本
  2. 安装ubuntu细节说明:

    1. 如果window内存32G以上可以给ubuntu大点内存,比如16G甚至更大,但至少也留个8G给window吧。
    2. 如果window只有8G内存,ubuntu最多分配4G。分配多了window很卡。
    3. 如果window只有4G内存的话,建议直接砸了换新的,如果还想试一下那分配个1G看看吧

2. 下载AOSP源码

2.1 下载源选择

  1. 如果能FQ访问Google的话,直接参考下面google这篇官方说明文档来吧

    1. https://source.android.google.cn/
    2. 这篇文档是google中文官方文档,可以直接访问,但是里面的源代码下载地址是google海外的
  2. 咱们是合法公民,老老实实使用国内镜像也能完成源代码下载和编译

    1. 清华大学镜像
      1. https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
      2. 提供了两种源代码下载方式,一种是使用每月更新的初始化包,另外一直是传统初始化方法(我们接下来使用这个方式)
    2. 中科大镜像
      1. 主页:https://mirrors.ustc.edu.cn/help/
      2. AOSP:https://mirrors.ustc.edu.cn/help/aosp.html

2.2 下载repo工具

  1. 下载安装git工具

    1. sudo apt-get install git
  2. 配置git

    1. 配置邮箱:git config --global user.email "[email protected]"
    2. 配置用户名:git config --global user.name "xx"
  3. 创建bin目录,并添加到PATH环境变量

    1. 创建目录:mkdir ~/bin
    2. 添加到PATH(仅当前窗口有效):PATH=~/bin:$PATH
    3. 如果需要永久生效,可以配置到.bashrc配置文件里,将~/bin配置到PATH主要原因:
      1. 后续是将repo文件下载到这个bin目录下
      2. 然后给了repo可执行权限后,窗口可以执行运行repo
  4. 安装curl

    1. sudo apt-get install curl
    2. 下载repo文件需要
  5. 下载repo,并设置权限

    1. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
    2. chmod a+x ~/bin/repo
    3. repo文件是什么??
      1. 其实repo文件就是一个python脚本
      2. 这个脚本逻辑首先是检测下载环境
      3. 然后下载git仓库集合,再根据这些仓库调用git clone把各个部分下载下来
      4. android源代码由几百个git仓库按照一定逻辑组成的,不可能手动一个个下载下来吧?
      5. 所以使用repo集中管理并执行这些git仓库,简单理解repo的作用就是这样的
  6. 安装python,repo初始化需要

    1. sudo apt-get install python

2.3 下载AOSP源码

  1. 建立工作目录

    1. mkdir aosp_12
    2. cd aosp_12
  2. 配置git下载源

    1. export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
    2. 也可以配置到~/.bashrc文件里面,让它永久生效
    3. 为什么是配置REPO_URL变量?
      1. 打开repo文件,搜索一下REPO_URL就关键字,就知道为什么了。
      2. 先从环境变量读取REPO_URL变量的值,读取不到的话默认是使用google源
  3. 初始化仓库(其实就是下载git地址)

    1. 下载所有分支git仓库:
      1. repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
      2. 下载所有分支git仓库地址,这个比较耗时感觉也没必要,不过后续切换方便点?
    2. 下载12.0.0_r8分支git仓库:
      1. repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.0.0_r8
      2. 添加-b参数下载指定分支的git地址
    3. android所有版本参考:
      1. https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds
  4. 同步源码

    1. repo sync
    2. 这步就是根据上一步下载下来的git地址去下载源代码了
    3. 这一步比较耗时需要好几个小时。如果失败了重新执行repo sync即可。
  5. 下载kernel源代码(应该不用下载,aosp12自带了模拟器的)

    1. 单独下载,内核源码有很多版本,比如:
    2. common是通用的Linux内核、msm是用于使用高通MSM芯片的Android设备
    3. goldfish是用于Android模拟器的内核源码
    4. 进去aosp_12目录的kernel目录下:cd aosp_12 & cd kernel
    5. git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
    6. cd goldfish
    7. 查看所有git分支:git branch -a
    8. 选择goldfish3.4版本:git checkout remotes/origin/android-goldfish-3.4

3. 编译源码

3.1 准备编译环境

  1. 安装 open-jdk8
    1. sudo apt-get update
    2. sudo apt-get install openjdk-8-jdk
  2. 安装第三方依赖库
    1. 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 libncurses5

3.2 给Ubuntu增加虚拟内存

  1. 需要增加虚拟内存的原因
    1. 编译android12至少需要16G以上的内存,如果你给Ubuntu的内存16G以上的,可能就不需要增加虚拟内存了
    2. 不然编译会报错了,提示内存不够。Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
  2. 如何查看虚拟内存交换空间
    1. 首先查看是否已经存在交换空间:free -m
    2. 会列表内存空间大小,交换区空间大小,默认有2G大小的swap交换空间
    3. 查看swap详情:swapon -s
    4. 可以看到默认的swap是存放在根目录的swapfile文件
    5. 打开ubuntu桌面“文件”->点击其他位置->点击计算机 即可查看到
    6. cd / & ls -a 也可以查看到swapfile文件
  3. 已存在swap交换空间的做法
    1. 停用交换文件:sudo swapoff /swapfile
    2. 删除文件:sudo rm /swapfile
    3. 新建新的swap空间,以32G为例:sudo fallocate -l 32G /swapfile
    4. 查看文件信息:ls -lh /swapfile
    5. 设置文件权限:sudo chmod 600 /swapfile
    6. 挂载swapfile文件:sudo mkswap /swapfile
    7. 激活启用:sudo swapon /swapfile
    8. 再次查看内存使用情况以及交换空间情况:free -m
    9. 把交换信息写入系统配置,不然Ubuntu重启后以上配置swap空间工作得重新做
      1. sudo vi /etc/fstab
      2. 最后一行加入(如有就省略不加):/swapfile swap swap defaults 0 0
      3. 按ESC键,接着:wq(英文冒号+wq)保存退出
    10. 再次查看内存使用情况以及交换空间情况:free -m
    11. 还有错误后面讲解,还需要告诉Android编译系统怎么使用上这块虚拟交接空间!!

3.3 编译源代码

  1. 初始化环境

    1. 进去源码目录:cd aosp_12
    2. 导入构建脚本环境:source build/envsetup.sh
    3. 编译前删除build文件夹,和make clean、rm -rf out/一样:make clobber
  2. 选择编译目标

    1. 列出选择编译目标:lunch
    2. 然后输入对应的数字或者名称确定编译目标
    3. 只有在source build/envsetup.sh之后才能执行lunch,否则报错
    4. 所以编译前首次要做的基本都是先执行一次source build/envsetup.sh
  3. 开始编译

    1. 这里我们不直接选序号了,直接lunch带上目录:lunch sdk_phone_x86_64
    2. sdk_phone_x86_64可以从\aosp_12\build\make\target\product目录下找到
    3. sdk_phone_x86_64是带有手机模拟器的,aosp_x86_64在android12之后是不带模拟器的
    4. 开始真正编译了:make -j4
  4. 解决OOM内存不足的问题

    1. 创建了虚拟内存,为什么还会报OOM错误?
      1. 因为编译的时候这个虚拟内存根本就没有被利用到。
      2. make -j4 后新开一个cmd窗口执行 top 命令,可以查看KiB Swap大小确认是否用上
    2. 解决方法就是让编译的时候使用上我们的虚拟内存
      1. 第一步,终端输入命令:sudo vi /etc/sysctl.conf
      2. 最后面添加,表示内存不足1G启动Swap:vm.min_free_kbytes=1024000
      3. 具体设置多少才启动Swap,根据自己分配给ubuntu内存情况决定,我的ubuntu内存8G
      4. 保存退出,然后重启ubuntu
      5. 第二步,找到 aosp_12/build/soong/java/droidstubs.go 文件,双击打开
      6. 搜索“cmd.BuiltTool("metalava")”定位到代码处
      7. 新加语句:Flag("-J-Xmx6114m").
      8. 保存退出,然后再次编译,最后应该能成功。过程中遇到什么问题再看情况解决吧。

3.4 模拟器运行

  1. ERROR: x86_64 emulation currently requires hardware acceleration
    1. 模拟器需要硬件加速,我使用的虚拟机是VMware workstation
    2. 解决参考:https://blog.csdn.net/mvp_Dawn/article/details/107678057
  2. Ubuntu无法启动提示:此平台不支持虚拟化的 Intel VT-x/EPT
    1. https://blog.csdn.net/m0_62571257/article/details/124102636

3.5 其他问题记录

3.6 感谢

  1. 参考连接
    1. https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
    2. http://liuwangshu.cn/framework/aosp/1-install-ubuntu.html
    3. http://liuwangshu.cn/framework/aosp/2-download-aosp.html
    4. https://www.jianshu.com/p/53941de91c77

标签:12,编译,虚拟机,repo,aosp,git,https,源代码,下载
From: https://www.cnblogs.com/yongfengnice/p/18070332

相关文章

  • 即时通讯技术文集(第35期):IM群聊技术合集(Part2) [共12篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第35 期。​[- 1 -] 直播系统聊天技术(一):百万在线的美拍直播弹幕系统的实时推送技术实践之路[链接] http://www.52im.net/thread-1236-1-1.html[摘要] 本文作者是美拍的架构......
  • 丹麦振动传感器PCH1270/CHF8298/L10M
    丹麦振动传感器是一种用于检测和测量物体振动的设备。它通常由一个敏感元件和一个信号处理器组成。敏感元件可以是压电晶体、电阻式传感器或加速度计等,用于将振动转换为电信号。信号处理器则负责对接收到的信号进行放大、滤波和解码等处理,以便得到有关振动的相关信息。丹麦......
  • xss.haozi.me靶场“0x0B-0x12”通关教程
    君衍.一、0x0B实体编码绕过二、0x0Cscript绕过三、0x0D注释绕过四、0X0Eſ符号绕过五、0x0F编码解码六、0x10直接执行七、0x11闭合绕过八、0x12闭合绕过一、0x0B实体编码绕过我们首先构造payload进行测试:这里我们可以看到全部转为了大写,查看源码:function......
  • Linux内存监控的12种方法全面掌握系统资源使用情况
    监控系统的内存使用情况是系统管理和性能优化的关键部分之一。在Linux环境下,有多种方法来实现对内存的监控和管理。本文将介绍12种常用的方法,涵盖了从基本的命令行工具到更高级的监控工具的使用,帮助您全面掌握系统的资源使用情况。1.free命令free 命令用于显示系统内......
  • CF1286
    CF1286CodeforcesRound612(Div.1)CF1286C1&C2link题意这是一道交互题。有一个长度为\(n\)的由小写字母组成的字符串,你需要通过两种操作得到整个字符串:?lr——列出\(s[l\dotsr]\)的所有子串。子串返回的顺序会被随机打乱,并且在每一个子串中,字母的顺序也会被随......
  • 2024-3-12
    上午睡觉,下午一下午课,大物实验老师跟犯病了似的,不过无所谓,晚上去上了双创课,于迅博老师感冒了,下课了去找他,他要赶校车,上校车给我打电话了解情况,上自己车后又给我打电话,打了46分钟,真是负责任啊。老师之间的差距是真的大,3月3号问张继威的问题现在还没回我呢。谈话内容总结:老师建议读......
  • 12-多线程
    进程和线程多线程是Java语言的重要特性,大量应用于网络编程、服务器端程序的开发,最常见的UI界面底层原理、操作系统底层原理都大量使用了多线程。我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程的应用。UI界面的主线程绘制界面,如果有一个耗时的操作发生则启动新......
  • 【Spark编程基础】实验二Spark和Hadoop的安装(附源代码)
    文章目录一、实验目的二、实验平台三、实验内容和要求1.HDFS常用操作2、Spark读取文件系统的数据四、实验过程一、实验目的(1)掌握在Linux虚拟机中安装Hadoop和Spark的方法;(2)熟悉HDFS的基本使用方法;(3)掌握使用Spark访问本地文件和HDFS文件的方法。二、......
  • 安装JDK11+Tomcat10.0.1+eclipse-jee-2023-12-R-win32-x86_64 配置
    第一步,先双击启动软件:改一下名称:C:\Users\Administrator\eclipse-workspace变成:C:\ProgramFiles\JavaJava:为什么JSP文件要放到SpringBoot工程的src/main/webapp目录下参考文章:https://blog.csdn.net/netyeaxi/article/details/100928105为了看到更具体的页面,可以做个性化......
  • 3.12
    废话不多说上代码DBhelper类importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;publicclassDatabaseHelperextendsSQLiteOpenHelper{publicDatabas......