ฉันสามารถใช้ไลบรารีที่รองรับ Android กับโปรเจ็กต์ Androidx ได้ไหม


96

ฉันรู้ว่าandroidx และการพึ่งพาการสนับสนุนทำให้เกิดข้อผิดพลาด multidex เราไม่สามารถใช้การสนับสนุน androidx และ android ในเวลาเดียวกันได้ ดังนั้นฉันจึงย้ายไปที่ androidx ทั้งหมด แต่หนึ่งใน lib ที่พึ่งพาของฉันใช้การสนับสนุน android "lottie"

เราจะทำอะไรได้บ้างในสถานการณ์ข้างต้น? ฉันควรลบ 'ล็อตตี้' ออกจากโครงการของฉันหรือไม่

ด้านล่างนี้คือผู้กล้าของฉัน

defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    ext{
    lottieVersion = "2.5.4"
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    def androidx = "1.0.0-rc01"
    api "androidx.constraintlayout:constraintlayout:1.1.2"
    api "androidx.appcompat:appcompat:$androidx"
    api "androidx.recyclerview:recyclerview:$androidx"
    api "androidx.cardview:cardview:$androidx"
    api "androidx.core:core-ktx:$androidx"
    api "com.google.android.material:material:1.0.0-rc01"
    implementation "com.google.code.gson:gson:2.8.5"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.airbnb.android:lottie:$lottieVersion"
    }

คำตอบ:


133

คุณสามารถเปิดใช้งานJetifierในโปรเจ็กต์ของคุณซึ่งโดยพื้นฐานแล้วจะแลกเปลี่ยนการAndroid Support Libraryอ้างอิงในการอ้างอิงโปรเจ็กต์ของคุณกับAndroidX-ones (เช่นการพึ่งพา Lottie ของคุณจะเปลี่ยนจาก Support เป็น AnroidX)

จากเอกสารประกอบของ Android Studio ( https://developer.android.com/studio/preview/features/ ):

ปลั๊กอิน Android Gradle จัดเตรียมแฟล็กส่วนกลางต่อไปนี้ที่คุณสามารถตั้งค่าในไฟล์ gradle.properties ของคุณ:

  • android.useAndroidX: เมื่อตั้งค่าเป็น true แฟล็กนี้แสดงว่าคุณต้องการเริ่มใช้ AndroidX นับจากนี้เป็นต้นไป หากไม่มีการตั้งค่าสถานะ Android Studio จะทำงานเหมือนกับว่าตั้งค่าสถานะเป็นเท็จ
  • android.enableJetifier: เมื่อตั้งค่าเป็น true แฟล็กนี้บ่งชี้ว่าคุณต้องการรองรับเครื่องมือ (จากปลั๊กอิน Android Gradle) เพื่อแปลงไลบรารีของบุคคลที่สามที่มีอยู่โดยอัตโนมัติราวกับว่ามันถูกเขียนขึ้นสำหรับ AndroidX หากไม่มีการตั้งค่าสถานะ Android Studio จะทำงานเหมือนกับว่าตั้งค่าสถานะเป็นเท็จ

เงื่อนไขเบื้องต้นสำหรับ Jetifier:

  • คุณต้องใช้อย่างน้อย Android Studio 3.2

ในการเปิดใช้งาน jetifier ให้เพิ่มสองบรรทัดลงในgradle.propertiesไฟล์ของคุณ:

android.useAndroidX=true
android.enableJetifier=true

สุดท้ายโปรดตรวจสอบบันทึกประจำรุ่นของ AndroidX เนื่องจากjetifierยังมีปัญหากับบางไลบรารี (เช่น Dagger Android): https://developer.android.com/topic/libraries/support-library/androidx-rn


โครงการของฉันใช้หลายไลบรารีบางส่วนใช้ไลบรารีสนับสนุนในขณะที่บางส่วนใช้ androidx ฉันจะใช้ไลบรารีทั้งสองในโครงการของฉันได้อย่างไร
Hiren Dabhi

1
@hiren dabhi คุณสามารถสร้างคำถามใหม่สำหรับการตั้งค่าของคุณได้หรือไม่หากข้อเสนอการแก้ปัญหาไม่ได้ผลสำหรับคุณ? ค่อนข้างยากที่จะหาคำตอบโดยไม่ทราบรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าของคุณ
Christopher

57

เพิ่มandroid.useAndroidX=trueและandroid.enableJetifier=trueให้เวลากับฉันด้วยตนเอง เนื่องจากมีข้อผิดพลาดบางอย่างหรือ Suggestion: add 'tools:replace="android:appComponentFactory"' to <application>

ในการเปิดใช้งาน Jet-fire ในโครงการมีตัวเลือกใน android Studio

เลือกโครงการของคุณ ---> คลิกขวา

แอป ----> Refactor ----> โยกย้ายไปยัง AndroidX

แสดงในภาพด้านล่าง: -

ป้อนคำอธิบายภาพที่นี่

หลังจากคลิกที่โยกย้ายไป AndroidX

ระบบจะขอการยืนยันและสำรองข้อมูลสำหรับโครงการของคุณ

ป้อนคำอธิบายภาพที่นี่

และขั้นตอนสุดท้ายจะขอให้คุณทำ refactor

ป้อนคำอธิบายภาพที่นี่

หลังจากทำ Refactor ตรวจสอบ gradle.properties ของคุณมีและandroid.useAndroidX=true android.enableJetifier=trueหากไม่เป็นเช่นนั้นให้เพิ่มสองบรรทัดนี้ในไฟล์ gradle.properties ของคุณ:

android.useAndroidX=true
android.enableJetifier=true

หมายเหตุ: - การอัปเกรดโดยใช้ Android Studio ตัวเลือกนี้ใช้งานได้หากคุณมี android studio 3.2 ขึ้นไป ตรวจสอบสิ่งนี้


1
ข้อเสนอแนะที่ดี แต่เป็นเพียงข้อควรทราบสำหรับผู้ที่อัปเกรดโดยใช้ Android Studio ตัวเลือกนี้จะใช้งานได้หากคุณมี android studio 3.2 ขึ้นไป ตรวจสอบDeveloper.android.com/jetpack/androidx/migrate
AB

21

คุณไม่จำเป็นต้องกังวล

เพียงเปิดใช้งานJetifierใน projet ของคุณ

  • อัปเดต Android Studioเป็น 3.2.0 หรือใหม่กว่า
  • เปิดgradle.propertiesและเพิ่มด้านล่างสองบรรทัด

    android.enableJetifier=true
    android.useAndroidX=true
    

มันจะแปลงไลบรารีการสนับสนุนทั้งหมดของการพึ่งพาของคุณเป็น AndroidX ในขณะทำงาน (คุณอาจมีข้อผิดพลาดในการคอมไพล์ แต่แอปจะทำงาน)


3
ไม่พบ gradle.properties ในไฟล์ของฉันสร้างขึ้นเอง
FindOutIslamNow

ในความเป็นจริงการพึ่งพาสกรรมกริยา + แคช gradle อาจไม่ทำงานแม้ว่าandroid.enableJetifier=trueสิ่งนี้จะเกิดขึ้นฉันคิดว่าการใช้jetifier-standaloneกับ aar ของบุคคลที่สามด้วยตนเองอาจใช้งานได้
mochadwi

ฉันมี android studio 4.1 ฉันเปิดใช้งาน Jetifier แอปของฉันไม่ทำงาน
meekash55

@ meekash55 ข้อผิดพลาดคืออะไร?
เขมราช

@Khemraj แม้จะเพิ่ม Jetifier ลงใน gradle.properties มันก็เริ่มแสดงข้อผิดพลาดเวลาคอมไพล์ทุกที่ในโครงการซึ่งมีการใช้ไลบรารีสนับสนุน V4 ดังนั้นจึงมีตัวเลือกเดียวที่เหลือคือการแก้ไขและย้ายรหัสทั้งหมดไปยัง AndroidX ด้วยตนเอง ซึ่งไม่ใช่ตัวเลือกสำหรับฉัน
meekash55


1

API 29. + การใช้งานไลบรารี AndroidX หากคุณใช้ API 29. + คุณจะไม่สามารถลบสิ่งเหล่านี้ได้ หากคุณต้องการลบ AndroidX คุณต้องลบทั้ง 29. + API ออกจาก SDK ของคุณ:

การตั้งค่า SDK

วิธีนี้จะทำงานได้ดี



1

ฉันเพิ่มสองบรรทัดด้านล่างในไฟล์ gradle.properties

android.useAndroidX=true
android.enableJetifier=true

จากนั้นฉันได้รับข้อผิดพลาดต่อไปนี้

error: package android.support.v7.app does not exist
import android.support.v7.app.AlertDialog;
                         ^
                         

ฉันได้ลบการนำเข้าและเพิ่มบรรทัดด้านล่างแล้ว

import static android.app.AlertDialog.*;

และคลาสที่ขยายจาก AppCompactActivity เพิ่มบรรทัดด้านล่าง (สำหรับข้อผิดพลาดเหล่านี้คุณต้องกด alt + enter ใน android studio ซึ่งจะนำเข้าไลบรารีที่ถูกต้องสำหรับคุณเช่นนี้คุณสามารถแก้ไขข้อผิดพลาดทั้งหมดได้)

import androidx.appcompat.app.AppCompatActivity;

ในไฟล์ xml ของคุณหากคุณใช้ไฟล์

<android.support.v7.widget.Toolbar 

แทนที่ด้วย androidx.appcompat.widget.Toolbar

จากนั้นในรหัส java ของคุณ

import androidx.appcompat.widget.Toolbar;

1
แต่คุณมีโปรเจ็กต์ขนาดใหญ่เราไม่สามารถเปลี่ยน Fragments และกิจกรรมทั้งหมดสำหรับการเปลี่ยนแปลง androidX เพียงครั้งเดียว
meekash55

0

หากโครงการของคุณไม่ใช่ AndroidX (หมายถึง Appcompat) และได้รับข้อผิดพลาดนี้ให้ลองดาวน์เกรดเวอร์ชันอ้างอิงที่ทำให้เกิดข้อผิดพลาดนี้ในกรณีของฉัน play-services-location ("การใช้งาน" com.google.android.gms: play-services-location : 17.0.0 '") ฉันแก้ไขปัญหาโดยการดาวน์เกรดเป็น com.google.android.gms: play-services-location: 16.0.0'


0

ฉันมีปัญหาเช่นนี้มาก่อนมันเป็นไฟล์ gradle.properties ไม่มีอยู่มีเพียง gradle.properties.txt ดังนั้นฉันจึงไปที่โฟลเดอร์โครงการของฉันและฉันคัดลอกและวางไฟล์ gradle.properties.txt แต่ไม่มี. txt แล้วมันก็ใช้งานได้ในที่สุด


-1

แสดงความคิดเห็นในบรรทัดนี้ gradle.properties

android.useAndroidX = true


OP กำลังถามว่าเป็นไปได้ไหมที่จะใช้ AndroidX กับ Android Support คุณแนะนำให้ปิดการใช้งาน AndroidX
Raildex

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