อาร์ติแฟกต์ที่ระบุมีสตริงลิเทอรัลที่มีการอ้างอิงแพ็กเกจ 'android.support.v4.content' ที่ไม่สามารถเขียนซ้ำได้อย่างปลอดภัย สำหรับ androidx


105

ฉันอัปเกรด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

นิพจน์ทั่วไปที่คุณพยายามเพิ่มในบัญชีดำคืออะไร
Jorge Gil

อาร์ติแฟกต์ที่ระบุมีสตริงลิเทอรัลที่มีการอ้างอิงแพ็กเกจ 'android.support.v4.widget' ซึ่งไม่สามารถเขียนซ้ำได้อย่างปลอดภัย ไลบรารีที่ใช้การสะท้อนเช่นตัวประมวลผลคำอธิบายประกอบต้องได้รับการอัปเดตด้วยตนเองเพื่อเพิ่มการสนับสนุนสำหรับ androidx ฉันได้รับข้อผิดพลาดข้างต้นเมื่อฉันพยายามสร้าง apk ที่ลงนามด้วย minifyenabled และ shrinkresources ตั้งค่าเป็น true ฉันสามารถเรียกใช้แอปพลิเคชันในโปรแกรมจำลองหรืออุปกรณ์ได้ จะแก้ไขปัญหานี้ได้อย่างไร?
Arpit Rastogi

เป็นคำถามที่ดี! มีประโยชน์มากขอบคุณ
Androider

คำตอบ:


169

คำตอบใหม่ที่ถูกต้อง:

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:

ลองขึ้นบัญชีดำบัตเตอร์ไนฟ์จากเครื่องฟอกอากาศ:

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 เพราะฉันทดสอบแล้วไม่ได้ผล คุณเพิ่ม classpath 'com.jakewharton: butterknife-gradle-plugin: 9.0.0-rc2' เท่านั้นจากนั้นจะทำงานเมื่อดีบักและส่งออกไฟล์ apk โดยไม่มีปัญหา
kimcy929

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่issueetracker.google.com/issues/119135578#comment5
Jude Fernandes

1
คำตอบนี้ถูกต้อง แต่โปรดดูที่: stackoverflow.com/a/54345816/371749อัปเดตบัตเตอร์ไนฟ์เป็น 10 ก็ช่วยแก้ปัญหานี้ได้ดีขึ้น
cV2

1
โซลูชันนี้ใช้งานได้ดีสำหรับรุ่น debug แต่ฉันไม่สามารถสร้าง APK รุ่นที่ลงนามได้ อาร์ติแฟกต์ที่ระบุมีสตริงลิเทอรัลที่มีการอ้างอิงแพ็กเกจ 'android.support.v4.widget' ซึ่งไม่สามารถเขียนซ้ำได้อย่างปลอดภัย ไลบรารีที่ใช้การสะท้อนเช่นตัวประมวลผลคำอธิบายประกอบต้องได้รับการอัปเดตด้วยตนเองเพื่อเพิ่มการสนับสนุนสำหรับ androidx
Arpit Rastogi

มีประโยชน์มากขอบคุณ
Androider

61

เพิ่มการพึ่งพา 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'
}

29

สำหรับ 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 (แอป) ของคุณ:

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

คำตอบที่ดีที่สุดหลังจาก upgeade ฉันได้ค้นหาวิธีแก้ปัญหานี้ -> ข้อผิดพลาด: วิธีการเชื่อมต่อแบบคงที่รองรับเฉพาะที่เริ่มต้นด้วย Android N (--min-api 24): void butterknife.Unbinder.lambda $ static $ 0 ()
avisper

รักคุณผู้ชายที่คุณทำมัน ... ฉันเสียเวลาครึ่งวันในการค้นหาคำตอบนี้
Zeeshan Mehdi

4

โปรเจ็กต์ของฉันไม่ได้ใช้บัตเตอร์ไนฟ์ แต่ฉันมีข้อผิดพลาดเดียวกัน "สิ่งประดิษฐ์ที่ระบุมีสตริงลิเทอรัลที่มีการอ้างอิงแพ็คเกจ" android.support.v4.widget "ซึ่งไม่สามารถเขียนซ้ำได้อย่างปลอดภัยไลบรารีที่ใช้การสะท้อนเช่นตัวประมวลผลคำอธิบายประกอบจำเป็นต้อง ได้รับการอัปเดตด้วยตนเองเพื่อเพิ่มการสนับสนุนสำหรับ androidx "นี่คือสิ่งที่ฉันทำเพื่อแก้ปัญหานี้: อัปเดตเวอร์ชัน parceler ของคุณ

ไฟล์สร้าง 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: มีปัญหาปิดอยู่บน butterknife ของrepo GitHub วิธีแก้ปัญหาชั่วคราว

เพิ่ม android.jetifier.blacklist = butterknife-compiler ในไฟล์ gradle.properties ของคุณ


ฉันใช้ 9.0.0-rc2 และได้รับข้อผิดพลาดเดียวกัน
Jorge Gil


0

เปลี่ยน

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

ถึง

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

หรือธีมวัสดุอื่น ๆ พบข้อผิดพลาดนี้หลังจากเริ่มโครงการใหม่ด้วย "ไม่มีกิจกรรม" ใน Android Studio 4.0.1


0

อัปเดตบัตเตอร์ไนฟ์ + แคชไม่ถูกต้องและรีสตาร์ท + ซิงค์ gradle ถ้า buterknife ไม่ได้ใช้เพียงแค่ล้างแคชและรีสตาร์ท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.