编译Android14 AOSP原生代码并运行X86模拟器镜像过程记录

news2024/11/28 2:40:13

最近在研究Android Entreprise部分的特性,需要在Android手机上分析WorkProfile相关的源码,因为新买的Pixel样机还未到货,看了几天Android源码,迫切需要上真机对比分析。

又听说最近几年Android模拟器已经有些进步,至少性能比以前好多了,于是打算把Android Studio中废弃多年的AVD跑起来。一试,果真性能有进步,不算流畅,但点击操作没以前那种老马拉大车的感觉,所以打算切换到模拟器环境下,凑合用几天等真机。

当前,因为涉及framework中代码逻辑的变化,迫切要解决模拟器镜像不能修改的问题,摸索加查资料几天,过程记录如下

1.编译准备

编译环境是Ubuntu20.04,Hyper-V上安装的虚拟机,20G内存,NVME1T硬盘。安装编译依赖:

$ sudo apt update
$ sudo apt install flex bison build-essential 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 fontconfig -y
$ sudo apt install make git-core gnupg zip unzip curl python3 openjdk-11-jdk -y

安装repo:

$ echo `export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'` >> ~/.bashrc 
$ source ~/.bashrc 

下载代码:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r2
repo sync -c -j8

android版本tag可以从如下页面中查询

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

2.编译过程

因为是模拟器,选择x86

$ cd ~/aosp
$ source build/envsetup.sh
$ lunch aosp_x86_64-eng
$ make -j8

正常就可以编译成功,内存建议16G以上,否则开头会报警,实际编译也会报奇怪问题

如果是报内存问题,建议如下解决:

export MAVEN_OPTS="-Xms5120m -Xmx5120m"
export _JAVA_OPTIONS="-Xmx5120m"
# 也可以添加 .bashrc 最后,修改.bashrc记得source .bashrc


#记得清除out目录,重编译
rm -rf out  

实际编译,还出现了怪异问题,后来通过重新创建并扩大swap区解决

解决过程:

1. 查看交换区大小
free -m 
2. 关闭原来的swap文件
sudo swapoff /swapfile
3. 删除原来的swpa文件
sudo rm /swapfile
4. 重新创建spap文件
sudo dd if=/dev/zero of=/swapfile bs=1G count=16
5. 赋予权限
sudo chmod 0600 /swapfile
6.创建文件系统
sudo mkswap -f /swapfile
7. 开启swapfile
sudo swapon /swapfile

3.替换模拟器

通过Android Studio下载模拟器文件路径一般在如下目录,其中xxxx是全局变量[ANDROID_SDK_HOME]所在位置,默认在C:\Users\xxxx\.android

xxxxxx/.android\avd\Pixel_7_API_34.avd

在上述目录下查看,是没有一般常识中的system.img,vendor.img的,这些文件实际位置在Android SDK中

例如:D:\Tools_dev\AndroidSDK\system-images\android-34\default\x86_64

D:\Tools_dev\AndroidSDK就是Android SDK所在目录

然后就好办了,首先确认我编译的是Android 14,对于api level是34,那么替换android-34\default\x86_64目录下的文件;我的电脑中实际还有个android-34\google_apis_playstore\x86_64目录,盲猜是带gms版本的,我用不上,没管。

第一步:

拷贝文件:把out\target\product\generic_x86_64下编译好的镜像文件重命名

system-qemu.img=>system.img

ramdisk.img--保持现状

vender-qemu.img=>vender.img

prebuilt/sdk/linux-kernel/kernel-ranchu-64-保持现状

system/build.prop-保持现状

把这几个文件改名替换到模拟器所在目录[android-34\default\x86_64]中,替换同名文件

第二步:
到AVD Manager中wipe data,然后重启模拟器
 

4. 模拟器运行

这个就不多说了

5.小技巧

如果仅是替换framework中的个别文件,例如service.jar,因为编译的镜像是有root的,所以可以直接替换,但实际需要改如下文件,把odex版本改成dex版本,方能替换成功。

1)build\make\core\board_config.mk

WITH_DEXPREOPT := true  改为 WITH_DEXPREOPT := false

2)build\make\core\dex_preopt_config.mk

注释掉 :##$(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)

然后重新编译出system.img,这个img里面的jar包,apk都是可以替换的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1300476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA远程调试与JDWP调试端口RCE漏洞

文章目录 前言Docker远程调试Java调试原理远程调试实践 JDWP端口RCE调试端口探测调试端口利用 总结 前言 在对一些 Java CVE 漏洞的调试分析过程中,少不了需要搭建漏洞环境的场景,但是本地 IDEA 搭建的话既麻烦(通过 pom.xml 导入各种漏洞组…

散列卡片悬停变为整齐列表

效果展示 CSS 知识点 transform 属性运用 页面整体布局 <ul><li><div class"box"><img src"./user1.jpg" /><div class"content"><h4>Hamidah</h4><p>commented on your photo.<br />…

每日OJ题_算法_双指针④_力扣11. 盛最多水的容器

目录 力扣11. 盛最多水的容器 解析代码 力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两…

APP备案(Android) - 获取签名证书公钥、MD5

因为近期刚针对各应用平台对APP备案时间节点要求进行了统一整理&#xff0c;然后隔天就被要求提供一下app相关的的公钥和MD5&#xff0c;虽然很快就解决了这个事情&#xff0c;但忍不住又稍微衍生了一下&#xff0c;但行小步&#xff0c;莫问远方吧 关联Blog APP备案(Android)…

【Spring Boot 源码学习】ApplicationListener 详解

Spring Boot 源码学习系列 ApplicationListener 详解 引言往期内容主要内容1. 初识 ApplicationListener2. 加载 ApplicationListener3. 响应应用程序事件 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们从 Spring Boot 的启动类 SpringApplication 上入手&am…

harmonyOS创建低的代码开发模式项目 带你基本不写代码完成一个界面跳转的小案例

之前 我们讲了 JavaScript类Web开发模式和ArkTS开发模式 但是 有人就会说 我一点代码基础都没有 难道就不能开发鸿蒙了吗&#xff1f; 其实也是可以的 本文来讲述一下低代码开发模式 我们先打开编辑器 先创建一个项目 默认模板 直接下一步 这里配置中 我们输入名称 然后选择…

【Vulnhub 靶场】【hacksudo: ProximaCentauri】【简单 - 中等】【20210608】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/hacksudo-proximacentauri,709/ 靶场下载&#xff1a;https://download.vulnhub.com/hacksudo/hacksudo-ProximaCentauri.zip 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年06月08日 文件大小&…

龙迅LT9721 MIPIDSI/CSI/HDMI桥接到TYPE-C/DP 支持高达4K30HZ的分辨率

Lontium LT9721 LT9721描述&#xff1a; Lontium LT9721是MIPI/HDMI到DP转换器&#xff0c;内部有C型替代模式开关和PD控制器。 对于MIPI DSI输入&#xff0c;LT9721具有一个单端口MIPI DSI接收器&#xff0c;具有1个时钟通道和4个数据通道&#xff0c;每个数据通道的最大运行频…

Linux基础指令详解(1)

操作系统的概念 百度百科 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。根据运行的环境&#xff0c;操作系…

【git】关于git二三事

文章目录 前言一、创建版本库1.通过命令 git init 把这个目录变成git可以管理的仓库2.将修改的内容添加到版本库2.1 git add .2.2 git commit -m "Xxxx"2.3 git status 2.4 git diff readme.txt3.版本回退3.1 git log3.2 git reset --hard HEAD^ 二、理解工作区与暂存…

西南科技大学C++程序设计实验十(函数模板与类模板)

一、实验目的 1. 掌握函数模板与类模板; 2. 掌握数组类、链表类等线性群体数据类型定义与使用; 二、实验任务 1. 分析完善以下程序,理解模板类的使用: (1)补充类模板声明语句。 (2)创建不同类型的类对象,使用时明确其数据类型? _template<typename T>__…

使用linux CentOS本地部署SQL Server数据库

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装sql server二. 局域网测试连接三. 安装cpolar内网穿透四. 将sqlserver映射…

Grafana系列-Loki-基于日志实现告警

系列文章 Loki 系列文章 前言 实际应用中除了基于 Metrics 告警, 往往还有基于日志的告警需求, 可以作为基于 Metrics 告警之外的一个补充. 典型如基于 NGINX 日志的错误率告警.本文将介绍如何基于 Loki 实现基于日志的告警. 本文我们基于以下 2 类实际场景进行实战演练: …

零基础一看就会?Python实现性能自动化测试竟然如此简单

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数&#xff0c;统计系统负载能力生成报告 2.Python中的性能自动化…

汽车网络安全--关于UN R155认证的思考

1.UN R155概述 2020年6月25日,联合国颁布了全球首个汽车网络安全强制性法规 -- UN 155,详细规定了关于评估网络安全措施的审核条款、制造商和供应商降低网络安全风险的方法以及实施风险评估的义务等。 法规适用于与信息安全相关的M类(4轮及以上载客汽车)、N类(四轮载货汽车)…

上班必备——项目部署环境

大家都知道&#xff0c;互联网行业有很多的岗位&#xff0c;前端&#xff0c;后端&#xff0c;产品&#xff0c;测试&#xff0c;ui等。 ui&#xff0c;产品和测试的同事在前端开发的过程中&#xff0c;都会时刻关注着进度&#xff0c;是要看页面效果的&#xff0c;这个时候怎…

16ASM 分段和机器码

8086CPU存储分段管理 问题1&#xff1a;8086是16位cpu&#xff0c;最多可访问&#xff08;寻址&#xff09;多大内存&#xff1f; 运算器一次最多处理16位的数据。地址寄存器的最大宽度为16位。访问的最大内存为&#xff1a;216 64K 即 0000 - FFFF。 问题2&#xff1a;808…

【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇&#xff1a;【Python】手把手教你用tkinter设计图书管理登录UI界面&#xff08;二&#xff09;-CSDN博客 下一篇&#xff1a; 紧接上一篇文章&#xff0c;继续完善项目功能&#xff1a;用户登录。由于老王的注册部分有亿点点复杂&#xff0c;还没完成&#xff0c;但是…

泽攸科技桌面型扫描电子显微镜(SEM)技术解析

台式扫描电子显微镜是一种利用电子束扫描样品表面并检测样品反射或发射的电子信号&#xff0c;从而获得样品表面形貌、结构和成分信息的仪器。它的工作原理是由电子枪发出的电子束经过栅极静电聚焦后成为直径50微米的点光源&#xff0c;然后在加速电压作用下&#xff0c;经两三…

JAVA实操经验

零&#xff1a; 按照需要&#xff0c;可以使用需要某个类下&#xff08;主要是java提供的&#xff09;的方法来实现某个功能。&#xff08;主要是用在不同类下的方法会进行重写功能不同&#xff09; 方法和构造方法不同&#xff1a;方法是方法&#xff0c;构造方法是构造器&a…