在此构建中使用了已弃用的Gradle功能,导致其与Gradle 5.0不兼容。

318

我遇到了Gradle构建失败的问题:

..."Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0."

案例描述:

  • 已附加到项目代码库中的下一个库:

APP/build.gradle

    //(Required) Writing and executing Unit Tests on the JUnit Platform 
testImplementation "org.junit.jupiter:junit-jupiter-api:5.2.0"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.2.0"
    // (Optional) If you need "Parameterized Tests"
testImplementation "org.junit.jupiter:junit-jupiter-params:5.2.0"
    // (Optional) If you also have JUnit 4-based tests
testImplementation "junit:junit:4.12"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:5.2.0"

testImplementation "io.mockk:mockk:1.8.5"
  • 更新了gradle-wrapper.properties

    distributionUrl=https....gradle-4.4-all.zip至4.7-all

  • 完成所有Gradle的构建后成功了

  • 创建了测试类

  • @TestInstance(TestInstance.Lifecycle.PER_CLASS)
      class TestClass {
    
      @Test
      internal fun testName() {
        Assert.assertEquals(2, 1 + 1)
      }
    }
    
  • 运行测试,出现了FAILURE消息。 在这里输入图片描述

  • 通过命令行参数./gradlew --warning-mode=all运行Gradle构建,以查看哪些已弃用的功能确切地是什么。 在这里输入图片描述

结果我无法构建应用程序,收到了FAILURE消息。


3
这不算是失败吧?应用程序还是可以编译成功的,对吧? - EpicPandaForce
2
应用程序编译时出现相同的失败消息。 :-( - Philipp Buhaievskiy
6
那不算失败。如果应用程序无法编译,那才算是失败。这至多只是一个“警告”。 - EpicPandaForce
@EpicPandaForce,不幸的是,正如我所提到的,那确实是一个失败的消息。问题不在于如何解释这个消息,但无论如何,我很感激你的影响力。 - Philipp Buhaievskiy
尝试这个解决方案。 只需添加一些代码。 https://stackoverflow.com/questions/54276381/lint-found-fatal-errors-while-assembling-a-release-target-er - Henrik Segercrantz
33个回答

172

使用命令行参数--warning-mode=all运行Gradle构建,以查看哪些已弃用的功能。

它将提供详细的描述,包括指向Gradle文档的链接,以便您了解如何修复构建问题。

如果添加--stacktrace参数,您还可以定位警告来自哪里,是否由插件中过期的代码触发而不是您的构建脚本。


40
当我运行 react-native run-android --warning-mode all 时,出现了 error: unknown option --warning-mode' 错误。 - Ren
48
尝试运行命令 gradle build --warning-mode=all,这会启用所有警告模式。 - Jordan Daniels
4
我应该在哪里添加这个命令?是在Android Studio终端吗?当我在那里输入时,会出现以下提示:'gradle' is not recognized as an internal or external command, operable program or batch file. - Stefan
25
使用npx react-native run-android -- --warning-mode=all命令来运行React-Native。 - Lakshit Nagar
2
@Hassa 如果你使用的是Windows系统,可以在任务栏中搜索并输入“cmd”来打开命令提示符。然后进入你的项目目录,例如C:\Users\你的计算机用户名\我的项目文件夹\我的项目名称。输入gradlew build --warning-mode=all并按回车键即可开始构建。 - gig6
显示剩余5条评论

98

试试这个

cd android && ./gradlew clean && ./gradlew :app:bundleRelease

3
谢谢,您能解释一下为什么这个命令"./gradlew :app:bundleRelease"有效而这个命令"./gradlew bundleRelease"无效吗? - Atikur Rahman Sabuj
4
这取决于 ./gradlew 文件的编写方式。由于 Android 的默认模块是“app”,而 Android 应用程序可以具有多个模块。另外,只有在清理后才能使用 ./gradlew。要查看 gradlew 中的所有任务,请执行“./gradlew tasks”命令,该命令将告诉您 gradlew 中可用的任务。 - Amr Ashraf
它给了我一个名为app-release.aab的文件,但我无法在我的手机上打开。 - Jagroop
对我来说完美运行。运行此命令后,返回到移动文件夹并像往常一样运行您的Android脚本。构建应该成功。 - Dr. Younes Henni
在我的情况下:npx react-native run-android -- --gradle-version 7.5.1 - Enrique San Martín
显示剩余2条评论

47

我的项目与Gradle 8.0不兼容。以下是对我有效的解决方法: 首先,我在Android Studio终端中编写了这行代码:

./gradlew build --warning-mode all
当你这样做时,logcat会显示在你的项目中被发现的已废弃或存在问题的内容,对我来说需要删除settings.gradle文件中的jcenter()库,并且还需要将build.gradle项目文件中的classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"更新为classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"。完成这些操作后,我的项目构建完美并安装在模拟器上。

1
我编辑了 settings.gradle 文件并移除了 jcenter,警告消失了。 - user2959589
1
我是新手,完全不知道如何运行建议使用warning-mode all。当我第一次阅读你的答案时,我卡住了,但我重新阅读并看到你在Android Studio终端中说的话。我尝试了一下,得到了与jcenter()弃用相同的警告。我删除了它,警告消失了。重要提示:这样做后,您必须重新将应用程序项目与Gradle文件同步,否则应用程序无法安装在模拟器或物理设备上。 - wocmultimedia

43

以下流程适用于我的情况- 首先检查Gradle版本:

cd android
./gradlew -v

在我的情况下它是6.5

转到https://developer.android.com/studio/releases/gradle-plugin,您将获得适用于您的gradle版本的插件版本。 对于gradle版本6.5,插件版本为4.1.0

然后转到app/build.gradle并更改classpath 'com.android.tools.build:gradle:<plugin_version>


8
你刚刚帮我解决了一个让我困扰三天的问题,非常感谢。 - cdaiga
对于我的情况,Gradle 7.2 需要插件 7.0,但是它无法工作。 - Chanrithisak Phok
1
我的Gradle版本是7.2,但插件链接显示的是7.1。我进行了更改,但出现了以下错误:>无法找到com.android.tools.build:gradle:7.1。 搜索位置如下:
  • https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.1/gradle-7.1.pom
  • https://repo.maven.apache.org/maven2/com/android/tools/build/gradle/7.1/gradle-7.1.pom 由以下项目所需:project:
- William
不是“app/build.gradle”,而是“android/build.gradle”。 - WestMountain

25
我遇到了这个错误。结果发现只有当我完全清除了RN缓存(相当复杂的过程),然后创建一个发布版本时才会出现这个错误。
如果我清除了缓存,创建了一个调试版本,然后再创建一个发布版本,那么一切都正常工作。有点令人担忧,但是可行。
注意:我的清理命令是... rm -r android/build; rm -r android/app/src/release/res; rm -r android/app/build/intermediates; watchman watch-del-all; rm -rf $TMPDIR/react-*; npm start -- --reset-cache

3
这是经过数小时的搜索和尝试后得出的正确答案。 - David Tedman-Jones
也对我有用,只是在更新了其他依赖项后。 - dacx

13

重要 - 答案仅适用于REACT-NATIVE VS CODE终端

在VisualStudio Code中,您需要按以下方式运行,然后该警告将被忽略。

react-native run-android warning-mode=all

如果您运行以下命令,则终端会出现错误。 运行 react-native run-android --warning-mode all 命令时,我遇到错误:未知选项--warning-mode'


10

在我的情况下,我更新了build.gradle文件并将classpath3.5.2升级到最新版本的3.6.3

dependencies {
        classpath("com.android.tools.build:gradle:3.6.3") 
    }

9

在我的情况下,在Android/app/build.gradle文件中添加multiDexEnabled true编译了这些文件。

我将来会考虑删除这个选项,因为在文档中提到,“在配置应用程序以启用使用64K或更多方法引用之前,您应该采取措施来减少应用程序代码调用的总引用数量,包括由应用程序代码或包含的库定义的方法。”

defaultConfig {
  applicationId "com.peoplesenergyapp"
  minSdkVersion rootProject.ext.minSdkVersion
  targetSdkVersion rootProject.ext.targetSdkVersion
  versionCode 1
  versionName "1.0"
  multiDexEnabled true // <-add this 
}

1
如果您的应用程序仅针对Android 21或更高版本(minSdkVersion),则multidex已默认启用,您不需要使用multidex支持库。 但是,如果您的minSdkVersion设置为20或更低,则必须使用multidex支持库。 - Son Nguyen

6
以下解决方案对我很有帮助,因为我也遇到了同样的警告。 在你的项目级别的 gradle 文件中,试着修改 classpath 里的 gradle 版本。
classpath "com.android.tools.build:gradle:3.6.0" to
classpath "com.android.tools.build:gradle:4.0.1"

1
在尝试了所有其他方法之后,这对我起作用了。它救了我的一天。谢谢。 - Shapon Pal
我一直在为这个错误苦苦挣扎了两个小时。这个答案节省了我很多浪费的时间。 - Gabriel Arghire
那个文件和条目在哪里? - Nasenbaer

5

前往 gradle/wrapper/gradle-wrapper.properties,将 distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip 更改为所需的版本(或更高版本)。

然后再次运行cd android && ./gradlew bundleRelease


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接