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

Azure运行Android测试遇类型不匹配错误,指向HttpLoggingInterceptor

Azure流水线Android测试编译失败排查与解决

问题现象

在Azure流水线执行Android项目test步骤时,compileDebugKotlin和compileReleaseKotlin两个Gradle任务失败,错误信息:

Type mismatch: inferred type is () -> String? but String? was expected

问题指向HttpLoggingInterceptor相关代码,但本地执行相同Gradle任务无异常。已更新Interceptor依赖,本地与Azure均使用Gradle Wrapper 8.0。

相关代码

OkHttpClient构建代码

private fun getHttpClient(
    ): OkHttpClient {

        val logger = HttpLoggingInterceptor()
        logger.level = HttpLoggingInterceptor.Level.BODY

        val customLoggingInterceptor = CustomLoggingInterceptor(logger)

        return OkHttpClient.Builder()
            .addInterceptor(
                BearerInterceptor { token }
            )
            .addInterceptor(
                customLoggingInterceptor
            )
            .addInterceptor(
                logger
            )
            .connectTimeout(
                CONNECTION_TIMEOUT_IN_SECONDS,
                TimeUnit.SECONDS
            )
            .readTimeout(
                CONNECTION_TIMEOUT_IN_SECONDS,
                TimeUnit.SECONDS
            )
            .build()
    }

Azure流水线YAML配置

# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android

# Pipeline to run the tests as a precondition to every direct commit / Pull Request to develop/main branches
trigger:
  branches:
    include:
      - develop
      - main

pr:
  branches:
    include:
      - develop
      - main

pool:
  vmImage: 'ubuntu-latest'

resources:
  repositories:
    - repository: my_subrepository
      type: git
      name: TheAzureProject/TheMainRepository

steps:
- checkout: self
- checkout: my_subrepository
  path: s/TheMainRepository/my_subrepository

- task: JavaToolInstaller@0
  displayName: Setup Java 17
  inputs:
    versionSpec: '17'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'PreInstalled'

- task: Gradle@3
  displayName: Run Tests
  inputs:
    workingDirectory: 'TheMainRepository'
    gradleWrapperFile: 'TheMainRepository/gradlew'
    gradleOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    publishJUnitResults: true
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'test'

解决方案

核心代码修正

错误的直接原因是BearerInterceptor的参数传递错误:当前代码BearerInterceptor { token }传递的是一个lambda表达式(类型为() -> String?),但BearerInterceptor的构造函数期望接收String?类型的参数。只需去掉lambda的大括号,直接传入token变量即可:

.addInterceptor(
    BearerInterceptor(token)
)

额外排查方向(若上述修正无效)

如果BearerInterceptor设计上确实需要接收一个提供token的函数(参数类型为() -> String?),需检查:

  • 流水线中拉取的子仓库my_subrepository里,BearerInterceptor的实现是否与本地一致,避免因代码同步不及时导致的定义差异。
  • 确认依赖更新是否在流水线中生效,可在流水线中添加./gradlew dependencies任务查看依赖版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:17:05