การกําจัดโค้ดที่สูญหาย

เกริ่นนำ

Jar ต้นทางของแอปพลิเคชัน Java อาจมีไฟล์ต้นฉบับจำนวนมากซึ่งไม่มีการใช้งานอย่างสมบูรณ์หรือรวมอยู่ในวิธีการเพียงไม่กี่วิธี การแปลโค้ดที่ใช้งานไม่ได้นี้ให้เป็น Objective-C จะทำให้แอปพลิเคชัน iOS ของคุณแพร่หลายมากขึ้นโดยไม่จำเป็นและเพิ่มโอกาสในการพบข้อผิดพลาดในการแปล โดยเฉพาะอย่างยิ่งหากไลบรารี Java ของคุณใช้ฟีเจอร์ที่เครื่องมือแปล J2ObjC ไม่รองรับ

ProGuard เป็นเครื่องมือแบบโอเพนซอร์สที่ช่วยคุณย่อ สร้างความสับสน และทำให้ไบต์โค้ดของ Java เปลี่ยนแปลง หากมี Jar แบบไบต์โค้ด ก็เลือกพิมพ์รายงาน "การใช้งาน" ที่แสดงคลาสและเมธอดที่ไม่ได้ใช้ทั้งหมดในแอปพลิเคชันของคุณได้ (ไม่บังคับ) J2ObjC สามารถใช้รายงานดังกล่าวเพื่อข้ามคลาสและเมธอดเหล่านี้ระหว่างการแปล

ดาวน์โหลด ProGuard ได้ที่นี่

การกำหนดค่า ProGuard

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

ก่อนอื่นให้ตรวจสอบว่าคุณมีขวดไบต์โค้ดสำหรับแอปพลิเคชันที่สอดคล้องกับ jar ต้นทาง คุณสามารถใช้ไฟล์การกำหนดค่าต่อไปนี้ ซึ่งคัดลอกมาจากคู่มือ ProGuard เป็นเทมเพลตในการสร้างเอาต์พุตที่ J2ObjC คาดหวัง

-injars app-bin.jar
-libraryjars /lib/rt.jar

-dontoptimize
-dontobfuscate
-dontpreverify
-printusage
-dontnote

-keep public class com.foo.app.Main {
    public static void main(java.lang.String[]);
}

-keepclassmembers class * {
    static final % *;
    static final java.lang.String *;
}

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

ProGuard สำหรับการวิ่ง

เมื่อคุณมีขวดไบต์โค้ดของแอปพลิเคชันและไฟล์การกำหนดค่า ProGuard ที่ปรับแต่งแล้ว (หรือที่เรียกว่า usage.pg) คุณสามารถสร้างไฟล์รายงานการใช้งานด้วยคำสั่งต่อไปนี้

java -jar proguard.jar @usage.pg > usage.log

การดำเนินการนี้จะสร้างไฟล์ชื่อ usage.log ซึ่งแสดงรายการคลาสและเมธอดที่แอปพลิเคชันของคุณไม่มีการใช้งาน

การเรียกใช้ J2ObjC ที่มีการกำจัดโค้ดที่ไม่ทำงาน

เมื่อมีรายงานการใช้งาน ProGuard แล้ว ก็สามารถเปิดใช้ระยะการลบโค้ดที่ใช้งานไม่ได้ใน J2ObjC โดยใช้แฟล็กบรรทัดคำสั่ง --dead-code-report <file> ระยะการแปล DeadCodeEliminator จะใช้รายงานการใช้งานเพื่อนำโค้ดที่เสียออกจากไฟล์ต้นฉบับแต่ละไฟล์ก่อนที่จะแปลงเป็น Objective-C