Данный артефакт содержит строковый литерал со ссылкой на пакет android.support.v4.content, которую нельзя безопасно переписать. для androidx

102

Я обновил свой, 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. Я получаю указанную выше ошибку, когда пытаюсь создать подписанный apk с minifyenabled и shrinkresources, для которых установлено значение true. В противном случае я могу запустить приложение в эмуляторе или устройстве. Как решить эту проблему?
Арпит Растоги,
Хороший вопрос! Очень полезно, спасибо
Androider

Ответы:

163

Новый правильный ответ:

В Butterknife 10.0.0 добавлена ​​поддержка AndroidX.

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

Старый ответ для Butterknife <10.0.0:

Попробуйте занести масляный нож в черный список на сайте jetifier:

gradle.properties file:

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

Вам необходимо использовать 3.3.0-rc1 AGP и версию 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'
    }
}
Хорхе Хиль
источник
Я думаю, вы не добавляете android.jetifier.blacklist = butterknife. * \\. Jar, потому что я тестировал это не сработало. Вы только добавляете путь к классам com.jakewharton: butterknife-gradle-plugin: 9.0.0-rc2, тогда он будет работать при отладке и экспорте файла apk без проблем.
kimcy929
Более подробную информацию можно найти здесь issueetracker.google.com/issues/119135578#comment5
Джуд Фернандес
1
Этот ответ правильный, но взгляните на: stackoverflow.com/a/54345816/371749 обновить Butterknife до 10, также решает эту проблему лучше.
cV2
Это решение отлично работает для отладочной сборки, но я не могу создать подписанный выпуск APK. Данный артефакт содержит строковый литерал со ссылкой на пакет android.support.v4.widget, которую нельзя безопасно переписать. Библиотеки, использующие отражение, такие как процессоры аннотаций, необходимо обновлять вручную, чтобы добавить поддержку androidx.
Арпит Растоги,
очень полезно, спасибо
Androider
61

Добавьте последнюю версию зависимости от Butterknive, вы можете проверить ее здесь, если она изменится ( https://github.com/JakeWharton/butterknife ). Он поддерживает androidX. Затем перейдите в программу сборки приложения и замените старую версию на следующую:

dependencies {
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
}
Шид
источник
28

Для androidx просто обновите свои зависимости до версии '10.0.0 '.

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

Ищите документацию здесь

Ришаб Саксена
источник
В текстовом поле редактирования My Click отображается пустой указатель. это не инициализируется.
Васудев Вьяс
18

Обновите ButterKnife до последней версии и обязательно добавьте их в свой build.gradle (приложение):

android {
...
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}
twenk11k
источник
лучший ответ, после обновления, которое я искал в этом решении -> Ошибка: методы статического интерфейса поддерживаются только начиная с Android N (--min-api 24): void butterknife.Unbinder.lambda $ static $ 0 ()
avisper
люблю тебя, чувак, ты сделал это ... я потратил полдня на поиски, потом приходит этот ответ
Зишан Мехди
4

В моем проекте не используется масляный нож, но у меня была та же ошибка "Данный артефакт содержит строковый литерал со ссылкой на пакет '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

Луис Оливарес
источник
1

Какую версию, если вы используете Butterknife? Последняя версия 9.0.0-rc2 поддерживает androidx.

UPD: Есть закрытая проблема с репозиторием на github .Временное решение

Добавьте android.jetifier.blacklist = butterknife-compiler в свой файл gradle.properties.

Константин Берков
источник
Я использую 9.0.0-rc2, и я получаю точно такую ​​же ошибку
Хорхе Гил
1

Использование последней версии Butterknife решило проблему. Используйте> = 9.0.0-rc2 (версия Butterknife) для поддержки androidX. Для получения последней версии проверьте ссылку - https://github.com/JakeWharton/butterknife/releases

Чахат Джайн
источник
0

+ Изменить

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

к

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

или другие Материальные темы. Получил эту ошибку после запуска нового проекта с "Нет активности" в Android Studio 4.0.1

user2965003
источник
0

обновить Butterknife + сделать кеш недействительным и перезапустить + синхронизировать gradle, если buterknife не используется, просто очистите кеш и перезапустите

Мустафа Шахин
источник