Google berkomitmen untuk memajukan ekuitas ras bagi masyarakat Hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Kompilasi dengan Jack untuk Android 6,0-8,1

Jack adalah toolchain Android yang dikompilasi sumber Java ke Android dex bytecode. Anda tidak perlu melakukan hal berbeda untuk menggunakan Jack-hanya menggunakan perintah makefile standar untuk mengkompilasi pohon atau proyek Anda. Android 8.1 adalah rilis terakhir yang menggunakan Jack.

Tentang Jack

Jack bekerja seperti yang ditunjukkan pada Gambar 1.

Jack gambaran
Gambar 1. Jack gambaran

Format perpustakaan jack

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

Jack isi file library
Gambar 2. Jack isi file library

Jill

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

Mengimpor perpustakaan .jar dengan Jill
Gambar 3. Workflow untuk mengimpor ada .jar perpustakaan

kompilasi Server jack

Pertama kali Jack digunakan, itu meluncurkan Jack kompilasi server lokal pada komputer Anda. server ini:

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

The Jack Menutup server itu sendiri turun setelah waktu idle tanpa kompilasi apapun. Menggunakan dua port TCP pada antarmuka localhost dan tidak tersedia secara eksternal. Semua parameter (jumlah kompilasi paralel, timeout, port nomor, dll) dapat dimodifikasi dengan mengedit $HOME/.jack berkas.

$ HOME / file yang .jack

The $HOME/.jack file berisi pengaturan berikut untuk variabel server Jack dalam sintaks pesta penuh:

  • SERVER=true memungkinkan fitur server Jack.
  • SERVER_PORT_SERVICE=8072 set TCP nomor port dari server untuk tujuan kompilasi.
  • SERVER_PORT_ADMIN=8073 set TCP nomor port dari server untuk tujuan admin.
  • SERVER_COUNT=1 tidak terpakai.
  • SERVER_NB_COMPILE=4 set jumlah maksimum kompilasi paralel diperbolehkan.
  • SERVER_TIMEOUT=60 set jumlah detik menganggur server harus menunggu tanpa kompilasi sebelum menutup sendiri ke bawah.
  • SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log} set file mana log server ditulis. Secara default, variabel ini dapat kelebihan beban dengan 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 dengan variabel lingkungan.

Pemecahan masalah Jack kompilasi

Masalah Tindakan
Komputer Anda menjadi tidak responsif selama kompilasi atau Anda mengalami Jack kompilasi gagal pada Out kesalahan memori Mengurangi jumlah Jack kompilasi simultan dengan mengedit $HOME/.jack dan mengubah SERVER_NB_COMPILE untuk nilai yang lebih rendah.
Kompilasi gagal di Can bukan peluncuran Server latar belakang Penyebab yang paling mungkin adalah port TCP sudah digunakan pada komputer Anda. Perubahan port dengan mengedit $HOME/.jack ( SERVER_PORT_SERVICE dan SERVER_PORT_ADMIN variabel). Untuk membuka blokir situasi, menonaktifkan kompilasi Server Jack dengan mengedit $HOME/.jack dan mengubah SERVER untuk false . Sayangnya ini secara signifikan memperlambat kompilasi dan mungkin memaksa Anda untuk memulai make -j dengan kontrol beban (opsi -l dari make ).
Kompilasi mendapat terjebak tanpa kemajuan Untuk membuka blokir situasi, membunuh server latar belakang Jack menggunakan jack-admin kill-server ) kemudian menghapus direktori sementara yang terkandung dalam jack-$USER dari direktori sementara Anda ( /tmp atau $TMPDIR ).

Menemukan Jack log

Jika Anda berlari make perintah dengan target dist, Jack log terletak di $ANDROID_BUILD_TOP/out/dist/logs/jack-server.log . Jika tidak, Anda dapat menemukan log dengan menjalankan jack-admin server-log . Dalam kasus kegagalan Jack direproduksi, Anda bisa mendapatkan log yang lebih rinci dengan menetapkan 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 standar dan kesalahan. Untuk menghapus rinci build log, jalankan:

unset ANDROID_JACK_EXTRA_ARGS

Jack keterbatasan

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

menggunakan Jack

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

Pre-dexing

Saat membuat file library Jack, yang .dex perpustakaan dihasilkan dan disimpan di dalam .jack file library sebagai pra-dex. Ketika kompilasi, Jack reuses pra-dex dari masing-masing perpustakaan. Semua perpustakaan pra-dexed.

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

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

kompilasi Incremental

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

kompilasi Incremental dinonaktifkan secara default (dan secara otomatis dinonaktifkan ketika menyusut, kebingungan, pengemasan ulang atau multi-dex warisan diaktifkan). Untuk mengaktifkan inkremental membangun, tambahkan baris berikut ke Android.mk file dari proyek yang Anda ingin membangun secara bertahap:

LOCAL_JACK_ENABLED := incremental

Menyusut dan kebingungan

Jack menggunakan file konfigurasi ProGuard untuk mengaktifkan menyusut dan kebingungan.

Pilihan yang umum antara lain sebagai berikut:

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

Pilihan menyusut antara lain sebagai berikut:

  • -dontshrink

Kebingungan pilihan antara lain sebagai berikut:

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

Pilihan diabaikan antara lain sebagai berikut:

  • -dontoptimize (Jack tidak mengoptimalkan)
  • -dontpreverify (Jack tidak preverify)
  • -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. Sementara Jack kompatibel dengan "aturan" jenis aturan, tidak kompatibel dengan "zap" atau "keep" jenis aturan.

dukungan Multidex

Jack menawarkan dukungan multidex asli dan warisan. Karena file dex terbatas untuk 65 ribu metode, aplikasi dengan lebih dari 65 ribu metode harus dibagi menjadi beberapa file dex. Untuk lebih jelasnya, lihat Aktifkan multidex untuk aplikasi dengan lebih dari 64K metode .