Penghapusan Kode Mati

Pengantar

Jar sumber aplikasi Java Anda mungkin berisi banyak file sumber yang sama sekali tidak digunakan atau disertakan hanya untuk beberapa metode. Menerjemahkan kode yang sudah tidak berlaku ini ke Objective-C akan membuat aplikasi iOS Anda menjadi tidak perlu dan meningkatkan kemungkinan terjadinya error terjemahan, terutama jika salah satu library Java Anda menggunakan fitur yang tidak didukung oleh penerjemah J2ObjC.

ProGuard adalah alat open source yang membantu Anda menyusutkan, meng-obfuscate, dan mengubah bytecode Java. Secara opsional, dengan jar bytecode, kode ini dapat mencetak laporan "penggunaan" yang mencantumkan semua class dan metode yang tidak digunakan dalam aplikasi Anda. J2ObjC dapat menggunakan laporan tersebut untuk melewati class dan metode ini selama penerjemahan.

ProGuard dapat didownload di sini.

Mengonfigurasi ProGuard

ProGuard menerima file konfigurasi sebagai argumen command line yang menentukan pengoptimalan yang harus dilakukan dan laporan yang harus dihasilkannya. Karena J2ObjC hanya perlu mengetahui kode yang sudah tidak berlaku, Anda harus menonaktifkan semua pengoptimalan dan logging yang tidak relevan; file yang diteruskan ke J2ObjC hanya boleh terdiri dari teks header ProGuard dan laporan penggunaan.

Pertama, pastikan Anda memiliki jar bytecode untuk aplikasi yang sesuai dengan jar sumber. Anda dapat menggunakan file konfigurasi berikut, yang disalin dari panduan ProGuard, sebagai template untuk menghasilkan output yang diharapkan 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 *;
}

Ubah file konfigurasi ini untuk memastikan bahwa ProGuard tidak menghilangkan apa pun yang tidak seharusnya. Jika jar adalah aplikasi dan bukan hanya library, menentukan metode main() seperti yang telah kita lakukan di sini akan mempertahankan semua yang diperlukan; Anda dapat memeriksa output yang dihasilkan dari ProGuard sebagai pemeriksaan kesehatan.

Menjalankan ProGuard

Setelah memiliki jar bytecode aplikasi dan file konfigurasi ProGuard yang disesuaikan (disebut, misalnya, usage.pg), Anda dapat membuat file laporan penggunaan dengan perintah berikut:

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

Tindakan ini akan membuat file bernama usage.log yang mencantumkan class dan metode aplikasi yang tidak digunakan.

Menjalankan J2ObjC dengan penghapusan kode mati

Setelah memiliki laporan penggunaan ProGuard, Anda dapat mengaktifkan fase penghapusan kode mati di J2ObjC menggunakan flag command line --dead-code-report <file>. Fase terjemahan DeadCodeEliminator akan menggunakan laporan penggunaan untuk menghapus kode yang sudah tidak berlaku dari setiap file sumber sebelum diterjemahkan ke Objective-C.