davexa 2026-01-16 21:47 采纳率: 66.7%
浏览 3

一个旧Android project,在Android Studio下编译,模块的build.gradle报出两类警告!

一个旧Android project,在新版Android Studio下编译,如下模块的build.gradle爆出两类警告:

1). Declaring dependencies using multi-string notation has been deprecated. This will fail with an error in Gradle 10. Please use single-string notation instead: "com.android.tools.lint:lint-gradle:31.13.2".

2). The Configuration.isVisible method has been deprecated. This is scheduled to be removed in Gradle 10.

现在用的Gradle是 9.2.1,不是10,但还是想搞清楚问题所在,趁早解决掉问题。
模块的build.gradle如下,请帮忙看看是那几行写法有问题?谢谢,程序员们大家周末愉快!


apply plugin: 'com.android.library'

android {

    namespace = 'com.test1.test2.test3'

    compileSdk {
        version = release(36)
    }

    defaultConfig {
        minSdk = 14
        targetSdk = 36
    }

    buildTypes {
        release {
            minifyEnabled = false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    buildFeatures {
        aidl = true
        buildConfig = true
    }
}

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-01-16 21:48
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你提到的两个警告信息,虽然目前在 Gradle 9.2.1 中不会立即报错,但它们是未来版本(如 Gradle 10)中将被移除的功能。因此,建议你尽早进行修复,以确保项目在未来升级时不会出现问题。


    🧩 一、问题分析

    1. 警告 1:Declaring dependencies using multi-string notation has been deprecated

    这个警告是因为你在 dependencies 块中使用了多字符串写法,即:

    dependencies {
        implementation "com.android.tools.lint:lint-gradle:31.13.2"
    }
    

    但如果你是这样写的:

    dependencies {
        implementation "com.android.tools.lint:lint-gradle" version "31.13.2"
    }
    

    这就是多字符串写法(multi-string notation),它已经被弃用,未来会报错。

    正确写法(single-string notation):

    implementation "com.android.tools.lint:lint-gradle:31.13.2"
    

    2. 警告 2:The Configuration.isVisible method has been deprecated

    这个警告说明你在某些地方使用了 Configuration.isVisible() 方法,而该方法在 Gradle 10 中会被移除。

    这通常出现在 build.gradle 文件中对配置的检查,例如:

    if (configurations.all.find { it.name == 'myConfig' }?.isVisible) {
        // do something
    }
    

    或者可能是通过插件或自定义逻辑调用了这个方法。


    🛠️ 二、解决方案

    步骤 1:检查依赖声明方式

    目标:确保所有依赖项都使用单字符串格式。

    🔍 检查你的 dependencies 块,例如:

    dependencies {
        implementation "com.android.tools.lint:lint-gradle:31.13.2"
        // 或者其他依赖
    }
    

    ✅ 如果你是这样写的,就没问题。

    ❌ 如果你写成:

    implementation "com.android.tools.lint:lint-gradle" version "31.13.2"
    

    请修改为单字符串格式


    步骤 2:查找并替换 Configuration.isVisible() 的使用

    目标:找到所有使用 Configuration.isVisible() 的代码,并将其替换为替代方案。

    🔍 检查 build.gradle 中是否有类似代码:

    def myConfig = configurations.find { it.name == 'myConfig' }
    if (myConfig?.isVisible) {
        // ...
    }
    

    ⚠️ 这里的 isVisible 是被弃用的方法。

    ✅ 替代方案:

    你可以使用 !isMissing() 来判断配置是否存在,或者直接使用 find 方法。

    例如:

    def myConfig = configurations.find { it.name == 'myConfig' }
    if (myConfig) {
        // 配置存在
    }
    

    或者:

    if (configurations.find { it.name == 'myConfig' }) {
        // 配置存在
    }
    

    🧾 三、修改后的 build.gradle 示例

    假设你原来的 build.gradle 中有如下内容:

    dependencies {
        implementation "com.android.tools.lint:lint-gradle" version "31.13.2"
    }
    
    // 其他配置...
    

    ✅ 修改后:

    dependencies {
        implementation "com.android.tools.lint:lint-gradle:31.13.2"
    }
    
    // 其他配置...
    

    如果还有 isVisible() 的使用,比如:

    if (configurations.all.find { it.name == 'myConfig' }?.isVisible) {
        // ...
    }
    

    ✅ 修改为:

    if (configurations.find { it.name == 'myConfig' }) {
        // ...
    }
    

    ✅ 四、总结

    | 警告类型 | 问题原因 | 解决方案 | |----------|----------|----------| | 多字符串依赖声明 | 使用了 name version "x.x.x" 格式 | 改为 name:x.x.x | | Configuration.isVisible() | 该方法已被弃用 | 替换为 configurations.find{...} |


    🧪 五、验证修改

    修改完成后,重新同步 Gradle 项目,查看是否还存在上述警告。如果仍然有警告,请检查是否有其他模块或插件也使用了这些过时的 API。


    如有更多代码片段或具体错误日志,欢迎继续提供,我可以帮你更精准地定位问题!祝你周末愉快 😊

    评论

报告相同问题?

问题事件

  • 创建了问题 1月16日