给定的工件包含一个字符串文字,其字符串包参考'android.support.v4.content'无法安全地重写。对于androidx


99

我升级了我的软件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

有人知道如何解决此问题吗?


尝试过这一点:没有运气
Tnaffh

您尝试添加到黑名单中的正则表达式是什么?
豪尔赫·吉尔

给定的工件包含字符串文字,该字符串文字具有无法安全地重写的包引用'android.support.v4.widget'。使用反射的库(例如注释处理器)需要手动更新,以增加对androidx的支持。当我尝试使用minifyenabled和rinkreresources设置为true创建签名的apk时,收到上述错误。我可以在仿真器或设备中运行应用程序。如何解决这个问题?
Arpit Rastogi

好问题!非常有帮助,谢谢
Androider

Answers:


148

新的正确答案:

Butterknife 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和Kotlin Gradle插件的1.3.0版本:

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'
    }
}

我认为您不添加android.jetifier.blacklist = butterknife。* \\。jar,因为我测试了它不起作用。您只需添加类路径'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2',即可在调试和导出文件apk时正常工作。
kimcy929


1
这个答案是正确的,但请看一下:stackoverflow.com/a/54345816/371749将butterknife更新为10,也可以更好地解决此问题。
cV2

此解决方案可用于调试版本,但我无法创建签名的发行版APK。给定的工件包含字符串文字,该字符串文字具有无法安全地重写的包引用'android.support.v4.widget'。使用反射的库(例如注释处理器)需要手动更新,以增加对androidx的支持。
Arpit Rastogi

非常有帮助,谢谢
Androider

60

添加最新版本的butterknive依赖项,如果它发生更改,可以在此处进行检查(https://github.com/JakeWharton/butterknife)。它支持androidX。然后转到您的应用构建版本,并用以下内容替换旧版本:

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

27

对于androidx,只需将您的依赖项升级到版本“ 10.0.0”

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

在此处查找文档


我的单击编辑文本框提供了空指针。它不是初始化的。
Vasudev Vyas

18

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

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

最佳答案,升级后,我在此解决方案中搜索->错误:仅从Android N(--min-api 24)开始支持静态接口方法:void butterknife.Unbinder.lambda $ static $ 0()
avisper

爱你,你做到了...我浪费了半天的搜索时间,然后这个答案来了。
Zeeshan Mehdi



1

我的项目未使用黄油刀,但出现了相同的错误“给定的工件包含字符串文字,其包引用为'android.support.v4.widget',无法安全地重写。使用反射的库(例如注释处理器)需要手动进行更新以添加对androidx的支持“这是我为解决该问题所做的事情:更新您的包裹版本

gradle构建文件

更换:

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文件代码 gradle文件视图


0

更改

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

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

或其他材料主题。在Android Studio 4.0.1中以“无活动”启动新项目后出现此错误


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.