解决Android进行targetSdk升级适配时hiddenapi-flags.csv文件下载失败问题

从Android9即targetSdk28开始,Android 平台对应用能使用的非 SDK 接口实施了限制。所以每次升级targetSdk时都需要根据最新的限制来排查整个app中的接口调用情况。而每个Android版本,准确来说是每个targetSdk版本都有一个特定的hiddenapi-flags.csv文件来定义非SDK接口限制。谷歌官网中有提供所有版本的hiddenapi-flags.csv文件下载链接,网页地址如下:
https://developer.android.google.cn/guide/app-compatibility/restrictions-non-sdk-interfaces?hl=zh-cn

但是此页面中提供的下载链接地址无效,无法下载,使用vpn也不行。其实有个简单的方式可以下载到正确的文件:
将下载链接复制下来,然后替换域名,将原来的googledownloads.cn域名改为:dl.google.com即可。

Android10(targetSdk29)
原无效地址:https://googledownloads.cn/developers/android/qt/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/qt/non-sdk/hiddenapi-flags.csv

Android11(targetSdk30)
原无效地址:https://googledownloads.cn/developers/android/rvc/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/rvc/non-sdk/hiddenapi-flags.csv

Android12(targetSdk31)
原无效地址:https://googledownloads.cn/developers/android/sc/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/sc/non-sdk/hiddenapi-flags.csv

Android13(targetSdk33)
原无效地址:https://googledownloads.cn/developers/android/tm/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/tm/non-sdk/hiddenapi-flags.csv

Android14(targetSdk34)
原无效地址:https://googledownloads.cn/developers/android/udc/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/udc/non-sdk/hiddenapi-flags.csv

Android15(targetSdk35)
原无效地址:https://googledownloads.cn/developers/android/vic/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/vic/non-sdk/hiddenapi-flags.csv

Android16(targetSdk36)
原无效地址:https://googledownloads.cn/developers/android/baklava/non-sdk/hiddenapi-flags.csv
新有效地址:https://dl.google.com/developers/android/baklava/non-sdk/hiddenapi-flags.csv

注意:
下载之后最好计算一下hiddenapi-flags.csv文件的SHA-256,检查一下跟官网上给出是否相同?如果不相同说明下载有异常,需要重新下载。
 

<think>我们正在处理一个关于Android构建过程中出现的错误,具体是`hiddenapi-stub-flags.txt`文件验证失败。错误信息提到了`verify_overlaps`工具执行失败,并且有一个Python的traceback。根据提供的引用内容,我们可以知道:-引用[1]展示了具体的构建失败信息,其中`verify_overlaps`工具在验证`hiddenapi-stub-flags.txt`出现了异常(Traceback)。-引用[3]提到,在构建过程中会生成三个隐藏API的列表文件(黑名单、暗灰名单、亮灰名单),这些是ART检查API调用的依据。-引用[4]提到了与隐藏API相关的白名单配置文件(如`framework-sysconfig.xml`,`google.xml`等),这些文件可能影响隐藏API的反射调用。-引用[5]展示了另一个构建失败的情况,涉及API文档生成(`api-stubs-timestamp`)和`public_api.txt`等文件,但与我们当前的问题不完全相同。根据用户的问题,我们需要解决`out/soong/hiddenapi/hiddenapi-stub-flags.txt.valid`验证失败问题。###问题分析1.**错误原因**:`verify_overlaps`工具在验证`hiddenapi-stub-flags.txt`出现了异常(Traceback)。这表明可能是该文件的内容有错误,或者工具本身遇到了问题。2.**隐藏API列表**:在构建过程中,系统会生成隐藏API的名单(黑名单、暗灰名单、亮灰名单),这些名单用于控制应用对SDKAPI的访问。`hiddenapi-stub-flags.txt`可能是其中一个中间文件。3.**可能的原因**:-隐藏API名单文件(如`hiddenapi-blacklist.txt`,`hiddenapi-dark-greylist.txt`,`hiddenapi-light-greylist.txt`)中存在重叠或冲突的条目。-构建系统在生成这些文件出现了错误。-设备制造商(OEM)或系统开发者添加的自定义API可能未正确配置,导致与AOSP的隐藏API策略冲突。-代码中使用了SDKAPI(即隐藏API),并且这些使用没有被正确列入相应的名单中。###解决方案步骤####1.清理构建并重新生成首先尝试清理与隐藏API相关的中间文件,然后重新构建:```bash#删除隐藏API相关的中间文件rm-rfout/soong/hiddenapi#或者更彻底的清理(谨慎使用,因为会清除整个out目录)#rm-rfout#然后重新构建make-j```####2.检查隐藏API名单文件检查项目中是否有自定义的隐藏API名单文件,并确保它们格式正确且没有冲突。特别是:-检查`vendor`目录下是否有自定义的隐藏API名单文件,这些文件可能会与AOSP的名单冲突。-检查`frameworks/base/config`目录下的相关配置文件,如`hiddenapi-package-whitelist.xml`等(引用[4]提到)。####3.检查SDKAPI的使用如果项目中有代码使用了SDKAPI,需要确保这些使用被正确列入白名单或灰名单。可以通过以下方式:-在`frameworks/base/config`目录下的白名单配置文件中添加包名或类名(引用[4])。-使用`@hide`注解标记公开API,并确保它们被正确列入相应的隐藏API名单。####4.检查`verify_overlaps`工具错误信息中提到了`verify_overlaps`工具,它是用来验证隐藏API名单是否重叠的。可以尝试手动运行该工具来调试:```bash#进入构建输出目录cdout#运行verify_overlaps工具,指定参数host/linux-x86/bin/verify_overlaps--monolithic-flagssoong/hiddenapi/hiddenapi-stub-flags.txt--module-flags```如果手动运行出现同样的错误,可以查看具体的错误信息,从而定位问题。####5.检查构建日志详细查看构建日志,找到错误发生前的上下文,可能有助于定位问题:```bash#查看构建日志tail-n100out/error.log#假设错误日志在out/error.log```####6.更新AOSP代码如果问题出现在AOSP的特定版本中,可能是已知问题。尝试更新到最新代码,或者查找是否有相关的补丁。####7.禁用隐藏API检查(临方案)如果以上方法都不行,可以尝试临禁用隐藏API检查(不推荐,仅用于验证):在构建命令中添加环境变量:```bashexportDISABLE_HIDDENAPI_FLAGS=truemake-j```注意:这只是为了验证是否确实是隐藏API检查导致的问题,不建议在正式发布版本中使用。###总结该错误通常是由于隐藏API名单文件中的冲突或格式问题引起的。通过清理构建、检查自定义名单、验证SDKAPI的使用以及手动运行验证工具,通常可以解决。§§相关问题§§1.如何正确配置Android隐藏API的白名单?2.Android构建过程中,还有哪些常见的与隐藏API相关的错误?3.如何解决`verify_overlaps`工具执行出现的Python异常?</think>### 关于 hiddenapi-stub-flags.txt 验证失败解决方案 #### 问题分析 根据错误信息 `FAILED: out/soong/hiddenapi/hiddenapi-stub-flags.txt.valid` 和 `verify_overlaps` 工具报错,该问题通常发生在 Android 构建过程中验证隐藏 API 列表。核心原因是: 1. **隐藏 API 列表冲突**:`hiddenapi-stub-flags.txt` 中的 API 标记存在重叠或矛盾[^3] 2. **SDK 版本不匹配**:模块使用的 SDK 版本与隐藏 API 策略冲突[^4] 3. **API 变更未同步**:修改 framework API 后未更新相关列表文件[^5] #### 解决步骤 1. **清理构建缓存** ```bash make clean rm -rf out/soong/hiddenapi/ ``` 2. **检查 API 变更一致性** ```bash # 在项目根目录执行 ./build/soong/soong_ui.bash --make-mode update-api ``` 3. **验证隐藏 API 列表** ```bash # 手动运行验证工具 out/host/linux-x86/bin/verify_overlaps \ --monolithic-flags out/soong/hiddenapi/hiddenapi-stub-flags.txt \ --module-flags ``` 检查输出中的具体冲突位置 4. **检查白名单配置** 确保以下文件配置正确: ```markdown frameworks/base/core/res/res/xml/ └── hiddenapi-package-whitelist.xml [^4] ``` 5. **检查 SDK 版本控制** 在 `Android.bp` 或 `Android.mk` 中确认: ```makefile sdk_version: "current" # 或指定具体版本 ``` 6. **修复 API 标记冲突** 若发现特定 API 冲突: ```diff # 在 hiddenapi-stub-flags.txt 中修正 -com.example.Foo->method()=blocked +com.example.Foo->method()=whitelist ``` #### 关键配置点 1. **隐藏 API 策略级别**(在 `device.mk` 中): ```makefile # 开发版本启用警告 ro.art.hiddenapi.warning=1 [^2] ``` 2. **API 列表生成位置**: ```bash out/target/common/obj/PACKAGING/ ├── hiddenapi-blacklist.txt ├── hiddenapi-dark-greylist.txt └── hiddenapi-light-greylist.txt [^3] ``` #### 验证修复 ```bash # 重新构建隐藏API模块 make hiddenapi # 完整编译 make -j16 ``` > **重要提示**:若修改了 `android.provider.Settings` 等 framework API[^5],必须同步更新 `public_api.txt` 和 `removed.txt`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值