d8
, Android Studio ve Android Gradle eklentisinin yüklü olduğu bir komut satırı aracıdır.
projenizin Java bayt kodunu çalıştıran DEX bayt koduna derlemek için
Android cihazlarda kullanın. d8
, Java 8 dil özelliklerini
kodu kullanabilirsiniz.
d8
, Android Build'e bağımsız bir araç olarak da dahildir
28.0.1 ve sonraki araçlar:
android_sdk/build-tools/version/
.
Genel kullanım
d8
için yalnızca derlenmiş Java bayt koduna yol gerekir
dönüştürmeyi seçebilirsiniz. Örnek:
d8 MyProject/app/build/intermediates/classes/debug/*/*.class
Giriş bayt kodu, *.class
dosyalarının herhangi bir kombinasyonunda olabilir veya
kapsayıcılar için geçerlidir. Şunları da ekleyebilirsiniz:
d8
için DEX dosyalarının DEX çıkışıyla birleştirilmesi
artımlı derlemelerden yararlanın.
d8
, varsayılan olarak Java bayt kodunu optimize edilmiş DEX dosyaları halinde derler
ve kendi başınıza yapabileceğiniz
kodu hata ayıklamak için
kullanabileceğiniz bir araçtır. Ancak, isterseniz
flag'lerini artımlı bir derleme gerçekleştirmek için
ana DEX dosyasında derlenmeli ve
Java 8'in dil özelliklerini kullanmak için ek kaynaklar gerekli.
d8 path-to-input-files [options]
Aşağıdaki tabloda d8
ile kullanabileceğiniz isteğe bağlı işaretler açıklanmaktadır:
Option | Açıklama |
---|---|
--debug
|
Hata ayıklama sembolü gibi hata ayıklama bilgilerini eklemek için DEX bayt kodunu derleyin tablolarında anlatacağım. Bu seçenek varsayılan olarak etkindir. Hata ayıklama bilgilerini
DEX bayt kodu, Uygulamanızın sürüm sürümü için DEX dosyaları derlerken veya
kitaplığı yerine |
--release
|
Hata ayıklama bilgileri olmadan DEX bayt kodunu derleyin. Ancak,
Herkese açık bir sürüm için bayt kodu derlerken bu işareti iletin. |
--output path
|
DEX çıkışı için istenen yolu belirtin. Varsayılan olarak
Bir ZIP veya JAR dosyasının yolunu ve adını belirtirseniz |
--lib android_sdk/platforms/api-level/android.jar
|
Android SDK'nızın android.jar yolunu belirtin.
Bu işaret,
Java 8 dil özellikleri hakkında daha fazla bilgi edinin.
|
--classpath path
|
d8 tarafından derlemek için gerekebilecek sınıf yolu kaynaklarını belirtin
içe aktarmanızı sağlar. Özellikle, d8 ,
kullanan bayt kodunu derlerken belirli kaynakları belirtebilirsiniz
Java 8 dil özellikleri hakkında daha fazla bilgi edinin.
|
--min-api number
|
Çıkış DEX dosyalarının desteklemesini istediğiniz minimum API düzeyini belirtin. |
--intermediate
|
d8 öğesini derlemediğinizi bildirmek için bu işareti iletin
projenizin Java bayt kodu kümesinin tamamıdır. Bu işaret,
geliştirmeyi öğreneceksiniz. Optimize edilmiş DEX dosyalarını derlemek yerine
bir cihazda çalıştırmayı beklediğinizi varsayalım. d8 , orta düzeyde
DEX dosyaları oluşturur ve bunları belirtilen çıkışta veya varsayılan yolda depolar.
Bir cihazda çalıştırmayı düşündüğünüz DEX dosyalarını derlemek istediğinizde bu işareti hariç tut ve ara DEX sınıflarına giden yolu belirt giriş olarak kullanabilirsiniz. |
--file-per-class
|
Her sınıfı ayrı DEX dosyaları halinde derleyin. Bu işareti etkinleştirmek, yalnızca değiştirilen sınıfları yeniden derler. Performans sırasında kullanan artımlı derlemeler için bu optimizasyon varsayılan olarak etkindir. Bu işareti aynı zamanda belirtirken de kullanamazsınız
|
--no-desugaring
|
Java 8 dil özelliklerini devre dışı bırakın. Bu işareti yalnızca amacınız yoksa kullanın kod, Java 8 dil özelliklerini kullanan Java bayt kodunu derlemek için kullanılır. |
--main-dex-list path
|
Android sistemi başlangıçta ana DEX dosyasını yüklediğinden kullanıyorsanız, başlangıçta belirli sınıflara öncelik vermek için bu işareti kullanabilirsiniz ana DEX dosyasında derleyerek oluşturabilirsiniz. Bu, özellikle de (ör. yalnızca ana DEX'teki sınıflar) dosyasının, eski multidex kitaplığı kullanıma sunulana kadar çalışma zamanında erişilebilir olması yüklendi. Her DEX dosyasının yine de
64K referans sınırını aşmamalıdır. Lütfen
ana DEX dosyası için çok fazla sınıf belirtir veya
derleme hatası. Varsayılan olarak,
Bu işareti aynı zamanda belirtirken de kullanamazsınız
|
--pg-map file
|
file öğesini dağıtım için eşleme dosyası olarak kullanın. |
--file-per-class-file
|
Her bir giriş .class dosyası için ayrı bir DEX dosyası oluşturun. Sentetik sınıfları kaynak sınıflarıyla birlikte tutun. |
--desugared-lib file
|
Çıkarılan bir kitaplık yapılandırması belirtin. file, JSON biçiminde kaldırılmış bir kitaplık yapılandırma dosyasıdır biçimindedir. |
--main-dex-rules file
|
Sınıfların her ay birincil DEX dosyası olabilir. |
--main-dex-list-output file
|
|
|
javac tarafından oluşturulan onay kodunu zorla etkinleştirin.
|
|
javac tarafından oluşturulan onay kodunu zorla devre dışı bırakın. Bu
aşağıdaki durumlarda javac onay kodunun varsayılan olarak işlenmesidir:
DEX dosyaları oluşturmaktır.
|
|
javac tarafından oluşturulan onay kodunu değiştirmeyin. Bu
aşağıdaki durumlarda javac onay kodunun varsayılan olarak işlenmesidir:
class dosya oluşturuluyor.
|
|
javac ve kotlinc tarafından oluşturulan onayı değiştir
her onay ile handler method yöntemini çağırmak için kod
hatasıyla karşılaşırsınız. handler method belirtilmiş
bir nokta ve yöntem adından sonra sınıf adı şeklinde değiştirebilirsiniz. İlgili içeriği oluşturmak için kullanılan
işleyici yöntemi, şu türde tek bir bağımsız değişken almalıdır:
java.lang.Throwable ve dönüş türü void .
|
--thread-count number of threads
|
Derleme için kullanılacak iş parçacığı sayısını belirtin. Belirtilmemişse sayı, buluşsal yöntemlere dayanır, olduğunu unutmayın. |
--map-diagnostics[
:type] from-level to-level
|
type harita teşhisi (varsayılan herhangi bir) olarak bildirildi from-level - to-level, burada from-level ve to-level "bilgi", "uyarı" veya "hata" değerlerinden biridir ve isteğe bağlı type, basit veya tam nitelikli Teşhisin Java türü adı. type belirtilmediyse from-level adresindeki tüm teşhisler eşlendi. Önemli derleyici hatalarının eşlenemeyeceğini unutmayın. |
--version
|
Şu anda kullandığınız d8 sürümünü yazdırın.
|
--help
|
d8 kullanımı için yardım metnini yazdır.
|
Artımlı derlemeler yapma
Geliştirme sırasında derleme hızlarını iyileştirmek (ör. sürekli entegrasyon için)
derlemeleri için d8
adlı projeye projenizin Java'sının yalnızca bir alt kümesini derlemesi için talimat verin
bayt kodu ile eşdeğerdir. Örneğin, sınıfa özel dexing özelliğini etkinleştirirseniz yalnızca yeniden derleyebilirsiniz
önceki derlemeden bu yana değiştirdiğiniz sınıflar.
Aşağıdaki komut, birkaç sınıf için artımlı bir derleme gerçekleştirir ve buna dahildir. Komut ayrıca artımlı derlemelerden oluşur.
d8 MainActivity.class R.class --intermediate --file-per-class --output ~/build/intermediate/dex
d8
, artımlı bir derleme gerçekleştirdiğinde ek bilgileri şurada depolar:
DEX çıkışı. d8
daha sonra bu bilgileri kullanarak
Uygulamanızın tam derleme işlemi sırasında --main-dex-list
seçeneği sunulur ve DEX dosyalarını birleştirin.
Örneğin, d8
Java 8 lambda sınıflarını işlerken hangi
Her giriş sınıfı için lambda sınıfları oluşturulur. Tam derleme sırasında d8
ana DEX dosyasında bir sınıf içeriyorsa,
şu sınıf için oluşturulan lambda sınıflarından biri de ana
DEX dosyası olarak kaydedin.
Projenizin tüm bayt kodunu DEX dosyaları olarak derlediyseniz
birden fazla artımlı derlemede,
aşağıdaki komutta gösterildiği gibi, ara DEX dosyaları dizinini d8
konumuna getirir.
Ayrıca, d8
tarafından ana
--main-dex-list
kullanan DEX dosyası. Çünkü giriş, oluşturulduğunda
DEX bayt kodu olarak derlendiği için bu derleme daha hızlı tamamlanır
daha iyi olacaktır.
d8 ~/build/intermediate/dex --release --main-dex-list ~/build/classes.txt --output ~/build/release/dex
Java 8 dil özelliklerini kullanan bayt kodu derleyin
d8
, Java 8'in dil özelliklerini kullanmanızı sağlar
desugaring adlı bir derleme işlemiyle kodunuza ekleyin. Şekeri arındırma dönüşüm
bu yararlı dil özelliklerini bayt
koduna dönüştürerek Android cihazınızda çalıştırılabilen
platformu.
Android Studio ve Android Gradle eklentisinde sınıf yolu bulunur
d8
adlı kaynak, su sadeleştirmeyi etkinleştirmek için ihtiyaç duyduğu kaynakları içerir. Ancak,
d8
komut satırını kullanıyorsanız bunları kendiniz eklemeniz gerekir.
Bu kaynaklardan biri, hedef Android SDK'nızdaki android.jar
öğesidir. Bu
bir dizi Android platform API'si içerir. Şunu kullanarak yolunu belirtin:
--lib
işareti.
Başka bir kaynak ise projenizde derlediğiniz Java bayt kodu kümesidir. şu anda DEX bayt kodu olarak derlememektedir, ancak diğer DEX bayt koduna dönüştürür.
Örneğin, kodunuzda
varsayılan ve statik arayüz yöntemleri, bunlar bir Java
çok sayıda dil özelliği sunuyorsa bu işareti kullanarak tüm
bayt kodunun tamamını derlemeyi amaçlamasanız bile projenin Java bayt kodu
DEX bayt koduna
dönüştürür. Çünkü d8
uygulamasının anlamak için bu bilgilere ihtiyacı vardır.
arayüz yöntemlerine yapılan çağrıları çözümlemeye yardımcı olur.
Aşağıdaki kod örneği, bir varsayılan arayüz yöntemidir:
d8 MainActivity.class --intermediate --file-per-class --output ~/build/intermediate/dex --lib android_sdk/platforms/api-level/android.jar --classpath ~/build/javac/debug