บทนำ
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