Jetifier คืออะไร?


101

Jetifier คืออะไร? ตัวอย่างเช่นในการสร้างโปรเจ็กต์ใหม่โดยใช้ androidx-packaged dependencies โปรเจ็กต์ใหม่นี้จำเป็นต้องเพิ่มบรรทัดต่อไปนี้ในไฟล์gradle.properties :

android.enableJetifier=true

- "เปิดใช้งาน jetifier" หมายความว่าอย่างไร


30
IIRC, Jetifier เป็นเทคโนโลยี Googly ที่ไม่มีเอกสารซึ่งควรจะแปลงการอ้างอิงสกรรมกริยาโดยอัตโนมัติเพื่อใช้ไลบรารี AndroidX ตัวอย่างเช่นสมมติว่าคุณมีimplementation "com.commonsware.cwac:document:0.3.0"ในdependenciesไฟล์. com.android.support:support-annotations:27.0.2รุ่นห้องสมุดที่มีการพึ่งพาสกรรมกริยาบน อย่างไรก็ตามคุณต้องการใช้androidx.annotation:annotationเป็นส่วนหนึ่งของการใช้การอ้างอิง AndroidX อื่น ๆ Jetifier อย่างใดจะอัปเดตที่จะใช้com.commonsware.cwac:document androidx.annotation:annotation
CommonsWare

คำตอบ:


74

Google I / O (18) ปีนี้ Google ได้ประกาศ Jetpack ซึ่งตั้ง / รวบรวมไลบรารีเพื่อให้ชีวิตของนักพัฒนาง่ายขึ้น

Jetpack มีส่วนประกอบสถาปัตยกรรม Android ที่แนะนำก่อนหน้านี้ (ViewModel, Room, Paging, LiveData เป็นต้น) รวมถึงส่วนประกอบสถาปัตยกรรมที่เพิ่งเปิดตัวเช่น WorkManager, Navigation นอกเหนือจาก Jetpack นี้ยังมีไลบรารีชุดอื่น ๆ เช่น AndroidX, AndroidKTX เป็นต้น

AndroidX เป็นโครงสร้างแพ็คเกจใหม่สำหรับไลบรารีที่รองรับ Android เช่นการสนับสนุนการเชื่อมโยงฐานข้อมูลการออกแบบ ฯลฯ

เช่นตอนนี้นักพัฒนาวอร์ดจะใช้androidx.databinding แทนandroid.databinding ในขณะที่นำเข้าไลบรารีในโครงการของเรา

สิ่งนี้ทำให้ Google สามารถเพิ่มSemVerหรือSemantic Versioningในแพ็คเกจไลบรารีได้ สำหรับนักพัฒนาหมายความว่าเราไม่จำเป็นต้องใช้ไลบรารีการสนับสนุนเวอร์ชันเดียวกันสำหรับไลบรารีการสนับสนุนทั้งหมด ทุกการสนับสนุนหรือดีกว่าที่จะพูดว่าไลบรารี AndroidX จะคงเวอร์ชันของตัวเองไว้

ข้อดีอีกอย่างสำหรับนักพัฒนาคือเราไม่ต้องดูแลเวอร์ชันเดียวกันสำหรับไลบรารีสนับสนุนทั้งหมดในโครงการของเรา

เกี่ยวกับ Jetifier จะแปลงแพ็คเกจการสนับสนุนทั้งหมดของการพึ่งพาในเวลาสร้าง ตามเอกสารอย่างเป็นทางการของ Jetifier

เครื่องมือ Jetifier จะย้ายไลบรารีที่ขึ้นกับไลบรารีที่รองรับให้ใช้แพ็คเกจ AndroidX ที่เทียบเท่าแทน เครื่องมือนี้ช่วยให้คุณย้ายไลบรารีแต่ละรายการได้โดยตรงแทนที่จะใช้ปลั๊กอิน Android gradle ที่มาพร้อมกับ Android Studio

ในการใช้ AndroidX ในโปรเจ็กต์เราต้องตั้ง targetSdkVersion สำหรับโปรเจ็กต์ของเราเป็น28และเพิ่ม 2 บรรทัดต่อไปนี้ในไฟล์gradle.properties

android.useAndroidX=true

android.enableJetifier=true

ฉันหวังว่านี่จะตอบคำถามของคุณ

แก้ไข

ลิงก์นี้มีการแมปองค์ประกอบไลบรารีสนับสนุนทั้งหมดกับส่วนเคาน์เตอร์ AndroidX

โปรดดูบล็อกนี้สำหรับคำอธิบายโดยละเอียดเกี่ยวกับ AndroidX


35
คุณไม่ได้ตอบคำถาม "Jetifier คืออะไร" เพียงแค่เกี่ยวกับ AndroidX และ Jetpack
David Miguel

2
@DavidMiguel ฉันได้ให้คำตอบสำหรับคำถามหลักที่ถามว่า - "เปิดใช้งาน jetifier" คืออะไร? แม้ว่าคุณคิดว่าคำตอบของฉันเป็นเพียงบางส่วน แต่ฉันจะอัปเดตคำตอบตามนั้น
silwar

79

สมมติว่าคุณคุ้นเคยกับAndroidX. ถ้าไม่โปรดดู @ โพสต์นี้

Jetifierจะแปลงการsupport librariesอ้างอิงทั้งหมดของคุณเป็นAndroidXโดยอัตโนมัติหากคุณไม่ได้ตั้งค่าเป็นtrueโครงการของคุณจะมีทั้งการสนับสนุน ( เลิกใช้งานหลังจากเวอร์ชัน 28.0.0 ) และแพ็คเกจAndroidXซึ่งซ้ำซ้อน

ตัวอย่างเช่น

หากคุณมีการPhotoView.javaพึ่งพาของคุณ AppCompatImageViewที่ห้องสมุดสนับสนุนการใช้งาน

import android.support.v7.widget.AppCompatImageView;

ตอนนี้คลาสนี้ถูกย้ายไปที่androidxแพ็กเกจแล้วดังนั้นจะPhotoViewรับ androidx ได้AppCompatImageViewอย่างไร? และแอปยังคงทำงานในอุปกรณ์

ใครเป็นคนวิ่งนี้

Jetifierซึ่งแปลงแพ็คเกจการสนับสนุนทั้งหมดของการพึ่งพาในเวลาสร้าง

Jetifier จะแปลงandroid.support.v7.widget.AppCompatImageViewเป็นandroidx.appcompat.widget.AppCompatImageViewในขณะที่สร้างโครงการ

สรุป

การเปิดใช้งาน Jetifier เป็นสิ่งสำคัญเมื่อคุณย้ายจากห้องสมุดสนับสนุนการ AndroidX

ดูโพสต์นี้เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับ AndroidX

ข้อมูล

รหัสของคุณอาจแสดงข้อผิดพลาดเวลาคอมไพล์หลังจากเปิดใช้งาน Jetifier ในขณะที่ใช้คลาสการอ้างอิง ซึ่งคุณสามารถลบโดยการลบ.idea, .gradleและซิงค์ซ้ำแบบโครงการ

ภาพ 2

ภาพ 1


10
คุณสามารถกำจัดข้อผิดพลาดเวลาคอมไพล์ได้โดยการลบ .idea / libraries และซิงค์ Gradle อีกครั้ง
Clo Knibbe

1
ฉันคิดว่า Jetifier ทำงานในเวลาสร้างไม่ใช่รันไทม์ตามที่กล่าวไว้ที่นี่ คุณสามารถใช้ android.enableJetifier = true บน gradle หรือใช้ผู้พัฒนาเครื่องมือ jetifier แบบสแตนด์อโลนandroid.com/studio/command-line/jetifier เพื่อย้ายข้อมูลไปยัง androidx ตัวเลือกทั้งสองนี้จะแทนที่ชื่อแพ็กเกจในขณะสร้างดังนั้นไลบรารีการสนับสนุนแบบเก่าจึงไม่ได้เป็นส่วนหนึ่งของแพ็กเกจด้วยซ้ำ
Nishanth

7

Jetifierช่วยในการย้ายโครงการหุ่นยนต์ที่จะAndroidX

Jetifierช่วยในการสร้างไลบรารีของบุคคลที่สามเข้ากันได้กับโครงการ AndroidX ของคุณ

หากคุณไม่ได้ใช้ไลบรารีของบุคคลที่สามในโปรเจ็กต์ Android ของคุณคุณก็ไม่จำเป็นต้องใช้ Jetifier เนื่องจาก Jetifier ช่วยเฉพาะในการ "สร้างไลบรารีของบุคคลที่สาม" ให้เข้ากันได้กับโปรเจ็กต์ของคุณในกรณีที่คุณกำลังย้ายไปใช้ AndroidX ดังนั้นเพื่อให้การใช้โครงการของคุณ Jetifier คุณเขียนด้านล่างรหัสในgradle.properties

android.enableJetifier=true
android.useAndroidX=true

หากคุณไม่ได้ย้ายไปใช้ AndroidX และใช้วิธีก่อนหน้านี้ในการใช้ไลบรารี Android (เช่นcom.android.support ) ไลบรารีของบุคคลที่สามเหล่านี้ไม่จำเป็นต้องเข้ากันได้เนื่องจากไลบรารีของบุคคลที่สามเหล่านี้เข้ากันได้กับวิธีก่อนหน้าของ ใช้ไลบรารี Android ในกรณีนี้คุณไม่จำเป็นต้องใช้ Jetifier ดังนั้นตอนนี้คุณไม่จำเป็นต้องเขียนบรรทัดที่ระบุไว้ด้านบนหรือคุณสามารถเขียนด้านล่างเพื่อเปลี่ยนค่าในอนาคตเพื่อย้ายไปที่ androidx: -

android.enableJetifier=false
android.useAndroidX=false

4

Jetifier

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

มีข้อ จำกัด ที่สำคัญที่ควรทราบ: Jetifier ใช้งานได้กับสิ่งประดิษฐ์ที่บรรจุหีบห่อเท่านั้น มันใช้ไม่ได้กับซอร์สโค้ดของคุณซึ่งคุณคาดว่าจะต้องอัปเดตด้วยตัวเอง

สำหรับการเปิดใช้งาน AndroidX คุณต้องเพิ่ม 2 แฟล็กในgradle.propertiesไฟล์ของคุณ แฟล็กแรกบอกให้ Android Plugin ใช้AndroidXแพ็คเกจแทนAppCompatและแฟล็กที่สองจะเปิดใช้งานJetifier:

android.useAndroidX=true
android.enableJetifier=true

ดูนี้ , นี้โพสต์เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับ AndroidX


3

จากเอกสารอย่างเป็นทางการ

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

มีประโยชน์สำหรับความเข้ากันได้ เมื่อมีการใช้งานของผู้บริโภคและการใช้ผลิตandroidX supportตัวอย่างเช่นเมื่อโครงการของคุณAndroidXต้องการใช้การอ้างอิงซึ่งใช้support libraryแทนAndroidX[ตัวอย่าง]


0

เพิ่มสองบรรทัดนี้ android.useAndroidX = true

android.enableJetifier = true

ใน buid.gradle มันใช้ได้ผลสำหรับฉัน

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