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

บทนำ

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

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

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

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

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

ขั้นตอนแรก ตรวจสอบว่าคุณมี Jar แบบไบต์โค้ดสำหรับแอปพลิเคชันที่สอดคล้องกับ 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

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

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

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

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

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