news 2026/2/27 7:03:33

编译Android 16 TV模拟器(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
编译Android 16 TV模拟器(一)

1. 准备repo工具:

curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

2. 初始化仓库:

~/repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-16.0.0_r2

3. 同步代码:

~/repo sync -c -j8

4. 准备tv x86_64环境的 mk文件。代码里没有 x86_64的 mk,需要根据x86和其他x86_64的mk手动建立一个。

data/aosp/device/google/atv/products$ ls AndroidProducts.mk atv_logpersist.mk bootanimations aosp_tv_arm64.mk atv_lowram_defaults.mk gsi_tv_arm64.mk atv_mainline_system.mk gsi_tv_arm.mk aosp_tv_x86.mk atv_product.mk gsi_tv_base.mk atv_base.mk atv_system_ext.mk lowram_boot_profiles atv_emulator_vendor.mk atv_system.mk sdk_atv64_arm64.mk atv_generic_system.mk atv_vendor.mk sdk_atv_x86.mk

首先拷贝aosp_tv_x86.mk,重命名为aosp_tv_x86_64.mk,把其中 x86的配置改成 x86_64的。

$ cat aosp_tv_x86.mk # # Copyright (C) 2020 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Generate source.properties for image target PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \ device/google/atv/sdk/images_source.prop_template PRODUCT_USE_DYNAMIC_PARTITIONS := true # The system image of aosp_tv_x86-userdebug is a GSI for the devices with: # - x86 32 bits user space # - 64 bits binder interface # - VNDK enforcement # - compatible property override enabled # # All components inherited here go to system image # $(call inherit-product, device/google/atv/products/atv_generic_system.mk) # Enable mainline checking for excat this product name ifeq (aosp_tv_x86,$(TARGET_PRODUCT)) PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed endif # # All components inherited here go to system_ext image # $(call inherit-product, device/google/atv/products/atv_system_ext.mk) # Packages required for ATV GSI PRODUCT_PACKAGES += \ TvProvision # # All components inherited here go to product image # $(call inherit-product, device/google/atv/products/atv_product.mk) # Default sound experience $(call inherit-product-if-exists, frameworks/base/data/sounds/AudioTv.mk) # Packages required for ATV GSI ifeq (aosp_tv_x86,$(TARGET_PRODUCT)) PRODUCT_PACKAGES += \ LeanbackIME \ TvSampleLeanbackLauncher endif # # All components inherited here go to vendor image # $(call inherit-product, device/google/atv/products/atv_emulator_vendor.mk) $(call inherit-product, device/generic/goldfish/board/emu64x/kernel_fstab_32.mk) $(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86/device.mk) ifeq (aosp_tv_x86,$(TARGET_PRODUCT)) $(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_release.mk) endif PRODUCT_NAME := aosp_tv_x86 PRODUCT_DEVICE := generic_x86 PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP TV on x86

修改之后的 aosp_tv_x86_64.mk:

cat aosp_tv_x86_64.mk # # Copyright (C) 2020 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Generate source.properties for image target PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \ device/google/atv/sdk/images_source.prop_template PRODUCT_USE_DYNAMIC_PARTITIONS := true # The system image of aosp_tv_x86-userdebug is a GSI for the devices with: # - x86 32 bits user space # - 64 bits binder interface # - VNDK enforcement # - compatible property override enabled # # All components inherited here go to system image # $(call inherit-product, device/google/atv/products/atv_generic_system.mk) # Enable mainline checking for excat this product name ifeq (aosp_tv_x86_64,$(TARGET_PRODUCT)) PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed endif # # All components inherited here go to system_ext image # $(call inherit-product, device/google/atv/products/atv_system_ext.mk) # Packages required for ATV GSI PRODUCT_PACKAGES += \ TvProvision # # All components inherited here go to product image # $(call inherit-product, device/google/atv/products/atv_product.mk) # Default sound experience $(call inherit-product-if-exists, frameworks/base/data/sounds/AudioTv.mk) # Packages required for ATV GSI ifeq (aosp_tv_x86_64,$(TARGET_PRODUCT)) PRODUCT_PACKAGES += \ LeanbackIME \ TvSampleLeanbackLauncher endif # # All components inherited here go to vendor image # $(call inherit-product, device/google/atv/products/atv_emulator_vendor.mk) $(call inherit-product, device/generic/goldfish/board/emu64x/kernel_fstab_32.mk) $(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk) ifeq (aosp_tv_x86_64,$(TARGET_PRODUCT)) $(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_release.mk) endif TARGET_ARCH := x86_64 TARGET_ARCH_VARIANT := x86_64 TARGET_CPU_ABI := x86_64 TARGET_SUPPORTS_64_BIT_APPS := true PRODUCT_NAME := aosp_tv_x86_64 PRODUCT_DEVICE := generic_x86_64 PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP TV on x86_64

然后把

$(LOCAL_DIR)/aosp_tv_x86_64.mk 加到 AndroidProducts.mk里面。

5. 准备编译目标

source build/envsetup.sh lunch aosp_tv_x86_64-aosp_current-eng

如果没有问题,会输出如下:

$ lunch aosp_tv_x86_64-aosp_current-eng 00:39:36 Build sandboxing disabled due to nsjail error. ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=16 TARGET_PRODUCT=aosp_tv_x86_64 TARGET_BUILD_VARIANT=eng TARGET_ARCH=x86_64 TARGET_ARCH_VARIANT=x86_64 TARGET_2ND_ARCH=x86 TARGET_2ND_ARCH_VARIANT=x86_64 HOST_OS=linux HOST_OS_EXTRA=Linux-6.8.0-88-generic-x86_64-Ubuntu-24.04.3-LTS HOST_CROSS_OS=windows BUILD_ID=BP2A.250605.031.A3 OUT_DIR=out SOONG_ONLY=false ============================================ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Wondering whether to use user, userdebug or eng? user The builds that ship to users. Reduced debugability. userdebug High fidelity to user builds but with some debugging options enabled. Best suited for performance testing or day-to-day use with debugging enabled. eng More debugging options enabled and faster build times, but runtime performance tradeoffs. Best suited for day-to-day local development when not doing performance testing. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果没有改好,可能会输出如下:

lunch aosp_tv_x86_64-aosp-eng 23:22:01 Build sandboxing disabled due to nsjail error. In file included from build/make/core/config.mk:422: In file included from build/make/core/envsetup.mk:368: build/make/core/board_config.mk:334: error: Building a 32-bit-app-only product on a 64-bit device. If this is intentional, set TARGET_SUPPORTS_64_BIT_APPS := false. 23:22:01 dumpvars failed with: exit status 1 panic: dumpvars failed with: exit status 1

参考:

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 22:32:36

第十章 for循环

1.数学平均成绩 输入 第一行1个整数n,代表学生数量 第二行n个整数,代表每个同学的成绩 输出 成绩平均值样例 输入复制 3 90 100 90 输出复制 932.英语优等生 输入 第一行1个整数n,代表学生数量 第二行n个整数,代表每个同学的成绩 …

作者头像 李华
网站建设 2026/2/26 3:08:11

WebRTC 是什么?能做什么?(概览篇)

WebRTC 是什么?能做什么?(概览篇) 本文是 WebRTC 系列专栏的第一篇,旨在帮助读者建立对 WebRTC 的整体认知,了解其发展历程、核心能力、主要组件以及优势与局限。 目录 WebRTC 的发展历史WebRTC 能解决什么…

作者头像 李华
网站建设 2026/2/27 23:40:21

Dubbo学习(三):深入 Remoting

深入 Remoting:Dubbo 的“搬运工” —— 网络通信与线程模型 请关注公众号【碳硅化合物AI】 摘要 如果说 RPC 是 Dubbo 的大脑,那么 Remoting 就是 Dubbo 的四肢。它负责把 RPC 层生成的调用请求(Invocation)变成二进制流&…

作者头像 李华
网站建设 2026/2/25 14:44:22

AI设计新突破:QWEN溶图LoRA模型助力品牌视觉创作升级

AI设计新突破:QWEN溶图LoRA模型助力品牌视觉创作升级 【免费下载链接】Fusion_lora 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Fusion_lora 在人工智能技术迅猛发展的当下,AI绘图领域正经历着前所未有的变革。各类创新模型层出不穷&a…

作者头像 李华
网站建设 2026/2/25 5:16:07

突破实时视频生成瓶颈:Krea Realtime 14B模型革新文本到视频技术

突破实时视频生成瓶颈:Krea Realtime 14B模型革新文本到视频技术 【免费下载链接】krea-realtime-video 项目地址: https://ai.gitcode.com/hf_mirrors/krea/krea-realtime-video 在人工智能驱动的内容创作领域,文本到视频生成技术正经历着从实验…

作者头像 李华
网站建设 2026/2/27 2:16:10

【项目实战】Vercel 是一个让你的网站“瞬间上线”的云平台。Vercel 现在确实是技术圈的“当红炸子鸡”,尤其是在个人博客和前端开发领域。

Vercel 现在确实是技术圈的“当红炸子鸡”,尤其是在个人博客和前端开发领域。简单来说,Vercel 是一个让你的网站“瞬间上线”的云平台。 传统的服务器 (阿里云/腾讯云) 就像是给你一块生肉和一套厨具。你想吃牛排,得自己切、自己腌、自己煎,还要负责洗碗(运维、配置环境、…

作者头像 李华