Android Emulator 构建和启动

Android Emulator 构建和启动

AVD 的创建和启动

欢迎入群交流

效果图
编译模拟器

下载Android源码

参考文章
Android AOSP 下载和编译

source ./build/envsetup.sh编译x86-64,userdebug版本
lunch sdk_phone_x86_64-userdebug编译arm64,userdebug版本
lunch sdk_phone_arm64-userdebugmake -j32编译sdk
make -j32 sdk sdk_repo会在 aosp-master/out/host/linux-x86/sdk/sdk_phone_x86 下创建两个文件:sdk-repo-linux-system-images-eng.[username].ziprepo-sys-img.xml
启动模拟器
  • 安装JDK17

  • 下载command-tools

https://developer.android.com/studio?hl=zh-cn#command-tools

下载上述基本的 Android 命令行工具。使用随附的 sdkmanager 下载其他 SDK 软件包。

  • 创建sdk文件夹,移动cmdline-tools到sdk目录

cmdline-tools 目录中,创建一个名为 latest 的子目录。将原始 cmdline-tools 目录内容(包括 lib 目录、bin 目录、NOTICE.txt 文件和 source.properties 文件)移动到新创建的 latest 目录中

  • 设置环境变量 /etc/profile
export JAVA_HOME=/tools/jdk-17.0.1/export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/libexport ANDROID_SDK_ROOT=/tools/sdk/export ANDROID_HOME=/tools/sdk/export PATH=$ANDROID_HOME/emulator/:$PATHexport PATH=$ANDROID_HOME/platform-tools/:$PATHexport PATH=$ANDROID_HOME/cmdline-tools/latest/bin/:$PATH
  • 安装必要的工具
sdkmanager "platform-tools" 
sdkmanager "emulator"
sdkmanager "system-images;android-26;default;x86_64"
sdkmanager "platforms;android-26"

组合下载使用空格隔开

sdkmanager "platform-tools" "emulator" "system-images;android-26;default;x86_64" "platforms;android-26"
  • 创建模拟器
avdmanager create avd -n android26 -k "system-images;android-26;default;x86_64"
  • 检查环境
检查是否安装vm-linux
emulator -accel-check
INFO    | Storing crashdata in: /tmp/android-root/emu-crash-34.1.20.db, detection is enabled for process: 2623
accel:
8
/dev/kvm is not found: VT disabled in BIOS or KVM kernel module not loaded
accelegrep -c '(vmx|svm)' /proc/cpuinfo
输出为 1 或更大意味着支持虚拟化。输出 0 表示您的 CPU 不支持硬件虚拟化。kvm-ok
Expected output:
INFO: /dev/kvm exists
KVM acceleration can be usedInstall KVM on Linux
sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

VM加速有以下限制:
您无法在另一个虚拟机(例如由 VirtualBox、VMWare 或 Docker 托管的虚拟机)内运行虚拟机加速模拟器。您必须直接在主机上运行 VM 加速模拟器。
根据您的操作系统和虚拟机管理程序,您可能无法在运行 VM 加速模拟器的同时运行使用其他虚拟化技术的软件。此类软件的示例包括但不限于虚拟机解决方案、某些防病毒程序和一些反作弊解决方案。这种情况主要发生在关闭 Hyper-V 的 Windows 上。大多数此类软件可以与android模拟器共存,没有任何问题。但当发生冲突时,建议不要同时运行VM加速模拟器和此类软件。

如果要在容器中开启kvm,需要在创建容器的时候加 –privileged 参数启动容器,这样容器将拥有更多的权限,包括访问宿主机的硬件虚拟化功能

docker run --privileged -it your_image_name
  • 启动模拟器
emulator -avd android26 -no-window 后台启动nohup emulator -avd android26 -no-window &
  • 自定义的模拟器启动
编译的模拟器路径:
out/host/linux-x86/sdk/sdk_phone_x86_64/android-sdk_eng.root_linux-x86/system-images/android-8.1.0/x86_64sdk路径
将编译好的模拟器镜像复制到sdk/system-images,路径sdk/system-images/android-26/default/x86_64_2将自动创建模拟器生成的 package.xml,复制到此文件夹修改package.xml路径January 16, 2019</license><localPackage path="system-images;android-26;default;x86_64_2",保存后创建模拟器avdmanager create avd -n android26_2 -k "system-images;android-26;default;x86_64_2"
遇到的问题
  • 启动模拟器报错
ProbeKVM: This user doesn't have permissions to use KVM (/dev/kvm).
The KVM line in /etc/group is: [LINE_NOT_FOUND]If the current user has KVM permissions,
the KVM line in /etc/group should end with ":" followed by your username.If we see LINE_NOT_FOUND, the kvm group may need to be created along with permissions:sudo groupadd -r kvm# Then ensure /lib/udev/rules.d/50-udev-default.rules contains something like:# KERNEL=="kvm", GROUP="kvm", MODE="0660"# and then run:sudo gpasswd -a $USER kvmIf we see kvm:... but no username at the end, running the following command may allow KVM access:sudo gpasswd -a $USER kvmYou may need to log out and back in for changes to take effect.ERROR   | x86_64 emulation currently requires hardware acceleration!
CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm).
The KVM line in /etc/group is: [LINE_NOT_FOUND]If the current user has KVM permissions,
the KVM line in /etc/group should end with ":" followed by your username.If we see LINE_NOT_FOUND, the kv
More info on configuring VM acceleration on Linux:
https://developer.android.com/studio/run/emulator-acceleration#vm-linux
General information on acceleration:解决方法:
sudo addgroup kvm
sudo usermod -a -G kvm secneo 
sudo chown secneo -R /dev/kvm
  • 编译模拟器报错
error: ro.build.fingerprint cannot exceed 91 bytes: Android/mini_emulator_x86/mini-emulator-x86:5.0.555/AOSP/username02280306:userdebug/test-keys (97)
make: *** [out/target/product/mini-emulator-x86/system/build.prop] Error 1
make: *** Deleting file `out/target/product/mini-emulator-x86/system/build.prop'
make: *** Waiting for unfinished jobs....
error: static_assert failed "Size mismatch."解决方法:
build/tools/post_process_props.py. Change lines as follows
PROP_NAME_MAX = 31
# PROP_VALUE_MAX = 91
PROP_VALUE_MAX = 128bionic/libc/include/sys/system_properties.h. Change lines as follows:
#define PROP_NAME_MAX   32
// #define PROP_VALUE_MAX  92
#define PROP_VALUE_MAX  128system/bt/osi/include/properties.h
#define PROPERTY_VALUE_MAX 128
//#define PROPERTY_VALUE_MAX 92frameworks/native/cmds/installd/installd_deps.h
// constexpr size_t kPropertyValueMax = 92u;
constexpr size_t kPropertyValueMax = 128u;make clean
make

微信公众号(他晓),关注并转发,谢谢

效果图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python列表到Excel表格第一列的转换技术详解

目录 一、Python列表与Excel表格的关系 二、所需工具与库 三、使用openpyxl将列表写入Excel第一列 四、使用pandas将列表写入Excel第一列 五、案例分析与注意事项 六、扩展应用与进阶学习 七、总结与展望 在数据处理和分析中&#xff0c;经常需要将Python中的数据&#…

【复习笔记】FreeRTOS(六) 队列操作

本文是FreeRTOS复习笔记的第六节&#xff0c;队列操作。 上一篇文章&#xff1a; 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.队列操作1.1.队列操作过程1.2.队列操作常用的API函数 二、实验设计三、测试例程四、实验效果 1.队列操作 队列是为了任务与任务、任务与…

Java编程练习之多重继承

在Java中类不允许多重继承&#xff0c;但使用接口可以实现多重继承&#xff0c;因为一个类可以同时实现多个接口&#xff0c;这样可以将所有需要实现的接口放在implements关键字后&#xff0c;并使用英文逗号隔开&#xff0c;但这可能会在一个类中产生庞大的代码量&#xff0c;…

【C++】1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

问题&#xff1a;1390-请从键盘读入一个四位整数&#xff0c;求这个四位整数各个位的和是多少&#xff1f; 类型&#xff1a;基础问题 题目描述&#xff1a; 请从键盘读入一个四位整数&#xff0c;求这个四位整数各个位的和是多少&#xff1f; 输入&#xff1a; 一个四位整…

有条件的打破IBGP水平分割----反射规则和联邦+实验举例

背景&#xff1a;在一个AS中的设备运行了BGP协议&#xff0c;那么正常应该都连接了其他的AS&#xff0c;存在EBGP邻居关系&#xff1b;又由于IBGP的水平分割规则&#xff0c;导致从外部学习到的路由传递给本地AS时&#xff0c;需要和本地AS中运行BGP协议都要建立IBGP邻居关系&a…

python中time库的time.time()函数的作用是什么?

python中time库的time.time()函数的作用是什么&#xff1f; 作用&#xff1a;Python time time() 返回当前时间的时间戳&#xff08;1970纪元后经过的浮点秒数&#xff09;。 time()方法语法&#xff1a;time.time() #!/usr/bin/python # Write Python 3 code in this onlin…

PostgreSQL入门到实战-第二十八弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(三)官网地址PostgreSQL概述PostgreSQL中GROUPING SETS命令理论PostgreSQL中GROUPING SETS命令实战更新计划 PostgreSQL中数据分组操作(三) 使用PostgreSQL grouping sets子句在查询中生成多个分组集。 官网地址 声明: 由于操…

C++ UML 类图介绍与设计

1 类图概述 UML(Unified Modeling Language)&#xff0c;即统一建模语言&#xff0c;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图…

Unity 通过权重做随机

我们可以通过Random.Range方法结合权重来实现随机选择。具体步骤如下&#xff1a; 首先&#xff0c;创建一个数组&#xff0c;其中包含你要选择的项目&#xff0c;并为每个项目分配一个权重值。 计算所有权重值的总和。 使用Random.Range生成一个介于0和总权重之间的随机数。…

消除 BEV 空间中的跨模态冲突,实现 LiDAR 相机 3D 目标检测

Eliminating Cross-modal Conflicts in BEV Space for LiDAR-Camera 3D Object Detection 消除 BEV 空间中的跨模态冲突&#xff0c;实现 LiDAR 相机 3D 目标检测 摘要Introduction本文方法Single-Modal BEV Feature ExtractionSemantic-guided Flow-based AlignmentDissolved…

2024妈妈杯数学建模A 题思路分析-移动通信网络中 PCI 规划问题

# 1 赛题 A 题 移动通信网络中 PCI 规划问题 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖 小区编号进行合理配置&#xff0c;以避免 PCI 冲突、 PCI 混淆以及 PCI 模 3 干扰等 现象。 PCI 规划对于减少物理层的小区间互相干扰(ICI)&#xff0c;增…

jvisualVM分析jvm内存使用快照dump

服务发生内存溢出&#xff0c;就需要查看服务器上Java服务的jvm堆内存使用情况&#xff0c;可以使用dump命令生成dump文件&#xff0c;然后下载到本地&#xff0c;然后使用jvisualVM工具打开&#xff0c;即可实现可视化分析。 生成dump文件常用的两种方式&#xff1a; 第一种…