给定的工件包含一个字符串文字,其包引用‘ android.Support.v4.content’不能被安全地重写

我升级了我的 android studio to 3.4 canary,现在由于以下错误我不能再成功构建了:

The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.

更多细节:

Caused by: java.lang.RuntimeException: Failed to transform '.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-compiler/9.0.0-SNAPSHOT/732f93940c74cf32a7c5ddcc5ef66e53be052352/butterknife-compiler-9.0.0-SNAPSHOT.jar' using Jetifier. Reason: The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.. (Run with --stacktrace for more details.)

显然,这与 Butterknife, androidx and Jetifier有关

有人知道怎么修吗?

99399 次浏览

如果您使用巴特刀,您会使用哪个版本? 最新版本9.0.0-rc2支持 androidx。

UPD: 在巴特奈夫的 Github 回购临时解决办法上有封闭的问题

在 gradle.properties 文件中添加 android.jetifier.blacklist = butife-Editor。

新的正确答案:

Butterife 10.0.0增加了对 AndroidX 的支持。

dependencies {
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
}

巴特奈夫的旧答案 < 10.0.0:

试试把奶油刀列入黑名单:

gradle.properties file:


android.jetifier.blacklist = butterknife.*\\.jar

你需要使用 AGP 的3.3.0-rc1和1.3.0版本的 Kotlin Gradle 插件:

buildscript {
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0-rc01'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.0"
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2'
}
}

添加 Butterknive 依赖项的最新版本,如果它发生变化,您可以在这里检查它(https://github.com/JakeWharton/butterknife)。 它支持 androidX,然后打开你的应用程序 build graddle,用下面的代码替换旧版本:

dependencies {
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
}

使用最新版本的 Butterife 解决了这个问题,使用 > = 9.0.0-rc2(Butterife Version)来支持 androidX。 查看最新版本的链接-< a href = “ https://github.com/jakeWharton/butife/release”rel = “ nofollow norefrer”> https://github.com/jakewharton/butterknife/releases

升级 ButterKnife 到最新版本,并确保添加到 build.gradle (app) :

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

对于 androidx,只需将您的依赖关系升级到版本“10.0.0”即可

dependencies {
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
}

查找文档 给你

改变

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

或其他材料主题。 在 Android Studio 4.0.1中以“ No Activity”启动 New Project 后得到此错误

我的项目没有使用巴特奈夫,但是我也犯了同样的错误“给定的工件包含一个字符串文字和一个包引用‘ android.Support.v4.widget’,它不能被安全地重写。使用反射(如注释处理器)的库需要手动更新,以添加对 androidx 的支持 ” 这就是我为了解决它所做的: 更新你的包裹版本

梯级生成文件,梯级生成文件

更换:

annotationProcessor 'org.parceler:parceler:1.1.6'
implementation 'org.parceler:parceler-api:1.1.6'

配合:

  annotationProcessor 'org.parceler:parceler:1.1.13'
implementation 'org.parceler:parceler-api:1.1.13'

gradle file code gradle file view

更新蝴蝶刀 + 无效缓存和重新启动 + 同步分级 if buterknife not used just clear cache and restart