android解决No system images installed for this target

本文详细介绍了在遇到模拟器安装系统图像失败时的排查步骤和解决方案,包括检查并重新安装Android SDK,确保所有相关目录下都有正确的系统图像文件。通过此教程,开发者可以有效解决模拟器配置问题,提升开发效率。

在进行Android开发的过程中大部分时间是用真机测试的,但是有时候需要测试在指定版系统上的稳定性,又没有足够的手机资源的情况下,模拟器就是最好的选择了。

创建模拟器首先得需要有对应版本的sdk,但是下载一次sdk需要很长时间,这时候你可能会从同事那边拷贝过来。拷贝本来无可厚非,但是偶尔会产生一些问题,比如No system images installed for this target。如下图:


出现这个问题的主要原因就是你的sdk出问题了,打开Android SDK Manager,找到你的sdk目录,如下:


看看目录中以image结尾的那些项目你是否都正确安装了,建议全部重新安装一下就好了。



以下是对代码 `PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH $(BUILD_IMAGE) $(TARGET_OUT_SYSTEM_EXT) $(system_extimage_intermediates)/system_ext_image_info.txt $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) $(TARGET_OUT) $(call assert-max-image-size,$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),$(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE))` 的详细分析: #### 1. `PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH` 这部分代码是在修改当前环境变量 `PATH`。`INTERNAL_USERIMAGES_BINARY_PATHS` 是一个预先定义的变量,通常包含了构建用户镜像所需的二进制文件所在的路径。`$$PATH` 中的双美元符号是为了在 Makefile 中正确转义单美元符号,最终会被替换为当前的 `PATH` 环境变量值。 将 `INTERNAL_USERIMAGES_BINARY_PATHS` 追加到 `PATH` 的前面,意味着在执行后续命令时,系统会优先在 `INTERNAL_USERIMAGES_BINARY_PATHS` 中查找可执行文件。这样做的目的是确保在构建过程中使用的是特定版本或特定路径下的工具。 #### 2. `$(BUILD_IMAGE)` `BUILD_IMAGE` 是一个变量,它代表了一个可执行文件或脚本的名称。这个可执行文件或脚本的作用是构建镜像。在修改了 `PATH` 之后,系统会在新的 `PATH` 中查找 `BUILD_IMAGE` 对应的可执行文件并执行它。 #### 3. `$(TARGET_OUT_SYSTEM_EXT)` `TARGET_OUT_SYSTEM_EXT` 是一个变量,通常表示系统扩展分区的输出目录。这个目录包含了系统扩展分区所需的所有文件和资源。在构建镜像时,`BUILD_IMAGE` 脚本可能会从这个目录中读取文件,将其打包到镜像中。 #### 4. `$(system_extimage_intermediates)/system_ext_image_info.txt` `system_extimage_intermediates` 是一个变量,表示系统扩展镜像的中间文件目录。`system_ext_image_info.txt` 是一个文本文件,包含了系统扩展镜像的相关信息,如分区大小、文件列表等。`BUILD_IMAGE` 脚本可能会读取这个文件,以获取构建镜像所需的配置信息。 #### 5. `$(INSTALLED_SYSTEM_EXTIMAGE_TARGET)` `INSTALLED_SYSTEM_EXTIMAGE_TARGET` 是一个变量,表示安装后的系统扩展镜像的目标文件。`BUILD_IMAGE` 脚本会根据前面提供的信息和文件,生成一个系统扩展镜像文件,并将其保存到 `INSTALLED_SYSTEM_EXTIMAGE_TARGET` 所指定的位置。 #### 6. `$(TARGET_OUT)` `TARGET_OUT` 是一个变量,通常表示目标输出目录,包含了整个系统镜像所需的所有文件和资源。`BUILD_IMAGE` 脚本可能会从这个目录中读取其他必要的文件,以完成镜像的构建。 #### 7. `$(call assert-max-image-size,$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),$(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE))` `call` 是 Makefile 中的一个函数,用于调用其他函数。`assert-max-image-size` 是一个自定义的函数,用于检查镜像文件的大小是否超过了指定的分区大小。`INSTALLED_PRODUCT_SERVICESIMAGE_TARGET` 是安装后的产品服务镜像的目标文件,`BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE` 是产品服务镜像分区的最大允许大小。如果镜像文件的大小超过了分区大小,`assert-max-image-size` 函数可能会抛出错误,终止构建过程。 ### 代码示例 以下是一个简化的 Makefile 示例,展示了如何使用类似的代码来构建镜像: ```makefile # 定义变量 INTERNAL_USERIMAGES_BINARY_PATHS := /path/to/binary BUILD_IMAGE := build_image_script.sh TARGET_OUT_SYSTEM_EXT := out/system_ext system_extimage_intermediates := out/intermediates/system_ext INSTALLED_SYSTEM_EXTIMAGE_TARGET := out/installed/system_ext.img TARGET_OUT := out INSTALLED_PRODUCT_SERVICESIMAGE_TARGET := out/installed/product_services.img BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE := 1024 # 定义自定义函数 define assert-max-image-size @if [ $$(stat -c %s $(1)) -gt $(2) ]; then \ echo "Error: Image size exceeds partition size"; \ exit 1; \ fi endef # 构建规则 build_image: PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH $(BUILD_IMAGE) $(TARGET_OUT_SYSTEM_EXT) $(system_extimage_intermediates)/system_ext_image_info.txt $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) $(TARGET_OUT) $(call assert-max-image-size,$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),$(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE)) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值