เพิ่มตัวเลือกส่วนกลาง (original) (raw)

R8 มีตัวเลือกส่วนกลางที่แก้ไขการเพิ่มประสิทธิภาพของ R8 ทั่วทั้งแอปหรือส่งผลต่อกฎการเก็บทุกรายการ ตัวเลือกเหล่านี้จะได้รับการเก็บไว้ในไฟล์proguard-rules.pro พร้อมกับกฎการเก็บรักษา ตัวเลือกส่วนกลางเหล่านี้บางตัวเลือกจะกำหนดค่าการเพิ่มประสิทธิภาพเพิ่มเติม บางตัวเลือกจะปิดการเพิ่มประสิทธิภาพบางด้าน

ตัวเลือกส่วนกลางสำหรับการเพิ่มประสิทธิภาพเพิ่มเติม

ตัวเลือกส่วนกลางต่อไปนี้ช่วยให้เพิ่มประสิทธิภาพได้เพิ่มเติม

ต่อไปนี้เป็นตัวอย่างการกำหนดค่าที่เปิดใช้การเพิ่มประสิทธิภาพเพิ่มเติม

-repackageclasses
-allowaccessmodification

ตัวเลือกส่วนกลางในการจำกัดการเพิ่มประสิทธิภาพ

ตัวเลือกส่วนกลางต่อไปนี้ช่วยให้คุณปิดใช้การเพิ่มประสิทธิภาพแอปบางด้าน และมีประโยชน์เมื่อคุณปรับแต่งกฎการเก็บรักษาหรือเปิดใช้ R8 เป็นครั้งแรก

แอตทริบิวต์ที่ต้องเก็บ

แอตทริบิวต์คือข้อมูลเพิ่มเติมที่แนบมากับส่วนต่างๆ ของโค้ด แอตทริบิวต์จะจัดเก็บข้อมูล เช่น คำอธิบายประกอบและลายเซ็นทั่วไปจากโค้ดของคุณ

การทำ Reflection บางอย่างต้องเก็บบางแอตทริบิวต์ไว้เพื่อให้ดำเนินการได้สำเร็จ เช่น

แอตทริบิวต์ที่ต้องระบุโดยทั่วไป

เมื่อใช้ไฟล์ Proguard เริ่มต้น (proguard-android-optimize.txt หรือproguard-android.txt) ปลั๊กอิน Android Gradle (AGP) จะเก็บแอตทริบิวต์ต่อไปนี้ไว้ โปรดทราบว่าแอตทริบิวต์บางรายการเหล่านี้ต้องใช้ AGP เวอร์ชันใหม่กว่า

แอตทริบิวต์ คำอธิบาย
AnnotationDefault แอตทริบิวต์นี้อยู่ในประเภทคำอธิบายประกอบเองและจัดเก็บค่าเริ่มต้นสำหรับองค์ประกอบคำอธิบายประกอบหมายเหตุ: แอตทริบิวต์นี้จะเก็บอยู่โดยค่าเริ่มต้นตั้งแต่ AGP 7.1 และจำเป็นต้องเก็บอย่างชัดเจนในแอปที่ใช้ AGP เวอร์ชันก่อนหน้าเท่านั้น
EnclosingMethod แอตทริบิวต์นี้อยู่ในคลาสภายในที่ไม่ใช่คลาสโลคัลหรือคลาสที่ไม่ระบุชื่อ โดยจะระบุเมธอดหรือตัวกำหนดค่าเริ่มต้นที่มีคลาสนี้อยู่โดยตรง
InnerClasses แอตทริบิวต์นี้จะบันทึกข้อมูลเกี่ยวกับคลาสที่ซ้อนกัน (คลาสภายใน คลาสที่ซ้อนกันแบบคงที่ คลาสโลคัล และคลาสที่ไม่ระบุชื่อ) ที่กำหนดไว้ภายในคลาสอื่น
LineNumberTable แอตทริบิวต์นี้จะเชื่อมโยงคำสั่งไบต์โค้ดกับหมายเลขบรรทัดที่เกี่ยวข้องในไฟล์ต้นฉบับ หมายเหตุ: ระบบจะเก็บแอตทริบิวต์นี้ไว้โดยค่าเริ่มต้นตั้งแต่ปลั๊กอิน Android Gradle (AGP) 8.6 เป็นต้นไป และจะต้องเก็บไว้อย่างชัดเจนในแอปที่ใช้ AGP เวอร์ชันก่อนหน้าเท่านั้น
RuntimeVisibleAnnotations แอตทริบิวต์นี้จัดเก็บคำอธิบายประกอบที่มองเห็นได้ในขณะรันไทม์โดยการทำ Reflection โดยปกติแล้ว หากใช้คำอธิบายประกอบในรันไทม์ แอปและกฎสำหรับผู้ใช้ไลบรารีจะต้องการคำอธิบายประกอบนี้เท่านั้นจากแอตทริบิวต์ *Annotation
RuntimeVisibleParameterAnnotations แอตทริบิวต์นี้จัดเก็บคำอธิบายประกอบที่มองเห็นได้ในขณะรันไทม์โดยการทำ Reflection บนพารามิเตอร์ของเมธอด
RuntimeVisibleTypeAnnotations แอตทริบิวต์นี้จัดเก็บคำอธิบายประกอบที่ใช้กับการใช้งานประเภทต่างๆ แทนที่จะเป็นเพียงการประกาศ แอตทริบิวต์นี้จะปรากฏขณะรันไทม์
Signature แอตทริบิวต์นี้จัดเก็บลายเซ็นประเภททั่วไปเพิ่มเติมสำหรับคลาส เมธอด และฟิลด์ โดยเฉพาะเมื่อใช้ Generics (เช่น List)
SourceFile แอตทริบิวต์นี้จะจัดเก็บชื่อของไฟล์ต้นฉบับ (ไฟล์ .kt หรือ .java) ที่ใช้คอมไพล์คลาส โดยโปรแกรมแก้ไขข้อบกพร่องจะใช้ไฟล์นี้เป็นหลักเพื่อแสดงบรรทัดซอร์สโค้ดเดิมเมื่อดีบักโค้ด Java ที่คอมไพล์แล้ว ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์ติดตามการดำเนินการกลับไปยังโค้ดที่เขียนไว้ได้ หมายเหตุ: แอตทริบิวต์นี้จะเก็บอยู่โดยค่าเริ่มต้นตั้งแต่ AGP 8.2 เป็นต้นไป และจะต้องเก็บไว้อย่างชัดเจนในแอปที่ใช้ AGP เวอร์ชันก่อนหน้าเท่านั้น

สำหรับแอปที่ใช้ proguard-android-optimize.txt กฎการเก็บรักษาที่กำหนดโดย AGP จะเพียงพอในสถานการณ์ส่วนใหญ่ อย่างไรก็ตาม หากคุณเขียนโค้ดสำหรับไลบรารี คุณควรระบุแอตทริบิวต์ทั้งหมดที่ไลบรารีต้องการในกฎการเก็บรักษาสำหรับผู้ใช้ แม้ว่าจะมีการกำหนดไว้ในรายการนี้ก็ตาม ซึ่งจะช่วยให้ไลบรารีของคุณมีความเสถียรแม้ในกรณีที่นักพัฒนาแอปตัดสินใจไม่รวม proguard-android-optimize.txt ไว้

แอตทริบิวต์ที่ต้องเก็บเพิ่มเติม

คุณระบุแอตทริบิวต์เพิ่มเติมที่จะเก็บไว้ได้ แต่ไม่จำเป็นสำหรับสถานการณ์การเข้าถึงผ่าน reflection หรือ JNI ส่วนใหญ่ อย่างไรก็ตาม คุณอาจยังคงใช้บางส่วนของ รายการเหล่านี้บ่อยครั้งขณะเพิ่มประสิทธิภาพไลบรารี

แอตทริบิวต์ คำอธิบาย
MethodParameters แอตทริบิวต์นี้ให้ข้อมูลเกี่ยวกับพารามิเตอร์ของเมธอด โดยเฉพาะชื่อและแฟล็กการเข้าถึง
Exceptions แอตทริบิวต์นี้แสดงข้อยกเว้นที่ตรวจสอบแล้วซึ่งมีการประกาศเมธอดให้ส่ง โดยปกติแล้วแอตทริบิวต์นี้ไม่ได้ใช้กับแอป สำหรับผู้เขียนไลบรารี โดยทั่วไปแล้วจะไม่ใช้ในกฎการเก็บรักษาของผู้ใช้ แต่โดยทั่วไปจะใช้เมื่อสร้างไลบรารี ดูรายละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพไลบรารีได้ที่การเพิ่มประสิทธิภาพสำหรับผู้เขียนไลบรารี
RuntimeInvisibleAnnotations แอตทริบิวต์นี้จะจัดเก็บคำอธิบายประกอบที่มองไม่เห็นด้วยการสะท้อนขณะรันไทม์ในคลาส ฟิลด์ หรือเมธอด นักพัฒนาแอปไม่ควรเก็บแอตทริบิวต์นี้ไว้ สำหรับผู้เขียนไลบรารี แอตทริบิวต์นี้ไม่เกี่ยวข้องในกฎการเก็บรักษาของผู้ใช้ แต่โดยทั่วไปจะใช้เมื่อสร้างไลบรารี ดูรายละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพไลบรารีได้ที่การเพิ่มประสิทธิภาพสำหรับผู้เขียนไลบรารี
RuntimeInvisibleParameterAnnotations แอตทริบิวต์นี้จะจัดเก็บคำอธิบายประกอบที่มองไม่เห็นด้วยการทำ Reflection ขณะรันไทม์ในพารามิเตอร์ของเมธอด นักพัฒนาแอปไม่ควรเก็บแอตทริบิวต์นี้ไว้ สำหรับผู้เขียนไลบรารี แอตทริบิวต์นี้ไม่เกี่ยวข้องในกฎการเก็บรักษาของผู้ใช้ แต่โดยทั่วไปจะใช้เมื่อสร้างไลบรารี ดูรายละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพไลบรารีได้ที่การเพิ่มประสิทธิภาพสำหรับผู้เขียนไลบรารี
RuntimeInvisibleTypeAnnotations แอตทริบิวต์นี้จัดเก็บคำอธิบายประกอบที่ใช้กับการใช้งานประเภทต่างๆ แทนที่จะเป็นเพียงการประกาศ แอตทริบิวต์นี้จะไม่ปรากฏขณะรันไทม์ นักพัฒนาแอปไม่ควรเก็บแอตทริบิวต์นี้ไว้ สำหรับผู้เขียนไลบรารี แอตทริบิวต์นี้ไม่เกี่ยวข้องในกฎการเก็บรักษาของผู้ใช้ แต่โดยทั่วไปจะใช้เมื่อสร้างไลบรารี ดูรายละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพไลบรารีได้ที่การเพิ่มประสิทธิภาพสำหรับผู้เขียนไลบรารี