Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Kompilasi dengan Jack untuk Android 6.0–8.1

Jack adalah rantai alat Android yang mengkompilasi sumber Java ke dalam bytecode Android dex. Anda tidak perlu melakukan sesuatu yang berbeda untuk menggunakan Jack — cukup gunakan perintah makefile standar Anda untuk mengkompilasi pohon atau proyek Anda. Android 8.1 adalah rilis terakhir yang menggunakan Jack.

Tentang Jack

Jack berfungsi seperti yang ditunjukkan pada Gambar 1.

Ikhtisar Jack
Gambar 1. Gambaran umum Jack

Format perpustakaan jack

Jack memiliki format file .jack sendiri yang berisi kode dex yang telah dikompilasi sebelumnya untuk perpustakaan, memungkinkan untuk kompilasi yang lebih cepat (pre-dex).

Isi file perpustakaan Jack
Gambar 2. Isi file perpustakaan Jack

Jill

Alat Jill menerjemahkan perpustakaan .jar ada ke dalam format perpustakaan baru, seperti yang ditunjukkan di bawah ini.

Mengimpor perpustakaan .jar dengan Jill
Gambar 3. Alur kerja untuk mengimpor perpustakaan .jar ada

Server kompilasi jack

Pertama kali Jack digunakan, meluncurkan server kompilasi Jack lokal di komputer Anda. Server ini:

  • Membawa speedup intrinsik karena menghindari meluncurkan host baru JRE JVM, memuat kode Jack, menginisialisasi Jack, dan menghangatkan JIT pada setiap kompilasi. Ini juga menyediakan waktu kompilasi yang sangat baik selama kompilasi kecil (misalnya, dalam mode inkremental).
  • Merupakan solusi jangka pendek untuk mengontrol jumlah kompilasi Jack paralel. Server menghindari kelebihan komputer Anda (masalah memori atau disk) karena membatasi jumlah kompilasi paralel.

Server Jack dimatikan sendiri setelah waktu idle tanpa kompilasi. Ia menggunakan dua port TCP pada antarmuka localhost dan tidak tersedia secara eksternal. Semua parameter (jumlah kompilasi paralel, batas waktu, nomor port, dll.) Dapat dimodifikasi dengan mengedit file $HOME/.jack .

$ HOME / .jack file

File $HOME/.jack berisi pengaturan berikut untuk variabel server Jack dalam sintaks bash penuh:

  • SERVER=true memungkinkan fitur server Jack.
  • SERVER_PORT_SERVICE=8072 menetapkan nomor port TCP server untuk tujuan kompilasi.
  • SERVER_PORT_ADMIN=8073 menetapkan nomor port TCP server untuk keperluan admin.
  • SERVER_COUNT=1 tidak digunakan.
  • SERVER_NB_COMPILE=4 menetapkan jumlah maksimum dari kompilasi paralel yang diizinkan.
  • SERVER_TIMEOUT=60 menetapkan jumlah detik idle yang harus ditunggu server tanpa kompilasi sebelum mematikannya sendiri.
  • SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log} mengatur file tempat log server ditulis. Secara default, variabel ini dapat kelebihan beban oleh variabel lingkungan.
  • JACK_VM_COMMAND=${JACK_VM_COMMAND:=java} menetapkan perintah default yang digunakan untuk meluncurkan JVM pada host. Secara default, variabel ini dapat kelebihan beban oleh variabel lingkungan.

Memecahkan masalah kompilasi Jack

Masalah Tindakan
Komputer Anda menjadi tidak responsif selama kompilasi atau Anda mengalami kompilasi Jack gagal pada Memori kehabisan memori Kurangi jumlah kompilasi Jack simultan dengan mengedit $HOME/.jack dan mengubah SERVER_NB_COMPILE ke nilai yang lebih rendah.
Kompilasi gagal pada Tidak dapat meluncurkan server latar belakang Penyebab paling mungkin adalah port TCP sudah digunakan di komputer Anda. Perubahan port dengan mengedit $HOME/.jack ( SERVER_PORT_SERVICE dan SERVER_PORT_ADMIN variabel). Untuk membuka blokir situasi, nonaktifkan server kompilasi Jack dengan mengedit $HOME/.jack dan mengubah SERVER menjadi false . Sayangnya ini secara signifikan memperlambat kompilasi Anda dan mungkin memaksa Anda untuk meluncurkan make -j dengan kontrol beban (opsi -l of make ).
Kompilasi macet tanpa kemajuan Untuk membuka blokir situasinya, bunuh server latar belakang Jack menggunakan jack-admin kill-server ) lalu hapus direktori sementara yang terkandung dalam jack-$USER dari direktori sementara Anda ( /tmp atau $TMPDIR ).

Menemukan log Jack

Jika Anda menjalankan perintah make dengan target dist, log Jack terletak di $ANDROID_BUILD_TOP/out/dist/logs/jack-server.log . Jika tidak, Anda dapat menemukan log dengan menjalankan jack-admin server-log . Dalam hal kegagalan Jack yang dapat direproduksi, Anda bisa mendapatkan log yang lebih rinci dengan mengatur variabel berikut:

export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D sched.runner=single-threaded"

Gunakan perintah makefile standar untuk mengkompilasi pohon (atau proyek Anda) dan melampirkan output dan kesalahan standar. Untuk menghapus log build terperinci, jalankan:

unset ANDROID_JACK_EXTRA_ARGS

Keterbatasan jack

  • Secara default, server Jack hanya dapat digunakan oleh satu pengguna di komputer. Untuk mendukung pengguna tambahan, pilih nomor port yang berbeda untuk setiap pengguna dan sesuaikan SERVER_NB_COMPILE . Anda juga dapat menonaktifkan server Jack dengan mengatur SERVER=false di $HOME/.jack .
  • Kompilasi CTS lambat karena integrasi vm-tests-tf .
  • Alat manipulasi bytecode (seperti JaCoCo) tidak didukung.

Menggunakan Jack

Jack mendukung bahasa pemrograman Java 1.7 dan mengintegrasikan fitur tambahan yang dijelaskan di bawah ini.

Pra-dexing

Saat membuat file pustaka Jack, .dex pustaka dihasilkan dan disimpan di dalam file .jack library sebagai pre-dex. Saat mengkompilasi, Jack menggunakan kembali pre-dex dari masing-masing perpustakaan. Semua perpustakaan sudah pra-dexed.

Jack perpustakaan dengan pre-dex
Gambar 4. Jack libraries dengan pre-dex

Jack tidak menggunakan kembali perpustakaan pra-dex jika menyusut, kebingungan, atau pengemasan ulang digunakan dalam kompilasi.

Kompilasi tambahan

Kompilasi tambahan berarti bahwa hanya komponen yang disentuh sejak kompilasi terakhir (dan ketergantungannya) yang dikompilasi ulang. Kompilasi tambahan dapat secara signifikan lebih cepat daripada kompilasi penuh ketika perubahan terbatas pada satu set komponen.

Kompilasi tambahan dinonaktifkan secara default (dan secara otomatis dinonaktifkan ketika penyusutan, kebingungan, pengemasan ulang atau warisan multi-dex diaktifkan). Untuk mengaktifkan pembangunan bertahap, tambahkan baris berikut ke file Android.mk dari proyek yang ingin Anda buat secara bertahap:

LOCAL_JACK_ENABLED := incremental

Menyusut dan kebingungan

Jack menggunakan file konfigurasi ProGuard untuk mengaktifkan penyusutan dan kebingungan.

Pilihan umum termasuk yang berikut:

  • @
  • -include
  • -basedirectory
  • -injars
  • -outjars (hanya 1 tabung output yang didukung)
  • -libraryjars
  • -keep
  • -keepclassmembers
  • -keepclasseswithmembers
  • -keepnames
  • -keepclassmembernames
  • -keepclasseswithmembernames
  • -printseeds

Opsi susut meliputi:

  • -dontshrink

Opsi kebingungan meliputi:

  • -dontobfuscate
  • -printmapping
  • -applymapping
  • -obfuscationdictionary
  • -classobfuscationdictionary
  • -packageobfuscationdictionary
  • -useuniqueclassmembernames
  • -dontusemixedcaseclassnames
  • -keeppackagenames
  • -flattenpackagehierarchy
  • -repackageclasses
  • -keepattributes
  • -adaptclassstrings

Opsi yang diabaikan termasuk yang berikut:

  • -dontoptimize (Jack tidak mengoptimalkan)
  • -dontpreverify (Jack tidak melakukan preverifikasi)
  • -skipnonpubliclibraryclasses
  • -dontskipnonpubliclibraryclasses
  • -dontskipnonpubliclibraryclassmembers
  • -keepdirectories
  • -target
  • -forceprocessing
  • -printusage
  • -whyareyoukeeping
  • -optimizations
  • -optimizationpasses
  • -assumenosideeffects
  • -allowaccessmodification
  • -mergeinterfacesaggressively
  • -overloadaggressively
  • -microedition
  • -verbose
  • -dontnote
  • -dontwarn
  • -ignorewarnings
  • -printconfiguration
  • -dump

Mengemas kembali

Jack menggunakan file konfigurasi jarjar untuk melakukan pengemasan ulang. Meskipun Jack kompatibel dengan tipe aturan "rule", Jack tidak kompatibel dengan tipe aturan "zap" atau "keep".

Dukungan multidex

Jack menawarkan dukungan multidex asli dan lawas. Karena file dex terbatas pada metode 65K, aplikasi dengan lebih dari 65K metode harus dipecah menjadi beberapa file dex. Untuk detail lebih lanjut, lihat Mengaktifkan multidex untuk aplikasi dengan lebih dari 64 ribu metode .