下载 build-toos 失败问题

博主更新新版Android Studio后,下载build-tools:28.0.3失败。查看Event Log后设置无果,通过百度找到解决办法。即命令行进入sdk下的tools\bin目录,调用命令sdkmanager --licenses,同意所有licenses,再到AS里build即可解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近更新了新版的AndroidStudio,提示我下载build-toos:28.0.3, 我就点了一下,弹出下载弹框,下载竟然失败了,提示我查看 Event Log。看了 Event Log,告诉我
Event Log 错误提示
试着设置了一下,发现没有用。于是查了一下百度,找到了一篇博客:

https://blog.youkuaiyun.com/qq_42356693/article/details/86571561

下面是摘录的重点内容:

首先打开命令行,进入到报错的sdk路径,找到可以处理licences的文件,我就贴出我的了

cd C:\Users\17720\AppData\Local\Android\SDK
cd tools
cd bin
(其实就是命令行进入sdk 下的 tools\bin 目录)
这时该路径下有一个windows批处理文件sdkmanager,用这个来解决问题,调用命令

sdkmanager --licenses

然后等一小会就巴拉巴拉一大堆licenses等待你同意,全部选yes就可以,反正也看不懂 之后,再到AS里build一下就好了。

总之,其实就是命令行进入sdk 下的 tools\bin 目录,调用命令:sdkmanager --licenses,一连串 yes 就可以了。亲测确实有效。

Getting requirements to build wheel ... done Installing backend dependencies ... done Preparing metadata (pyproject.toml) ... error error: subprocess-exited-with-error × Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [30 lines of output] C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\util.py:75: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. import pkg_resources Error parsing Traceback (most recent call last): File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\core.py", line 105, in pbr attrs = util.cfg_to_args(path, dist.script_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\util.py", line 272, in cfg_to_args pbr.hooks.setup_hook(config) File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\hooks\__init__.py", line 25, in setup_hook metadata_config.run() File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\hooks\base.py", line 27, in run self.hook() File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\hooks\metadata.py", line 25, in hook self.config['version'] = packaging.get_version( ^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\packaging.py", line 854, in get_version version = _get_version_from_pkg_metadata(package_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\26289\AppData\Local\Temp\pip-build-env-_uaj_44a\normal\Lib\site-packages\pbr\packaging.py", line 822, in _get_version_from_pkg_metadata pkg_metadata = email.message_from_file(pkg_metadata_file) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\toos\python\Lib\email\__init__.py", line 53, in message_from_file return Parser(*args, **kws).parse(fp) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\toos\python\Lib\email\parser.py", line 52, in parse while data := fp.read(8192): ^^^^^^^^^^^^^ UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 795: illegal multibyte sequence error in setup command: Error parsing C:\Users\26289\AppData\Local\Temp\pip-install-yrpn9_um\weditor\setup.cfg: UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 795: illegal multibyte sequence [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. [notice] A new release of pip is available: 25.0.1 -> 25.1.1 [notice] To update, run: python.exe -m pip install --upgrade pip error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> weditor note: This is an issue with the package mentioned above, not pip. hint: See above for details.
最新发布
06-29
<think>嗯,用户想了解tpm2-tools的使用方法,还有如何在C语言中调用tpm2-tools测试SM2签名的例子。首先,我需要确认自己对TPM和tpm2-tools的了解。TPM是可信平台模块,用于安全相关的操作,比如密钥生成、加密、签名等。tpm2-tools是命令行工具集,用来与TPM 2.0交互。 用户的需求分两部分:工具的使用和C语言调用示例。对于第一部分,我应该先介绍tpm2-tools的基本安装和常用命令,比如生成密钥、签名、验证等。然后,针对SM2签名,可能需要确认TPM是否支持SM2,因为SM2是国密算法,部分TPM模块可能需要特定支持。需要检查tpm2-tools的版本和相关文档,是否有SM2的支持。 接下来是C语言调用tpm2-tools的例子。通常,C语言调用命令行工具可以使用system()函数或者popen()等。但用户可能想要的是直接使用TPM的库,比如tss2库,而不是通过命令行工具。需要澄清这一点,但根据用户的问题描述,他们提到的是调用tpm2-tools,所以可能需要通过C程序执行命令行指令,并处理输出结果。 不过,直接调用命令行工具可能效率不高,而且不太适合生产环境,但对于测试来说可能可行。所以,我应该给出一个例子,展示如何在C中使用popen()来调用tpm2-tools的命令,比如生成SM2密钥对,进行签名和验证。 同时,需要注意权限问题,运行tpm2命令可能需要root权限或者特定的用户组。此外,环境配置如TPM模拟器的使用,比如swtpm,可能在测试时需要用到,特别是如果用户没有物理TPM模块的话。 可能还需要检查SM2在tpm2-tools中的具体命令,比如生成SM2密钥对的命令参数,可能需要指定算法类型为ecc,并且曲线参数符合SM2的要求。例如,使用tpm2_createprimary和tpm2_create来生成ECC密钥,并指定曲线为SM2对应的曲线ID,但需要确认TPM 2.0规范中是否支持SM2的曲线。可能SM2使用的是特定的椭圆曲线参数,而TPM可能使用不同的标识符,需要查证。 例如,TPM的ECC曲线中,TPM2_ECC_SM2_P256是SM2的曲线,对应的数值是0x002B。因此,在生成密钥时,需要指定参数-ecc sm2p256或者其他相关参数。需要确保tpm2-tools版本支持该曲线。 接下来,签名过程可能需要使用tpm2_sign命令,指定哈希算法和签名方案。对于SM2,可能需要使用TPM2_ALG_SM3_256作为哈希算法,签名方案可能为TPM2_ALG_ECDSA或者特定的SM2算法类型。需要确认TPM是否支持SM2的签名方案,因为SM2的签名算法和ECDSA有所不同。 假设用户的环境已经配置好,包括TPM模拟器和tpm2-tools的安装。那么步骤大致如下: 1. 生成SM2密钥对:使用tpm2_createprimary创建主密钥,再使用tpm2_create生成SM2密钥。 2. 加载密钥到TPM。 3. 对数据进行哈希。 4. 使用tpm2_sign进行签名。 5. 使用tpm2_verifysignature进行验证。 在C语言调用时,可以通过popen()执行这些命令,并读取输出。例如,执行tpm2_sign命令,获取签名结果,然后在程序中进行处理。 需要注意的是,处理密钥的存储和上下文管理,可能需要将密钥保存到文件,并在后续命令中加载。此外,错误处理也很重要,比如检查每个命令的执行结果是否成功。 可能还需要解释SM2在TPM中的实现细节,比如是否完全符合国密标准,或者是否有特定限制。此外,如果用户的TPM硬件不支持SM2,可能需要使用软件模拟的TPM,比如Microsoft的TPM模拟器或者IBM的软件实现。 总结回答结构: 1. 介绍tpm2-tools的安装和基本命令。 2. 分步骤说明使用tpm2-tools进行SM2签名的流程,包括生成密钥、签名、验证。 3. 提供C语言调用tpm2-tools命令的示例代码,展示如何通过system()或popen()执行命令。 4. 注意事项,如权限、环境配置、可能的兼容性问题。 需要验证每个步骤的命令是否正确,特别是曲线参数和算法名称。可能需要查阅tpm2-tools的官方文档或手册页,确认支持SM2的具体命令参数。</think>以下为分步骤讲解: ### 一、tpm2-tools 基础使用方法 #### 1. 环境准备 ```bash # 安装工具包(Ubuntu/Debian) sudo apt install tpm2-tools tpm2-tss-engine # 验证TPM状态 tpm2_getcap properties-fixed ``` #### 2. SM2 签名完整流程 ```bash # 创建主密钥上下文 tpm2_createprimary -C o -G ecc -c primary.ctx # 生成SM2密钥对(需确认曲线名称,部分环境可能使用`sm2p256v1`) tpm2_create -C primary.ctx -G ecc:sm2p256 -u sm2.pub -r sm2.priv # 加载密钥到TPM tpm2_load -C primary.ctx -u sm2.pub -r sm2.priv -c sm2.key.ctx # 生成待签名数据 echo "test message" > data.txt # 计算SM3哈希(TPM内置SM3支持需确认) tpm2_hash -C o -g sm3 -o hash.bin data.txt # 使用SM2签名 tpm2_sign -c sm2.key.ctx -g sm3 -o sig.bin hash.bin # 验证签名 tpm2_verifysignature -c sm2.key.ctx -g sm3 -m data.txt -s sig.bin ``` ### 二、C语言调用示例 #### 1. 核心思路 通过`popen()`执行tpm2命令并捕获输出,需处理密钥文件路径和错误校验。 #### 2. 示例代码 ```c #include <stdio.h> #include <stdlib.h> void execute_tpm_command(const char* cmd) { char buffer[128]; FILE* pipe = popen(cmd, "r"); if (!pipe) { perror("popen failed"); exit(1); } while (fgets(buffer, sizeof(buffer), pipe) != NULL) { printf("%s", buffer); } int status = pclose(pipe); if (status == -1) { perror("Command execution failed"); } } int main() { // 生成SM2密钥 execute_tpm_command("tpm2_createprimary -C o -G ecc -c primary.ctx"); execute_tpm_command("tpm2_create -C primary.ctx -G ecc:sm2p256 -u sm2.pub -r sm2.priv"); // 签名示例数据 system("echo 'sign this' > data.txt"); execute_tpm_command("tpm2_hash -C o -g sm3 -o hash.bin data.txt"); execute_tpm_command("tpm2_sign -c sm2.key.ctx -g sm3 -o sig.bin hash.bin"); // 验证签名 execute_tpm_command("tpm2_verifysignature -c sm2.key.ctx -g sm3 -m data.txt -s sig.bin"); return 0; } ``` ### 三、关键注意事项 1. **曲线兼容性**:不同TPM实现可能对`sm2p256`标识符支持不同,需通过`tpm2_getcap algorithms`确认 2. **哈希算法**:SM2签名需配套使用SM3哈希,部分旧版本TPM可能需升级固件 3. **资源清理**:实际代码需添加`tpm2_flushcontext`清理临时对象 4. **权限问题**:所有tpm2命令需以root或`tss`用户身份执行 ### 四、调试建议 ```bash # 开启详细日志 export TPM2TOOLS_LOG_LEVEL=debug # 查看已加载密钥 tpm2_getcap handles-persistent ``` 如需更底层的TSS2库调用,建议参考[TPM2 Software Stack文档](https://github.com/tpm2-software/tpm2-tss)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值