Jack, Android 6.0 - 8.1 arası sürümler için varsayılan Android geliştirme araç zinciridir.
Jack, Java kaynağını Android dex'te derleyen bir Android araç zinciridir. bayt kodu ile eşdeğerdir. Jack'i kullanmak için farklı bir şey yapmanız gerekmez. Tek yapmanız gereken ağacı veya projenizi derlemek için kullanılan standart makefile komutlarını kullanabilirsiniz. Android 8.1 Jack'i kullanan son sürümdür.
Jack hakkında
Jack, Şekil 1'de gösterildiği gibi çalışır.
Şekil 1. Jack'e genel bakış.
Jack kitaplığı biçimi
Jack, önceden derlenmiş dex kodunu içeren kendi .jack
dosya biçimine sahiptir
daha hızlı derlemeye (dex öncesi) olanak tanıyor.
Şekil 2. Jack kitaplığı dosyası içerikleri.
Canan
Aşağıdaki şekilde gösterildiği gibi, Jill aracı mevcut
.jar
kitaplıktan yeni kitaplık biçimine.
Şekil 3. Mevcut bir .jar
kitaplığını içe aktarma iş akışı.
Jack derleme sunucusu
Jack ilk kez kullanıldığında, bilgisayarınızdan erişebilirsiniz. Bu sunucu:
- Yeni bir ana makine JRE JVM'nin başlatılmasını önlediği için doğal bir hız artışı sağlar. Jack kodunu yükleme, Jack'i başlatma ve her birinde JIT'i çalıştırma derlememiz var. Aynı zamanda küçük dönemlerde çok iyi derleme süreleri derlemeler (örneğin, artımlı modda).
- Paralel Jack sayısını kontrol etmek için kısa vadeli bir çözümdür derlemeler. Sunucu bilgisayarınızda aşırı yükleme yapmaktan kaçınıyor (bellek veya disk sorunu) çünkü paralel derlemelerin sayısını sınırlar.
Jack sunucusu, boşta kaldığında hiçbir derleme işlemi yapılmadan kendi kendine kapanır.
Localhost arayüzünde iki TCP bağlantı noktası kullanır ve kullanılamaz
kontrol edin. Tüm parametreler (paralel derleme sayısı, zaman aşımı, bağlantı noktası sayısı
numarası vb.) $HOME/.jack
dosyası düzenlenerek değiştirilebilir.
$HOME/.jack dosyası
$HOME/.jack
dosyası, Jack için aşağıdaki ayarları içerir
tam bash söz diziminde sunucu değişkenleri:
SERVER=true
, Jack'in sunucu özelliğini etkinleştirir.SERVER_PORT_SERVICE=8072
, sunucunun TCP bağlantı noktası numarasını belirler yalnızca derlemek için kullanır.SERVER_PORT_ADMIN=8073
, sunucunun TCP bağlantı noktası numarasını belirler izin alınmasını gerektiriyor.SERVER_COUNT=1
kullanılmıyor.SERVER_NB_COMPILE=4
, izin verilen maksimum paralel sayısını belirliyor derlemeler.SERVER_TIMEOUT=60
, sunucunun boşta kaldığı saniye sayısını belirler derleme yapmadan önce kapanmadan önce beklemelidir.SERVER_LOG=${SERVER_LOG:=$SERVER_DIR/jack-$SERVER_PORT_SERVICE.log}
. sunucu günlüklerinin yazıldığı dosyayı ayarlar. Varsayılan olarak bu değişken bir ortam değişkeni nedeniyle aşırı yüklendi.JACK_VM_COMMAND=${JACK_VM_COMMAND:=java}
, varsayılan değeri belirliyor komutunun bir örneğidir. Varsayılan olarak bu değişken ortam değişkeni nedeniyle aşırı yüklendi.
Jack derlemeleriyle ilgili sorunları giderme
Sorun | İşlem |
---|---|
Derleme sırasında veya senkronizasyon sırasında bilgisayarınız yanıt vermemeye başlıyor. Bellek yetersiz hatası nedeniyle Jack derlemeleri başarısız oluyor | Eş zamanlı Jack sayısını azalt
derlemeler, $HOME/.jack düzenleyip değiştirerek
SERVER_NB_COMPILE daha düşük bir değere. |
Arka plan sunucusu başlatılamıyor derlemeleri başarısız oluyor | Bunun en olası nedeni TCP bağlantı noktalarının bilgisayarınızda zaten kullanılıyor olmasıdır. Değiştir
bağlantı noktalarını $HOME/.jack (SERVER_PORT_SERVICE ve
SERVER_PORT_ADMIN değişken). Durumun engellemesini kaldırmak için
$HOME/.jack öğesini düzenleyip değiştirerek Jack derleme sunucusu
SERVER - false . Ne yazık ki bu süreç
ve make -j öğesini yüklemeyle başlatmanıza zorlayabilir.
kontrol (seçenek -l /make ). |
Derleme, ilerleme kaydedilmiyorsa takılı kalıyor | Durumun engellemesini kaldırmak için aşağıdaki adımları uygulayarak Jack arka plan sunucusunu sonlandırın:
jack-admin kill-server ), ardından geçici dizinleri kaldırın.
geçici dizininizin jack-$USER dizininde bulunur
(/tmp veya $TMPDIR ). |
Jack günlüğünü bulma
Uzak hedef ile bir make
komutu çalıştırırsanız Jack günlüğü
şu adreste bulunuyor: $ANDROID_BUILD_TOP/out/dist/logs/jack-server.log
.
Aksi takdirde, günlüğü jack-admin server-log
komutunu çalıştırarak bulabilirsiniz.
Yinelenebilir Jack hataları durumunda, aşağıdaki adımları izleyerek daha ayrıntılı bir günlük edinebilirsiniz:
şu değişkeni ayarlayabilirsiniz:
export ANDROID_JACK_EXTRA_ARGS="--verbose debug --sanity-checks on -D sched.runner=single-threaded"
Ağacı (veya projenizi) derlemek için standart Makefile komutlarını kullanın ve standart çıktı ve hata eklemeniz gerekir. Ayrıntılı derleme günlüklerini kaldırmak için şu komutu çalıştırın:
unset ANDROID_JACK_EXTRA_ARGS
Jack sınırlamaları
Jack sunucusu varsayılan olarak
bilgisayardır. Başka kullanıcıları desteklemek amacıyla her biri için farklı bağlantı noktası numarası seçin
ve SERVER_NB_COMPILE
değerini buna göre ayarlayın. İsterseniz
$HOME/.jack
içinde SERVER=false
ayarlayarak Jack sunucusunu devre dışı bırakın.
Mevcut vm-tests-tf
entegrasyonu nedeniyle CTS derlemesi yavaş.
Bayt kodu işleme araçları (ör. JaCoCo) desteklenmez.
Jack'i kullan
Jack, Java programlama dili 1.7'yi destekler ve özelliklerini inceleyin.
Dex öncesi
Jack kitaplık dosyası oluştururken kitaplığın .dex
öğesi
oluşturulur ve .jack
kitaplık dosyasında dizin öncesi olarak depolanır.
Jack, derleme sırasında her kitaplıktaki öndex'i yeniden kullanır. Tüm kütüphaneler
önceden dizi olarak eklenmiş.
4.Şekil Preddex ile Jack kitaplıkları
Jack, küçültme, kod karartma veya derlemede kullanılan yeniden paketleme yöntemidir.
Artımlı derleme
Artımlı derlemede ise yalnızca son denemeden bu yana değinilen bileşenler, derlemeleri (ve bağımlılıkları) yeniden derlenir. Artımlı derleme sınırlı sayıda olduğunda, tam bir derlemeden çok daha hızlı bir dizi bileşendir.
Artımlı derleme varsayılan olarak devre dışıdır (ve otomatik
Bu özellik daraltılırken, kod karartma, yeniden paketleme veya çoklu dex eskitme olduğunda devre dışı bırakılır.
etkin). Artımlı derlemeleri etkinleştirmek için aşağıdaki satırı
Adım adım geliştirmek istediğiniz projenin Android.mk
dosyası:
LOCAL_JACK_ENABLED := incremental
Daraltma ve kod karartma
Jack, küçültmeyi ve boyutu korumayı mümkün kılmak için ProGuard yapılandırma dosyalarını kod karartma.
Sık kullanılan seçenekler şunlardır:
@
-include
-basedirectory
-injars
-outjars
(yalnızca 1 çıkış jar aracı desteklenir)-libraryjars
-keep
-keepclassmembers
-keepclasseswithmembers
-keepnames
-keepclassmembernames
-keepclasseswithmembernames
-printseeds
Daraltma seçenekleri arasında şunlar bulunur:
-dontshrink
Kod karartma seçenekleri şunlardır:
-dontobfuscate
-printmapping
-applymapping
-obfuscationdictionary
-classobfuscationdictionary
-packageobfuscationdictionary
-useuniqueclassmembernames
-dontusemixedcaseclassnames
-keeppackagenames
-flattenpackagehierarchy
-repackageclasses
-keepattributes
-adaptclassstrings
Yok sayılan seçenekler şunlardır:
-dontoptimize
(Jack optimize edilmez)-dontpreverify
(Jack önceden doğrulama yapmıyor)-skipnonpubliclibraryclasses
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-keepdirectories
-target
-forceprocessing
-printusage
-whyareyoukeeping
-optimizations
-optimizationpasses
-assumenosideeffects
-allowaccessmodification
-mergeinterfacesaggressively
-overloadaggressively
-microedition
-verbose
-dontnote
-dontwarn
-ignorewarnings
-printconfiguration
-dump
Yeniden paketleme
Jack, yeniden paketleme işlemi için jarjar yapılandırma dosyalarını kullanır. Jack "rule" ile uyumlu kural türleri, "zap" ile uyumlu değildir veya "sakla" kural türleri.
Multidex desteği
Jack, yerleşik ve eski multimedya desteği sunar. Dex dosyaları sınırlı olduğu için 65 binden fazla yöntem içeren uygulamalar birden fazla dex'e bölünmelidir. dosyası olarak da kaydedebilir. Daha fazla bilgi için: 64 binden fazla yöntemi olan uygulamalar için multidex'i etkinleştirme