@ คุณปาเวลดุดคะ
แจ็ค - เป็นคอมไพเลอร์ คล้ายกับ javac แต่มันแตกต่างกันเล็กน้อย:
อย่างที่คุณเห็น Jack รวบรวมซอร์สโค้ด Java ลงในไฟล์ Dex โดยตรง! เราไม่มีไฟล์ระดับกลาง * .class อีกต่อไปดังนั้นจึงไม่จำเป็นต้องใช้เครื่องมือ dx!
แต่เดี๋ยวก่อน! จะเกิดอะไรขึ้นถ้าฉันรวมไลบรารีของบุคคลที่สามไว้ในโปรเจ็กต์ของฉัน (ซึ่งมาเป็นชุดของไฟล์. class)
และนั่นคือตอนที่จิลเข้ามาเล่น:
Jill สามารถประมวลผลไฟล์คลาสและแปลงเป็นรูปแบบ Jayce พิเศษซึ่งสามารถใช้เป็นอินพุตสำหรับคอมไพเลอร์ Jack
ตอนนี้เรามาดูกันสักวินาทีแล้วคิดว่า ... จะเกิดอะไรขึ้นกับปลั๊กอินเจ๋ง ๆ ทั้งหมดที่เราติดมาก? พวกเขาล้วนต้องการไฟล์. class และคอมไพเลอร์ Jack ก็ไม่มีอีกต่อไป ...
โชคดีที่แจ็คนำเสนอคุณสมบัติที่สำคัญสำหรับเราไว้ให้นอกกรอบ:
- Retrolambda - ไม่จำเป็น แจ็คสามารถจัดการกับ lambdas ได้อย่างเหมาะสม
- Proguard - มันถูกอบในแจ็คแล้วดังนั้นคุณยังสามารถใช้การทำให้ยุ่งเหยิงและการย่อขนาดได้
ข้อดี:
Jack รองรับภาษาการเขียนโปรแกรม Java 1.7 และรวมคุณสมบัติเพิ่มเติมที่อธิบายไว้ด้านล่าง
การคาดการณ์ล่วงหน้า
เมื่อสร้างไฟล์ไลบรารี JACK .dex ของไลบรารีจะถูกสร้างและเก็บไว้ในไฟล์ไลบรารี. jack เป็น pre-dex เมื่อทำการคอมไพล์ JACK จะนำ pre-dex จากแต่ละไลบรารีกลับมาใช้ใหม่ ไลบรารีทั้งหมดถูกเตรียมไว้ล่วงหน้า
การรวบรวมส่วนเพิ่ม
การคอมไพล์แบบเพิ่มหน่วยหมายถึงคอมโพเนนต์ที่ถูกแตะตั้งแต่การคอมไพล์ครั้งล่าสุดและการอ้างอิงเท่านั้นที่คอมไพล์ใหม่ การคอมไพล์ที่เพิ่มขึ้นสามารถทำได้เร็วกว่าการคอมไพล์แบบเต็มอย่างมากเมื่อการเปลี่ยนแปลงถูก จำกัด ไว้เพียงชุดคอมโพเนนต์ที่ จำกัด เท่านั้น
การบรรจุใหม่
JACK ใช้ไฟล์คอนฟิกูเรชัน jarjar เพื่อทำการรีแพ็กเกจ
การสนับสนุน Multidex
เนื่องจากไฟล์ dex ถูก จำกัด ไว้ที่ 65K เมธอดแอพที่มีเมธอดมากกว่า 65K จึงต้องแบ่งออกเป็นไฟล์ dex หลาย ๆ ไฟล์ (ดู 'การสร้างแอพที่มีวิธีการมากกว่า 65K' สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ multidex)
ข้อเสีย:
- Jack ไม่รองรับ Transform API - ไม่มี bytecode Java ระดับกลางที่คุณสามารถแก้ไขได้ดังนั้นปลั๊กอินบางตัวที่ฉันไม่ได้พูดถึงที่นี่จะหยุดทำงาน
- ขณะนี้ Jack ไม่รองรับการประมวลผลคำอธิบายประกอบดังนั้นหากคุณต้องพึ่งพาไลบรารีเช่น Dagger, AutoValue และอื่น ๆ อย่างมากคุณควรคิดให้ดีก่อนที่จะเปลี่ยนไปใช้ Jack แก้ไข: ตามที่ Jake Wharton ชี้ให้เห็นว่า Jack in N Preview มีการรองรับการประมวลผลคำอธิบายประกอบ แต่ยังไม่ได้เปิดเผยผ่าน Gradle
- ไม่สนับสนุนเครื่องตรวจจับผ้าสำลีที่ทำงานบนระดับ bytecode ของ Java
- ไม่รองรับ Jacoco - โดยส่วนตัวแล้วฉันพบว่า Jacoco น่าสงสัย (มันไม่ได้แสดงสิ่งที่คุณต้องการเห็นจริงๆ) ดังนั้นสามารถอยู่ได้โดยไม่ต้องใช้มัน
- Dexguard - ปัจจุบันยังไม่รองรับ Proguard เวอร์ชันสำหรับองค์กร