Android'de .dex dosyaları nedir?


193

Dex dosyaları ile ilgili bazı sorularım var

  • dexAndroid'de dosya nedir ?
  • Dex Android için nasıl çalışır?
  • Bir Android uygulamasında hata ayıklamada nasıl kullanılırlar?
  • Java sınıfı dosyalarına benzerler mi?

Özel bilgilere ihtiyacım var lütfen bu konuda yardım ve gerçek örnekler bekliyoruz!


plz Bu bağlantıyı gördüm stackoverflow.com/questions/1249973/…
Gensheriff

Yanıtlar:


226

.Dex Dosyası Hakkında:

Dalvik Virtual MachineAndroid sisteminin altındaki işgücünün en dikkat çekici özelliklerinden biri, Java bayt kodunu kullanmamasıdır. Bunun yerine, DEX adı verilen, kendi oluşturduğunuz bir biçim tanıtıldı ve bayt kodu talimatları bile Java bayt kodu yönergeleriyle aynı değil.

Compiled Android application code file.

Android programları, .dex(Dalvik Yürütülebilir) dosyalara derlenir ve bunlar .apkda cihazdaki tek bir dosyaya sıkıştırılır . .dexJava programlama dilinde yazılan derlenmiş uygulamaları otomatik olarak çevirerek dosyalar oluşturulabilir.

Dex dosya biçimi:

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android'in Dalvik Executable Format( .dex dosyaları) dokümanları vardır . Daha fazla bilgiyi resmi dokümanlarda bulabilirsiniz: Dex Dosya Biçimi

.dex dosyaları java sınıfı dosyalara benzer, ancak eski Android sürümlerinde Dalkvik Sanal Makinesi (DVM) altında çalıştırıldı ve daha yeni Android sürümlerinde ART ile yerel kod için cihazdaki kurulum zamanında derlendi.

Android-sdk içinde sağlanan aracı decompilekullanarak .dex yapabilirsiniz dexdump.

Bir dosyadan veya bir dosyadan yapmak için bazı Ters Mühendislik Teknikleri de vardır .jar filejava class file.dex


Jar dosyam varlık klasöründe bazı xml içeriyor. Bunun .dex'in bir parçası olmasını istiyorum.
AndroidGuy

@AndroidGuy - Jar dosyası, bunun için Android Kitaplık Paketi'ni kullanmanız gereken herhangi bir android kaynak paketi (/ varlık) içermiyor.
user370305

ART, Android Lollipop'ta nasıl çalışır? Hangi dosyalar orada ve hangi yolda kullanılıyor? Bazıları daha fazla yer kaplayacağını söyledi. Bu doğru mu? Eğer öyleyse, nasıl olur? Yani, yerel kod her zaman bayt kodundan çok daha küçük gibi görünüyor ve dex dosyaları nasıl çalıştığı açısından bayt koduna benzer.
android geliştirici

Unutulmaması gereken önemli bir şey, dexdumpbir decompiler değil bir
sökücü olmasıdır

90
.dex file

Derlenmiş Android uygulama kodu dosyası.

Android programları .dex (Dalvik Yürütülebilir) dosyalarına derlenir ve bunlar da cihazdaki tek bir .apk dosyasına sıkıştırılır. Java programlama dilinde yazılmış derlenmiş uygulamalar çevrilerek .dex dosyaları Android tarafından otomatik olarak oluşturulabilir.


2
Jar dosyam varlık klasöründe bazı xml içeriyor. Bunun .dex'in bir parçası olmasını istiyorum.
AndroidGuy

87

dex dosyası, Dalvik VM'de yürütülen bir dosyadır.

Dalvik VM, performans optimizasyonu, doğrulaması ve izlenmesi için bir tanesi Dalvik Yürütülebilir (DEX) özelliklerine sahiptir .

Java kaynak kodu Java derleyicisi tarafından .classdosyalara derlenir . Ardından, dxAndroid SDK'nın bir parçası olan (dexer) aracı, .classdosyaları DEXDalvik bayt kodunu içeren bir dosya biçiminde işler . dxAraç, tüm sınıflarda mevcut olan gereksiz bilgi ortadan kaldırır. Uygulamanın DEXtüm sınıflarında tek bir dosyada paketlenmiştir. Aşağıdaki tabloda, JVM jar dosyaları için kod boyutları ile dexaraç tarafından işlenen dosyalar arasında karşılaştırma sağlanmaktadır .

Tablo, sistem kitaplıkları, web tarayıcı uygulamaları ve genel amaçlı bir uygulama (çalar saat uygulaması) için kod boyutlarını karşılaştırır. Her durumda dex aracı kodun boyutunu% 50'den fazla azalttı.

resim açıklamasını buraya girin

Standart Java ortamlarında, Java kodundaki her sınıf bir .classdosyayla sonuçlanır . Bu, Java kaynak kodu dosyasının bir ortak sınıfı ve iki anonim sınıfı varsa, olay işleme için diyelim, java derleyici toplam üç .classdosya oluşturacaktır .

Derleme adımı Android platformunda aynıdır, bu nedenle birden fazla .classdosyaya neden olur. Ancak .classdosyalar oluşturulduktan sonra , “dx” aracı tüm .classdosyaları tek bir .dexdosyaya veya Dalvik Yürütülebilir dosyaya dönüştürmek için kullanılır . Öyle .dexDalvik VM yürütülür dosyası. .dexDosya bellek kullanımı için optimize edilmiştir ve tasarım öncelikle verilerin paylaşımı ile tahrik edilmektedir.


18
İyi bilgi. Sadece bir şey var. Bazen yöntem çağırma talimatı sayısı sınırı nedeniyle birden fazla dex dosyası olacaktır. Bu sınır 65k yöntemidir. Bu durumda kodunuz tek bir dosyada değil, 2 veya daha fazla dosyada olacaktır, ancak diğer her şey yine de geçerlidir. Ayrıca dinamik sınıf yüklemesi de mevcut olduğundan, dosyalardan (yine dexed formunda) kod yükleyebilirsiniz ve böylece kod birden fazla dex dosyasının içinde olacaktır.
Igor Čordaš
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.