Penghapusan Kode Mati

Pengantar

Jala sumber aplikasi Java Anda mungkin berisi sejumlah besar file sumber yang sama sekali tidak digunakan atau disertakan hanya untuk beberapa metode. Menerjemahkan kode mati ini ke Objective-C akan membengkak aplikasi iOS Anda secara tidak perlu dan meningkatkan kemungkinan mengalami kesalahan terjemahan, terutama jika salah satu pustaka Java Anda menggunakan fitur yang tidak didukung oleh Penerjemah J2ObjC.

ProGuard adalah fitur open source yang membantu Anda menyusutkan, meng-obfuscate, dan merusak bytecode Java. Opsional, dengan jar bytecode, dapat mencetak "penggunaan" laporan yang mencantumkan semua class dan metode yang tidak digunakan di 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 kinerja yang baik dan laporan yang harus dihasilkannya. Karena J2ObjC hanya perlu tahu tentang kode yang mati, Anda sebaiknya menonaktifkan semua pengoptimalan dan logging tidak relevan; file yang diteruskan ke J2ObjC seharusnya hanya terdiri dari teks header ProGuard dan laporan penggunaan.

Pertama, pastikan Anda memiliki jar bytecode untuk aplikasi Anda yang sesuai dengan jar sumber. Anda dapat menggunakan file konfigurasi berikut, yang disalin dari panduan ProGuard, sebagai template untuk membuat 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 Anda adalah aplikasi dan bukan hanya library, tentukan metode main() seperti yang telah kita dilakukan di sini harus menyimpan semua yang diperlukan; Anda dapat memeriksa {i>output<i} yang dihasilkan dari ProGuard sebagai pemeriksaan kesehatan.

Menjalankan ProGuard

Setelah Anda memiliki bytecode jar 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 Anda yang tidak digunakan.

Menjalankan J2ObjC dengan eliminasi kode mati

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