AndroidX คืออะไร


256

ฉันกำลังอ่านเกี่ยวกับห้องสมุดห้องของ Android ผมเห็นพวกเขาเปลี่ยนแพคเกจการandroid androidxฉันไม่เข้าใจว่า มีคนอธิบายได้ไหม

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

แม้จะมีให้ใช้งานในandroidแพ็คเกจด้วย

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • สิ่งที่ต้องการบรรจุไลบรารีการสนับสนุนใหม่ในandroidxแทนที่จะเป็นandroid?
  • ใช้ตัวพิมพ์และปัจจัยที่มีผลต่อโครงการที่มีอยู่

4
อ่านdeveloper.android.com/topic/lไลบรารี/support- library/ …. androidx.*เป็นลำดับชั้นของแพคเกจสำหรับไลบรารีการสนับสนุน พวกเขาทั้งหมดจะมาในชุดเดียวกับที่เราเข้าสู่ยุคของandroidx(เช่นส่วนประกอบสถาปัตยกรรม, ห้องสมุดสนับสนุนอื่น ๆ )
ADM

3
คุณไม่เข้าใจอะไรอย่างแน่ชัด ทำไมพวกเขาถึงเปลี่ยนแพ็คเกจ?
Rohit5k2

@ADM ว่าทำไมพวกเขาเปลี่ยนไปandroidxแพคเกจจาก androidCORE
Khemraj

2
พวกเขาเพิ่งออกแบบโครงสร้างแพ็กเกจใหม่เพื่อความเรียบง่าย นี่ก็ประกาศใน IO 2018 ถ้าคุณต้องการดู ขอบคุณ
ADM

คำตอบ:


335

AndroidX - ไลบรารีส่วนขยายของ Android

จากเอกสาร AndroidX

เรากำลังเปิดตัวโครงสร้างแพ็คเกจใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่าแพ็คเกจใดที่มาพร้อมกับระบบปฏิบัติการ Android และบรรจุด้วย APK ของแอปของคุณ ก้าวไปข้างหน้าลำดับชั้นของแพคเกจ android. * จะถูกจองไว้สำหรับแพ็คเกจ Android ที่มาพร้อมกับระบบปฏิบัติการ แพ็กเกจอื่นจะออกในลำดับชั้นของ androidx. * ใหม่เป็นส่วนหนึ่งของไลบรารี AndroidX

ต้องการ AndroidX

AndroidX เป็นห้องสมุดที่ออกแบบใหม่เพื่อทำให้ชื่อแพ็คเกจชัดเจนยิ่งขึ้น ดังนั้นจากนี้ไปในลำดับชั้นของAndroidจะเป็นเพียงชั้นเรียนเริ่มต้นของ Android ซึ่งมาพร้อมกับระบบปฏิบัติการ Android และห้องสมุด / การอ้างอิงอื่น ๆ จะเป็นส่วนหนึ่งของandroidx (เหมาะสมกว่า) ดังนั้นจากนี้ไปการพัฒนาใหม่ทั้งหมดจะถูกอัปเดตใน androidx

com.android.support. **: androidx
com.android.support:appcompat-v7: androidx.appcompat: appcompat com.android.support:recyclerview-v7: androidx.recyclerview: recyclerview com.android.support:design: com.google.android.material: วัสดุ

ทำการแม็พ Artifact สำหรับแพ็กเกจ AndroidX

AndroidX ใช้Semantic-version

ก่อนหน้านี้support libraryใช้ SDK รุ่น แต่ AndroidX Semantic-versionใช้ มันจะเป็นเวอร์ชั่นใหม่ตั้งแต่ 28.0.0 → 1.0.0

วิธีโยกย้ายโครงการปัจจุบัน

ใน Android Studio 3.2 (กันยายน 2018) มีตัวเลือกโดยตรงในการโยกย้ายโครงการที่มีอยู่ไปAndroidXเป็น refactor นี้หรือบรรจุภัณฑ์ทั้งหมดโดยอัตโนมัติ

ก่อนที่คุณจะโยกย้ายขอแนะนำอย่างยิ่งให้สำรองข้อมูลโครงการของคุณ

โครงการที่มีอยู่

  • Android Studio> เมนู Refactor> ย้ายไปที่ AndroidX ...
  • มันจะวิเคราะห์และจะเปิดหน้าต่าง Refractor ที่ด้านล่าง ยอมรับการเปลี่ยนแปลงที่จะต้องทำ

ภาพ

โครงการใหม่

ใส่ธงเหล่านี้ในของคุณ gradle.properties

android.enableJetifier=true
android.useAndroidX=true

ตรวจสอบ @ แมปห้องสมุดสำหรับแพคเกจ AndroidX เท่ากับ

ตรวจสอบ @ หน้าอย่างเป็นทางการของการโยกย้ายเป็น AndroidX

Jetifier คืออะไร

ข้อบกพร่องของการโยกย้าย

  • หากคุณสร้างแอพและค้นหาข้อผิดพลาดหลังจากย้ายข้อมูลคุณต้องแก้ไขข้อผิดพลาดเล็กน้อยเหล่านั้น คุณจะไม่ติดอยู่ที่นั่นเพราะสามารถแก้ไขได้ง่าย
  • ห้องสมุดของบุคคลที่ 3 ยังไม่ได้แปลงเป็น AndroidX ในไดเรกทอรี แต่พวกเขาได้รับการแปลงในเวลาทำงานโดยJetifierจึงไม่ต้องกังวลเกี่ยวกับข้อผิดพลาดที่รวบรวมเวลา app ของคุณจะทำงานอย่างสมบูรณ์

สนับสนุน 28.0.0 เป็นรุ่นล่าสุดหรือไม่

จากAndroid Support Revision 28.0.0

นี่จะเป็นการเปิดตัวคุณลักษณะล่าสุดภายใต้บรรจุภัณฑ์ android.supportและผู้พัฒนาได้รับการสนับสนุนให้โยกย้ายไปยัง AndroidX 1.0.0

ดังนั้นไปกับ AndroidX เพราะ Android จะอัปเดตเฉพาะ androidx แพ็คเกจจากนี้

อ่านเพิ่มเติม

https://developer.android.com/topic/libraries/support-library/androidx-overview

https://android-developers.googleblog.com/2018/05/hello-world-androidx.html


2
@androidmalin ดีใจที่ได้ยินจากคุณ - ข้อมูลนี้ช่วยให้คุณ :)
Khemraj

ภายใต้สถานการณ์ใดที่คุณสามารถ / ควรตั้งให้ enableJetifier เป็นเท็จ?
ทำเครื่องหมาย

1
@ Mark enableJetifier=falseเป็นค่าเริ่มต้น มันผิดเมื่อคุณไม่ได้ตั้งค่า นั่นหมายความว่าจะไม่มีการเขียนไลบรารีใด ๆ ของคุณไปยัง AndroidX อีก
Khemraj

4
การย้ายข้อมูลของ android studio นั้นทำงานได้ไม่ดี ฉันต้องแก้ไขไฟล์หลายร้อยไฟล์ด้วยตนเอง ... ฉันใช้เวลามากขึ้นในการแก้ไขโค้ดเนื่องจากเครื่องมือของ Google เปลี่ยนแปลงไปกว่าการเขียนโปรแกรมรหัสที่มีความสำคัญ ... ถอนหายใจ
LearningPath

1
ตอนนี้เรียกว่า (3.3)Migrate to AndroidX
Dale

32

ตามเอกสาร :

androidx เป็นโครงสร้างแพ็คเกจใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่าแพ็คเกจใดที่มาพร้อมกับระบบปฏิบัติการ Android และบรรจุด้วย APK ในแอปของคุณ ก้าวไปข้างหน้าลำดับขั้นของแพคเกจ Android จะถูกสงวนไว้สำหรับแพ็คเกจ Android ที่มาพร้อมกับระบบปฏิบัติการ แพ็กเกจอื่นจะออกใน androidx. * ลำดับชั้นแพ็กเกจใหม่

โครงสร้างแพคเกจที่ออกแบบใหม่คือการสนับสนุนให้ห้องสมุดมีขนาดเล็กลง คุณจะพบรายละเอียดเกี่ยวกับการแมปสิ่งประดิษฐ์ที่นี่

มีไลบรารีการสนับสนุน (ที่มีส่วนประกอบและแพ็คเกจสำหรับความเข้ากันได้แบบย้อนหลัง) ชื่อ "v7" เมื่อระดับ SDK ขั้นต่ำที่สนับสนุนคือ 14 การตั้งชื่อใหม่ทำให้ชัดเจนในการทำความเข้าใจการแบ่งระหว่าง APIs ที่มาพร้อมกับแพลตฟอร์มและห้องสมุดสำหรับนักพัฒนาแอป บน Android รุ่นต่าง ๆ คุณสามารถอ้างถึงประกาศอย่างเป็นทางการสำหรับรายละเอียดเพิ่มเติม


22

AndroidXเป็นโครงการโอเพนซอร์ซที่ทีม Android ใช้ในการพัฒนาทดสอบแพคเกจเวอร์ชั่นและไลบรารี่ภายใน Jetpack

AndroidXเป็นการปรับปรุงครั้งสำคัญสำหรับห้องสมุดสนับสนุน Androidดั้งเดิมห้องสมุดสนับสนุนเช่นเดียวกับห้องสมุดสนับสนุน AndroidX จัดส่งแยกต่างหากจากระบบปฏิบัติการ Android และให้ความเข้ากันได้แบบย้อนหลังในรุ่น Android AndroidX จะแทนที่ Library สนับสนุนทั้งหมดโดยจัดเตรียมฟีเจอร์ parity และไลบรารีใหม่

AndroidX มีคุณสมบัติดังต่อไปนี้:

  • แพ็กเกจทั้งหมดใน AndroidX มีชีวิตอยู่ในเนมสเปซที่สอดคล้องเริ่มต้นด้วยสตริง androidx แพคเกจ Support Library ได้รับการแมปเข้ากับแพ็คเกจ androidx. * ที่สอดคล้องกันแล้ว สำหรับการแม็พแบบเต็มของคลาสเก่าทั้งหมดและสร้างสิ่งประดิษฐ์ไปยังคลาสใหม่ให้ดูที่เพจการสร้างการแพ็กเกจใหม่

  • ซึ่งแตกต่างจาก Support Library แพ็คเกจ AndroidX ได้รับการดูแลและอัปเดตแยก แพ็คเกจ androidx ใช้งานอย่างเข้มงวดSemantic Versioningเริ่มต้นกับเวอร์ชัน 1.0.0 คุณสามารถอัปเดตห้องสมุด AndroidX ในโครงการของคุณได้อย่างอิสระ

  • Support Library ใหม่ทั้งหมดจะเกิดขึ้นในไลบรารี AndroidX ซึ่งรวมถึงการบำรุงรักษาสิ่งประดิษฐ์ Library Support ดั้งเดิมและการแนะนำส่วนประกอบ Jetpack ใหม่

ใช้ AndroidX

ดูการย้ายไปยัง AndroidXเพื่อเรียนรู้วิธีโอนย้ายโครงการที่มีอยู่

หากคุณต้องการใช้ AndroidX ในโครงการใหม่คุณต้องตั้งค่า SDK คอมไพล์เป็น Android 9.0 (API ระดับ 28) หรือสูงกว่าและตั้งค่าแฟล็กปลั๊กอิน Android Gradle ทั้งสองต่อไปนี้ให้เป็นจริงในgradle.propertiesไฟล์ของคุณ

  • android.useAndroidX: เมื่อตั้งค่าเป็นจริงปลั๊กอิน Android จะใช้ไลบรารี AndroidX ที่เหมาะสมแทนไลบรารีการสนับสนุน การตั้งค่าสถานะเป็นเท็จโดยค่าเริ่มต้นหากไม่ได้ระบุไว้

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

สำหรับการแม็พสิ่งประดิษฐ์ดูสิ่งนี้


14

บทความนี้Android Jetpack: ประกาศล่าสุดมีความหมายอย่างไรกับห้องสมุดสนับสนุนของ Android อธิบายได้ดี

วันนี้หลายคนคิดว่า Library Support เป็นส่วนสำคัญของการพัฒนาแอพ Android จนถึงจุดที่แอพนี้ใช้งาน 99 เปอร์เซ็นต์ใน Google Play store อย่างไรก็ตามในขณะที่ Support Library ได้เติบโตขึ้นความไม่สอดคล้องกันจึงเพิ่มขึ้นในการตั้งชื่อห้องสมุด

เริ่มแรกชื่อของแต่ละแพ็คเกจระบุระดับ API ขั้นต่ำที่สนับสนุนโดยแพ็คเกจนั้นเช่น support-v4 อย่างไรก็ตามเวอร์ชัน26.0.0ของ Support Library เพิ่ม API ขั้นต่ำเป็น 14 ดังนั้นวันนี้ชื่อแพคเกจจำนวนมากไม่เกี่ยวข้องกับระดับ API ขั้นต่ำที่รองรับ เมื่อsupport-v4และแพคเกจ support-v7 ทั้งคู่มี API ขั้นต่ำที่ 14 เป็นเรื่องง่ายที่จะดูว่าทำไมคนถึงสับสน!

เพื่อกำจัดความสับสนในปัจจุบัน Google ได้ทำการปรับโครงสร้าง Library สนับสนุนลงในไลบรารีส่วนขยาย Androidใหม่โครงสร้างแพ็คเกจ (AndroidX) ใหม่ AndroidX จะแสดงชื่อแพ็คเกจที่เรียบง่ายเช่นเดียวกับ Maven groupIds และ artifactIds ที่สะท้อนถึงเนื้อหาของแต่ละแพ็คเกจและระดับ API ที่รองรับได้ดีขึ้น

ด้วยรูปแบบการตั้งชื่อปัจจุบันยังไม่ชัดเจนว่ามีแพ็คเกจใดบ้างที่มาพร้อมกับระบบปฏิบัติการ Android และแพ็คเกจใดที่มีชุด APK (Android Package Kit)ของแอปพลิเคชันของคุณ เพื่อขจัดความสับสนนี้ทั้งหมดห้องสมุด unbundled จะถูกย้ายไป androidx AndroidX ของ. * namespace ในขณะที่หุ่นยนต์. * แพคเกจลำดับชั้นจะถูกสงวนไว้สำหรับแพคเกจที่เรือกับระบบปฏิบัติการ Android


12

เพียงแค่เพิ่มบิตจากด้านข้างของฉันไปยังคำตอบที่มีทั้งหมด

ต้องการ AndroidX

  1. ดังที่กล่าวไว้ในคำตอบที่น่าอัศจรรย์โดย @KhemRaj

ด้วยรูปแบบการตั้งชื่อปัจจุบันยังไม่ชัดเจนว่ามีแพ็คเกจใดบ้างที่มาพร้อมกับระบบปฏิบัติการ Androidและแพ็คเกจใดที่มาพร้อมกับAPK ( Android Package Kit ) ของแอปพลิเคชันของคุณ เพื่อขจัดความสับสนนี้ทั้งหมดห้องสมุด unbundled จะถูกย้ายไปAndroidX ‘s androidx. * namespace ในขณะที่หุ่นยนต์. * แพคเกจลำดับชั้นจะถูกสงวนไว้สำหรับแพคเกจที่มาพร้อมกับระบบปฏิบัติการ Android

  1. นอกเหนือจากนี้

    ในขั้นต้นชื่อของแต่ละแพคเกจที่ระบุไว้ในระดับต่ำสุด API สนับสนุนโดยแพคเกจที่ยกตัวอย่างเช่นการสนับสนุน v4 อย่างไรก็ตามเวอร์ชัน26.0.0ของ Support Library เพิ่มAPI ขั้นต่ำเป็น 14ดังนั้นวันนี้ชื่อแพคเกจจำนวนมากไม่เกี่ยวข้องกับระดับ API ขั้นต่ำที่รองรับ เมื่อ support-v4 และแพคเกจsupport-v7ทั้งคู่มี API ขั้นต่ำที่ 14 เป็นเรื่องง่ายที่จะดูว่าทำไมคนถึงสับสน! ดังนั้นตอนนี้กับ AndroidX ไม่มีการพึ่งพาระดับ API

การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือสิ่งประดิษฐ์ AndroidX จะอัปเดตอย่างอิสระดังนั้นคุณจะสามารถอัปเดตห้องสมุด AndroidX แต่ละรายการในโครงการของคุณแทนที่จะต้องเปลี่ยนการอ้างอิงทั้งหมดในครั้งเดียว ข้อความ“ ไลบรารี com.android.support ทั้งหมดที่น่าผิดหวังเหล่านั้นจะต้องใช้ข้อมูลจำเพาะเวอร์ชั่นเดียวกันที่แน่นอน ” ควรกลายเป็นอดีตไปแล้ว!


7

ฉันได้รู้เกี่ยวกับ AndroidX จากวิดีโอAndroid Dev Summitนี้ สรุปคือ -

  1. ไม่มีไลบรารีการสนับสนุนเพิ่มเติม: Google จะไม่สนับสนุนไลบรารีการสนับสนุน android ภายใต้เนมสเปซไลบรารีการสนับสนุน ดังนั้นหากคุณต้องการค้นหาการแก้ไขข้อบกพร่องในไลบรารีการสนับสนุนคุณต้องย้ายข้อมูลโครงการของคุณใน AndroidX
  2. การจัดการแพคเกจที่ดีขึ้น:สำหรับเวอร์ชันที่เป็นมาตรฐานและเป็นอิสระเพราะการสร้างเวอร์ชันก่อนหน้าของไลบรารีการสนับสนุนทำให้เกิดความสับสน มันจะปล่อยความเจ็บปวดของข้อความ “ ไลบรารี com.android.support ทั้งหมดจะต้องใช้ข้อความข้อกำหนดรุ่นเดียวกันที่แน่นอน”
  3. ห้องสมุด God อื่น ๆ ได้ย้ายไปยัง AndroidX : บริการ Google play, Firebase, Mockito 2 และอื่น ๆ จะถูกย้ายไปยัง AndroidX
  4. ไลบรารีใหม่จะถูกเผยแพร่โดยใช้สิ่งประดิษฐ์ AndroidX: ไลบรารีทั้งหมดจะอยู่ในเนมสเปซ AndroidX เช่นAndroid Jetpack

4

มันเหมือนกับ AppCompat เวอร์ชั่นที่รองรับ แต่มีระเบียบน้อยกว่ารุ่น v4 และ v7 ดังนั้นมันจึงช่วยได้มากจากการใช้ส่วนประกอบต่าง ๆ ขององค์ประกอบ XML ของ Android


4

androidxจะเข้ามาแทนที่หลังจากsupport library 28.0.0คุณควรโยกย้ายโครงการของคุณเพื่อใช้ การใช้งานandroidx Semantic Versioningการใช้AndroidXจะไม่สับสนกับเวอร์ชั่นที่แสดงในชื่อไลบรารีและชื่อแพ็คเกจ ชีวิตจะง่ายขึ้น

[AndroidX และความเข้ากันได้สนับสนุน]


3

AndroidX เป็นโครงการโอเพนซอร์ซที่ทีม Android ใช้ในการพัฒนาทดสอบแพคเกจเวอร์ชั่นและรีลีสไลบรารีภายใน Jetpack

หลังจากชั่วโมงแห่งการดิ้นรนฉันแก้ไขมันด้วยการรวมแอพ / build.gradle ต่อไปนี้ไว้ภายใน:

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

ใส่ธงเหล่านี้ใน gradle.properties ของคุณ

android.enableJetifier=true
android.useAndroidX=true

Changes in gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

เมื่อโอนย้ายบนสตูดิโอ Android ไฟล์แอพ / gradle จะได้รับการอัพเดตโดยอัตโนมัติพร้อมกับไลบรารีการแก้ไขที่ใช้จากไลบรารีมาตรฐาน

อ้างถึง: https://developer.android.com/jetpack/androidx/migrate


0

Android มีชุดไลบรารีที่แตกต่างกันสองชุด หนึ่งเรียกว่าห้องสมุดสนับสนุน Android และอื่น ๆ เรียกว่า AndroidX การเลือก "Use android. * artifacts" เป็นการระบุว่าเราต้องการใช้ AndroidX

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