You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Android SDK/AGP后无法从设备复制基线配置文件输出

问题背景

升级以下配置后,基线配置文件生成流程出现异常:

config.target_sdk_version = 34 // 原31
config.compile_sdk_version = 34 // 原33
versions.android_gradle_plugin = '8.1.1' // 原7.3.1
versions.kotlin = '1.9.0' // 原1.8.10

执行:benchmark:connectedReleaseAndroidTest时触发两类错误:

  1. Netty原生库缺失:
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative_osx_aarch_64.jnilib
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative_aarch_64.jnilib
java.io.FileNotFoundException: META-INF/native/libnetty_tcnative.jnilib
  1. 权限设置失败:
Shell command failed (255): appops set androidx.test.services MANAGE_EXTERNAL_STORAGE allow
No UID for androidx.test.services in user 0

基线测试能在设备上运行,但无法成功复制输出文件,日志显示尝试移动文件到外部存储的additional_test_output目录,但最终无法拉取到本地。


解决方案

1. 修复Netty原生库缺失问题

Android测试环境不需要OSX架构的Netty库,问题出在依赖引入了多余的平台库。在模块的build.gradle中调整Netty相关依赖,排除OSX架构的模块:

androidTestImplementation("io.netty:netty-tcnative-boringssl-static:2.0.61.Final") {
    exclude group: 'io.netty', module: 'netty-tcnative-boringssl-static-osx-x86_64'
    exclude group: 'io.netty', module: 'netty-tcnative-boringssl-static-osx-aarch_64'
}

或者直接指定Android适配的分类器:

androidTestImplementation("io.netty:netty-tcnative-boringssl-static:2.0.61.Final:android-arm64")
androidTestImplementation("io.netty:netty-tcnative-boringssl-static:2.0.61.Final:android-x86_64")

2. 解决MANAGE_EXTERNAL_STORAGE权限错误

SDK34对外部存储权限管控更严格,且androidx.test.services并非独立应用,不存在对应的UID。无需给测试服务设置该权限,改为调整基线配置文件的输出路径到应用私有目录:

  • 修改BaselineProfileGenerator中的输出路径,使用应用私有外部目录:
val outputDir = context.getExternalFilesDir(null) ?: context.filesDir
val profileFile = File(outputDir, "BaselineProfileGenerator_startup-baseline-prof.txt")
  • 或者在AGP的基线配置中指定私有路径,避免访问公共外部存储:
baselineProfile {
    outputDir = layout.buildDirectory.dir("baselineProfiles")
    useConnectedDevices = true
}

3. 修复文件复制/拉取失败问题

使用应用私有目录后,adb拉取命令需要调整为对应路径,例如:

adb pull "/sdcard/Android/data/com.doximity.benchmark/files/BaselineProfileGenerator_startup-baseline-prof-2023-08-22-18-48-56.txt" .

同时升级androidx.benchmark依赖到适配AGP8.1和SDK34的版本(比如1.2.0及以上),确保插件能自动处理文件复制逻辑,无需手动移动文件。


内容的提问来源于stack exchange,提问作者jpetitto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:47:25