Dalvik yürütülebilir biçimi

Bu dokümanda, .dex düzeni ve içeriği açıklanmaktadır bir dizi sınıf tanımını ve bunlarla ilişkili sınıf tanımını tutmak için kullanılan dosyalar ek veriler.

Türlere ilişkin kılavuz

Ad Açıklama
bayt 8 bit imzalı tam sayı
Ubayt 8 bit imzasız int
kısa video 16 bit imzalı int, küçük endian
Ushort 16 bit işaretsiz int, small-endian
int 32 bit imzalı int, küçük endian
Uint 32 bit işaretsiz int, small-endian
uzun 64 bit imzalı int, küçük endian
Ulong 64 bit işaretsiz int, small-endian
sleb128 imzalı LEB128, değişken uzunlukta (aşağıya bakın)
uleb128 imzasız LEB128, değişken uzunlukta (aşağıya bakın)
uleb128p1 imzasız LEB128 artı 1, değişken uzunlukta (aşağıya bakın)

LEB128

LEB128 ("Little-Endian Base 128"), için değişken uzunlukta kodlama isteğe bağlı imzalı veya imzasız tam sayı değerleri. Biçim şuydu: DWARF3'ten ödünç alınmıştır. bakın. Bir .dex dosyasında LEB128, yalnızca 32 bitlik miktarları kodlayın.

LEB128 kodlamalı her bir değer, bir ila beş arasında baytlar birlikte tek bir 32 bit değeri temsil eder. Her biri bayt, tablodaki en önemli bit kümesi dışında en önemli en belirgin olan adım sırası. Kalan her baytın yedi biti yüktür, diğeri ise en az yedi biti miktarın bitleri ve ikinci baytta gelen yedi biti bayt vb. kullanır. İmzalanmış bir LEB128 (sleb128) olması durumunda dizideki son baytın en önemli yük biti işareti uzatılmıştır. İmzasız destek kaydında (uleb128), açıkça temsil edilmeyen bit değerleri 0 olarak yorumlanır.

İki baytlık LEB128 değerinin bit tabanlı diyagramı
İlk bayt İkinci bayt
1 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 bit13 bit12 bit11 bit10 bit9 bit8 bit7

uleb128p1 varyantı, imzalı bir değeri temsil etmek için kullanılıyor değeri (burada gösterim, artı bir olarak kodlanmış değerin temsilidir) uleb128 olarak kayıtlı. Bu, -1 kodlamasını yapar. (alternatif olarak imzasız değer olarak düşünülür 0xffffffff) — ancak başka negatif sayı yok — tek bir bayt ve temsil edilen sayının negatif olmayan veya -1 (ya da 0xffffffff) olmalıdır ve başka negatif değerlere izin verilmediği (ya da değerlerine ihtiyaç duymazsınız.)

Biçimlere ilişkin bazı örnekleri aşağıda bulabilirsiniz:

Kodlanmış Dizi sleb128 olarak uleb128 olarak uleb128p1 olarak
0000-1
01110
7f-1127)126
80 7f-1281625616255

Dosya düzeni

Ad Biçimi Açıklama
üst bilgi başlık_öğesi başlık
string_id'ler string_id_item[] dize tanımlayıcıları listesidir. Bunlar tüm dizelerin tanımlayıcılarıdır dahili adlandırma (ör. tür tanımlayıcılar) için bu dosya tarafından kullanılır kod tarafından ifade edilen sabit nesneler olarak adlandırılır. Bu liste sıralanmalıdır UTF-16 kod noktası değerleri kullanılarak ( yerel ayara duyarlı olacak şekilde) ve yinelenen girişler içermemelidir.
typeid'ler type_id_item[] belirtebilirsiniz. Bunlar tüm türler (sınıflar, veya temel türler) (ya da tanımlanmış olup olmadığına bakılmaksızın) dosya içinde yer alıp almayacağını belirler. Bu liste şuna göre sıralanmalıdır: string_id dizinine ekleyin ve yinelenen girişler içermemelidir.
proto_kimlikler proto_id_item[] yöntem prototip tanımlayıcılarının bir listesidir. Bunlar tüm reklamverenler için bu dosya tarafından başvuruda bulunulan prototipler. Bu liste şuna göre sıralanmalıdır: dönüş türü (type_id dizinine göre) ana sıralama, ardından bağımsız değişken listesine göre (sözlüğün sıralaması, bağımsız değişkenler type_id dizinine göre sıralanmıştır). Liste, olup olmadığını kontrol edin.
alan_kimlikleri Field_id_item[] alan tanımlayıcılarının bir listesidir. Bunlar tüm alanların tanımlayıcısıdır Dosyada tanımlanmış olup olmadığına bakılmaksızın, söz konusu dosya tarafından atıfta bulunulur. Bu liste, tanımlayıcı tür (type_id öğesine göre) sıralanmalıdır indeks), ana sıra, alan adıdır (string_id dizinine göre) ara sıra ve türdür (type_id dizinine göre) ara sıradır. Liste, yinelenen girişler içermemelidir.
yöntem_kimlikleri method_id_item[] yöntem tanımlayıcıları listesine eklenir. Bunlar tüm yöntemlerin tanımlayıcılarıdır Dosyada tanımlanmış olup olmadığına bakılmaksızın, söz konusu dosya tarafından atıfta bulunulur. Bu liste, tanımlayıcı tür (type_id öğesine göre) sıralanmalıdır dizin) ana sıra, yöntem adıdır (string_id dizin) ara sıra ve yöntem prototipidir ( proto_id dizini) alt sıradır. Liste, olup olmadığını kontrol edin.
sınıf_defs class_def_item[] sınıf tanımları listesi. Sınıflar, belirli bir ve uygulanan arayüzlerin görünümü daha erken bir liste hazırlayabilirsiniz. Ayrıca, veriler için aynı ada sahip sınıfın bir defadan fazla görünmesi liste dışı bırakmalısınız.
site_kimliklerini_çağrı call_site_id_item[] arama sitesi tanımlayıcıları listesi. Bunlar, tüm telefon araması sitelerinin tanımlayıcılarıdır Dosyada tanımlanmış olup olmadığına bakılmaksızın, söz konusu dosya tarafından atıfta bulunulur. Bu liste call_site_off artan düzende sıralanmalıdır.
yöntem_kulisleri method_handle_item[] yöntemini kullanın. Bu dosya tarafından atıfta bulunulan tüm yöntem işleyicilerin listesi, dosyada tanımlı olup olmamasından bağımsız olarak. Bu liste sıralanmadı ve şunları içerebilir mantıksal olarak farklı yöntem işleyici örneklerine karşılık gelecek kopyalar.
veri ubyte[] veri alanını içerir. Farklı öğelerin hizalama gereksinimleri farklıdır ve Gerekirse her bir öğeden önce dolgu baytları eklenir. doğru hizalama.
bağlantı_verileri ubyte[] ve statik olarak bağlantılı dosyalarda kullanılan veriler için geçerlidir. Verilerin biçimi bu bölüm bu belge tarafından belirtilmemiştir. Bağlantısı kaldırılan dosyalarda ve çalışma zamanı uygulamalarında bu bölüm boştur uygun gördükleri şekilde kullanabilir.

Bit alanı, dize ve sabit tanımlar

DEX_DOSYA_SİHİRLİ

header_item içine gömülü

Sabit dizi/dize DEX_FILE_MAGIC, .dex dosyasının başında görünmesi gereken bayt kabul edilmesi açısından önemlidir. Değerin kasıtlı olarak bir yeni satır ("\n" veya 0x0a) ve bir yardımcı olması için null bayt ("\0" veya 0x00) belirli yolsuzluk biçimlerini saptamasına yardımcı olur. Değer ayrıca bir biçim sürüm numarasını üç ondalık basamak olarak kodlar. biçimi geliştikçe zaman içinde monoton bir şekilde artması bekleniyor.

ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 }
                        = "dex\n039\0"

Not: 039 sürümü için destek biçimi iki yeni Android 9.0 sürümünde eklendi. yeni bayt kodları, const-method-handle ve const-method-type. (Bunların her biri Bayt kodu kümesinin özeti tablosu.) Android 10'da 039 sürümü, DEX dosya biçimini gizli bilgileri içerecek şekilde genişletir Yalnızca başlatma sınıfı yolundaki DEX dosyaları için geçerli olan API bilgileri.

Not: Sürüm desteği Biçimin 038 kadarı Android 8.0'a eklendi kullanabilirsiniz. 038 sürümüne yeni bayt kodları eklendi (invoke-polymorphic ve invoke-custom) ve verileri kullanır.

Not: 037 sürümü için destek biçim Android 7.0 sürümünde eklenmiştir. En çok 037 sürümünden önce Android sürümleri biçimin 035 sürümünü kullandı. Tek 035 ve 037 sürümleri arasındaki fark varsayılan yöntemlerin eklenmesi ve invoke değerinin ayarlanması.

Not: Biçimin önceki sürümlerinden en az birkaçı herkesin kullanımına açık olan yazılım sürümlerinde kullanılmıştır. Örneğin, şu sürümün M3 sürümleri için kullanıldı: 009 Android platformu (Kasım-Aralık 2007), Android M5 sürümleri için 013 sürümü kullanıldı. platformunda (Şubat-Mart 2008). Birçok bakımdan, bu biçimin sürümleri, bu uygulayacaksınız.

ENDIAN_CONSTANT ve REVERSE_ENDIAN_CONSTANT

header_item içine gömülü

ENDIAN_CONSTANT sabiti, dosyanın endianlüğünü kontrol eder. Standart .dex biçimi küçük ölçeklidir, uygulamalar tercih edebilir tek bir kod kullanır. Uygulama bir web sitesi ile endian_tag değeri REVERSE_ENDIAN_CONSTANT olan üstbilgi yerine ENDIAN_CONSTANT yerine dosyanın beklenen formdan bayt olarak değiştirildi.

uint ENDIAN_CONSTANT = 0x12345678;
uint REVERSE_ENDIAN_CONSTANT = 0x78563412;

İNDİS_YOK

class_def_item ve error_info_item öğelerine yerleştirilmiş

NO_INDEX sabiti, dizin değeri yok.

Not: Bu değer, 0, çünkü aslında bu genellikle geçerli bir dizindir.

NO_INDEX için seçilen değer: uleb128p1 kodlamasında tek bir bayt olarak temsil edilebilir.

uint NO_INDEX = 0xffffffff;    // == -1 if treated as a signed int

access_flags tanımları

class_def_item, CODE_field, coding_method ve içine gömülü Sınıf İçi

Bu işaretlerin bit alanları, erişilebilirliği ve sınıfların ve sınıf üyelerinin genel özelliklerini içerir.

Ad Değer Sınıflar için (ve InnerClass ek açıklama) Alanlar için Yöntemler için
ACC_PUBLIC 0x1 public: her yerde görünür public: her yerde görünür public: her yerde görünür
ACC_ÖZEL 0x2 * private: yalnızca tanımlayıcı sınıfa görünür private: yalnızca tanımlayıcı sınıfa görünür private: yalnızca tanımlayıcı sınıfa görünür
KORUMALI 0x4 * protected: paket ve alt sınıflara görünür protected: paket ve alt sınıflara görünür protected: paket ve alt sınıflara görünür
AKK_STATİK 0x8 * static: dış this referansı static: Genelden tanımlayıcı sınıfa static: this bağımsız değişkenini kabul etmez
ACC_FINAL 0x10 final: alt sınıflandırılabilir değil final: inşaattan sonra sabit final: geçersiz kılınamaz
ACC_SYNCHRONIZED 0x20     synchronized: ilişkili kilit otomatik olarak alındı çağrısına dayanıyor.

Not: Bu yalnızca ACC_NATIVE de ayarlandı.

ACC_VOLATILE 0x40   volatile: İleti dizisiyle ilgili yardımcı olacak özel erişim kuralları savunma sayısı  
ACC_kısayolu 0x40     köprü yöntemi, derleyici tarafından tür açısından güvenli bir şekilde otomatik olarak eklenir köprü
ACC_TRANSIENT 0x80   transient: varsayılan serileştirme olarak kaydedilmez  
ACC_VARARGS 0x80     son bağımsız değişken "rest" olarak değerlendirilmelidir derleyiciden bağımsız değişken
ACC_NATIVE 0x100     native: Yerel kodda uygulandı
ACC_INTERFACE 0x200 interface: çarpılabilir soyut sınıf    
ACC_ABSTRACT 0x400 abstract: doğrudan örneklenebilir değil   abstract: bu sınıf tarafından uygulanmaz
ACC_STRICT 0x800     strictfp: Kayan nokta aritmetiği için katı kurallar
ACC_SİNTETİK 0x1.000 kaynak kodunda doğrudan tanımlanmayan kaynak kodunda doğrudan tanımlanmayan kaynak kodunda doğrudan tanımlanmayan
ACC_EK 0x2.000 ek açıklama sınıfı olarak tanımlanmış    
ACC_ENUM 0x4.000 numaralandırılmış bir tür olarak bildirildi numaralandırılmış bir değer olarak tanımlanmış  
(kullanılmıyor) 0x8.000      
ACC_CONSTRUCTOR 0x10.000     oluşturucu yöntem (sınıf veya örnek başlatıcı)
ACC_DECLARED_
SENKRONİZE EDİLDİ
0x20.000     synchronized açıklandı.

Not: Bu işlemin (kendi başına bu işaretin yansıması hariç)

* Yalnızca InnerClass ek açıklama için açık, class_def_item içinde hiçbir zaman bulunmamalıdır.

Değiştirilmiş UTF-8 kodlaması

Eski desteği kolaylaştırmak için .dex biçimi dize verilerini, bundan sonra fiili standart olarak değiştirilmiş UTF-8 biçiminde kodlar MUTF-8 olarak adlandırılır. Bu form, aşağıdakiler hariç standart UTF-8 ile aynıdır:

  • Yalnızca bir, iki ve üç baytlık kodlamalar kullanılır.
  • Kod noktaları şu aralıktadır: U+10000 ... U+10ffff, her biri bir vekil çifti olarak kodlanır. Bu değer, üç baytlık kodlanmış değer olarak temsil edilir.
  • U+0000 kod noktası iki baytlık biçimde kodlanmıştır.
  • Düz boş bir bayt (0 değeri), dizenin diğer diller için de geçerli olmasını sağlar.

Yukarıdaki ilk iki öğe şu şekilde özetlenebilir: MUTF-8 UTF-16 için bir kodlama biçimidir, kodlama biçimini kullanır.

Yukarıdaki son iki öğe, ekleme işlemine aynı anda dizedeki U+0000 kod noktasını ve değiştirmeye devam edersiniz. bunu C stili boş sonlu bir dize olarak gösterir.

Ancak, U+0000 özel kodlaması, normal UTF-8, standart C işlevinin çağrılmasının sonucudur Bir MUTF-8 dizesi çiftindeki strcmp() her zaman eşit olmayan dizelerin karşılaştırmasının doğru şekilde imzalanmış sonucunu belirtir. Sıralama (sadece eşitlik değil) mesele olduğunda, MUTF-8 dizelerini karşılaştırmanın bir yolu, dizelerin kodunu karakter bazında çözmektir. ve kodu çözülmüş değerleri karşılaştırır. (Ancak daha zekice uygulamalar, önemlidir.)

Daha fazla bilgi için The Unicode Standart'ı inceleyin. MUTF-8 aslında görece daha az bilinen kodlamaya daha yakındır. UTF-8'e göre CESU-8 tek başına yeterli değildir.

kodlanmış_değer kodlaması

ek açıklama_öğesi ve kodlanmış_dizi_öğesi içine gömülü

encoded_value, (neredeyse) rastgele hiyerarşik yapılandırılmış verilerdir. Kodlamanın amacı ve kolayca ayrıştırılabilir.

Ad Biçimi Açıklama
(değer_bağımsız değişken << 5) | değer_türü Ubayt hemen sonraki ve son istemcinin türünü gösteren value boyunca isteğe bağlı, açıklayıcı üç bitlik bir bağımsız değişkenle değiştirin. Çeşitli value tanımları için aşağıya bakın. Çoğu durumda, value_arg kodu bayt cinsinden hemen sonraki value (size - 1), ör. 0 şu anlama gelir: değer bir bayt gerektirir ve 7, sekiz bayt; ancak aşağıda belirtildiği gibi istisnalar vardır.
değer ubyte[] değeri, uzunluğu ve yorumlanan değişkeni temsil eden bayt farklı value_type baytlar için farklı olsa da her zaman ufak tefek şeyler. Şu değerler için aşağıdaki çeşitli değer tanımlarını inceleyin: bolca fırsat sunuyor.

Değer biçimleri

Tür Adı value_type value_arg Biçimi value Biçimi Açıklama
DEĞER_BAĞ_DEĞER 0x00 (none; 0 olmalıdır) ubayt[1] imzalı bir baytlık tam sayı değeri
DEĞER_KISA 0x02 beden - 1 (0...1) ubyte[boyut] işaretli iki baytlık tam sayı değeri, imzalı genişletilmiş
DEĞER_DARA 0x03 beden - 1 (0...1) ubyte[boyut] işaretsiz iki baytlık tam sayı değeri, sıfır genişletilmiş
DEĞER_SAYI 0x04 beden - 1 (0...3) ubyte[boyut] işaretli dört baytlık tam sayı değeri, işaretli
DEĞER_UZUN 0x06 beden - 1 (0...7) ubyte[boyut] işaretli sekiz baytlık tam sayı değeri, imzalı genişletilmiş
DEĞER_KAYAN 0x10 beden - 1 (0...3) ubyte[boyut] dört baytlık bit kalıbı, sıfır genişletilmiş sağa ve IEEE754 32 bit kayan nokta değeri olarak yorumlanır
DEĞER_ÇİFT 0x11 beden - 1 (0...7) ubyte[boyut] sekiz baytlık bit kalıbı, sıfır genişletilmiş sağa ve IEEE754 64 bit kayan nokta değeri olarak yorumlanır
DEĞER_YÖNTEM_TÜRÜ 0x15 beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve proto_ids bölümünü temsil eder ve yöntem türü değerini temsil eder
VALUE_METHOD_HANDLE 0x16 beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve method_handles bölümü için geçerlidir ve yöntemin herkese açık kullanıcı adını temsil eder.
DEĞER_STRING 0x17 beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve Dize değerini temsil eden string_ids bölümünü
DEĞER_TÜRÜ 0x18 beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve type_ids bölümü ve yansıtmayı temsil eden tür/sınıf değeri
DEĞER_ALANI 0x19 beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve field_ids bölümü ve yansıtmayı temsil eden alan değeri
DEĞER_YÖNTEM 0x1a beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve method_ids bölümü ve yansıtmayı temsil eden yöntem değeri
DEĞER_DÜNYA 0x1b beden - 1 (0...3) ubyte[boyut] imzasız (sıfır genişletilmiş) dört baytlık tam sayı değeri, bir dizin olarak yorumlanır ve field_ids bölümünü temsil eder ve numaralandırılmış tür sabit
DEĞER_ARRAY 0x1c (none; 0 olmalıdır) kodlanmış_dizi tarafından belirtilen biçimdeki bir değerler dizisi "encoded_array biçimi" bölümüne göz atın. Boyut value öğesinin kodlamada üstü kapalıdır.
DEĞER_AÇIK 0x1 g (none; 0 olmalıdır) kodlanmış_notlama tarafından belirtilen biçimde bir alt not, "encoded_annotation biçimi" bölümüne göz atın. Boyut value öğesinin kodlamada üstü kapalıdır.
DEĞER_NULL 0x1e (none; 0 olmalıdır) (yok) null referans değeri
DEĞER_BOOLE 0x1f boole (0...1) (yok) bir bitlik değer; false ve için 0 true boyunca 1. Bit, burada value_arg

kodlanmış_dizi biçimi

Ad Biçimi Açıklama
beden uleb128 dizideki elemanların sayısı
değerler kodlanmış_değer[boyut] size encoded_value baytlık seri bu bölümde belirtilen biçimde diziler, birleştirilmiş sırayla yüklüyoruz.

kodlanmış_annotasyon biçimi

Ad Biçimi Açıklama
type_idx uleb128 ek açıklama türünü belirtecek. Bu bir sınıf olmalıdır (dizi veya temel öğe değil) türü.
beden uleb128 bu ek açıklamadaki ad-değer eşlemesi sayısı
öğeler ek açıklama_öğesi[boyut] ek açıklamanın öğeleri, doğrudan satır içinde gösterilir ( ofset). Öğeler şuna göre artan düzende sıralanmalıdır: string_id dizini.

ek açıklama_öğesi biçimi

Ad Biçimi Açıklama
ad_idx uleb128 öğe adı; string_ids bölümü. Dize, MemberName için söz dizimini kullanın.
değer kodlanmış değer öğe değeri

Dize söz dizimi

.dex dosyasında, müşterinin bir dizeye işaret eder. Aşağıdaki BNF stili tanımlar bu dizeler için kabul edilebilir söz dizimini belirtir.

BasitAd

SimpleName, diğer kullanıcıların adlarının söz diziminin temelini oluşturur. sahip olmalıyız. .dex biçimi, makul miktarda enlem sağlar buraya (en yaygın kaynak dillerden çok daha fazla) ulaşabilirsiniz. Kısacası, basit bir adı, birkaç küçük ASCII alfabetik karakter veya rakamdan oluşur. ASCII olmayan belirli düşük ASCII sembollerine ve özel karakterler kullanabilirsiniz. 040 sürümünden itibaren biçim, boşluk karakterlerine de izin verir (Unicode Zs kategorisi). Vekil kod noktalarının (U+d800 ... U+dfff aralığında) değildir kendi başına geçerli ad karakterleri olarak kabul edilir, ancak Unicode karakterler üzerinde geçerlidir (nihai SimpleNameChar kuralının bir alternatifi) bulunur ve bu bir dosya MUTF-8'deki vekil kod noktası çiftleri olarak gösterilir. kullanır.

BasitAd
SimpleNameChar (SimpleNameChar)*
SimpleNameChar
'A'... 'Z'
| 'a'... 'z'
| '0'... '9'
| ' ' DEX sürüm 040'tan beri
| '$'
| '-'
| '_'
| U+00a0 DEX sürüm 040'tan beri
| U+00a1... U+1fff
| U+2000... U+200a DEX sürüm 040'tan beri
| U+2010... U+2027
| U+202f DEX sürüm 040'tan beri
| U+2030... U+d7ff
| U+e000... U+ffef
| U+10000... U+10ffff

Üye Adı

Field_id_item ve method_id_item tarafından kullanılır

MemberName, bir sınıf üyesinin adıdır ve ve özel derslere dahil edilir.

MemberName
BasitAd
| '<' BasitAd '>'

Tam Sınıf Adı

FullClassName, aşağıdakileri içeren tam bir sınıf adıdır: isteğe bağlı paket tanımlayıcı ve ardından zorunlu bir ad.

FullClassName
OptionalPackagePrefix BasitAd
OptionalPackagePrefix
(BasitAd '/')*

Tür Tanımlayıcı

type_id_item tarafından kullanılır

TypeDescriptor, şunlar da dahil olmak üzere herhangi bir türün temsilidir: temel öğeler, sınıflar, diziler ve void. Aşağıdaki bilgilere göz atın farklı versiyonların anlamını kastediyoruz.

TypeDescriptor
'V'
| FieldTypeDescriptor
FieldTypeDescriptor
NonArrayFieldTypeDescriptor
| ('[' * 1...255) NonArrayFieldTypeDescriptor
NonArrayFieldTypeDescriptor
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L' Tam Sınıf Adı ';'

ShortyDescriptor (Kısa Açıklayıcı)

proto_id_item tarafından kullanılıyor

ShortyDescriptor, bir yöntemin kısa biçimli temsilidir döndürme ve parametre türlerini içeren prototiptir. çeşitli referans (sınıf veya dizi) türleri arasında fark yoktur. Bunun yerine Tüm referans türleri tek bir 'L' karakteriyle temsil edilir.

ShortyDescriptor
ShortyReturnType (ShortyFieldType)*
ShortyReturnType
'V'
| ShortyFieldType
ShortyFieldType
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L'

TypeDescriptor anlamı

Bu, TypeDescriptor'ın her bir varyantının anlamıdır.

Sözdizimi Anlamı
V void; yalnızca dönüş türleri için geçerlidir
Z boolean
B byte
S short
C char
İ int
J long
C float
D double
Tam/uygun/Ad; fully.qualified.Name sınıfı
[açıklayıcı yinelemeli olarak kullanılabilen descriptor dizisi dizi dizilerinin sayısı, ancak 255'ten fazla dizi olması geçersiz seçin.

Öğeler ve ilgili yapılar

Bu bölümde, söz konusu üst düzey öğelerin her birinin .dex dosyasında görünebilir.

başlık_öğesi

Üstbilgi bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
sihir ubayt[8] = DEX_FILE_MAGIC sihirli değer. Tartışmayı yukarıdaki "DEX_FILE_MAGIC" bölümünde bulabilirsiniz inceleyebilirsiniz.
denetim toplamı Uint dosyanın geri kalanının adler32 sağlama toplamı (yalnızca magic ve bu alan); dosya bozulmasını tespit etmek için kullanılır
signature ubyte[20] Dosyanın geri kalanının SHA-1 imzası (karma) magic, checksum ve bu alan); ikinci el tanımlamak için
dosya_boyutu Uint tüm dosyanın (başlık dahil) bayt cinsinden boyutu
başlık_boyutu uint = 0x70 başlığın (bu bölümün tamamı) bayt cinsinden boyutu. Bu, olmadan en azından geriye dönük/ileri uyumluluk biçimi geçersiz kılınıyor.
endian_tag uint = ENDIAN_CONSTANT endianness etiketi Yukarıdaki "ENDIAN_CONSTANT" başlığı altındaki tartışmaya göz atın ve REVERSE_ENDIAN_CONSTANT" inceleyebilirsiniz.
bağlantı_boyutu Uint bağlantı bölümünün boyutunu veya bu dosya büyük değilse 0 statik olarak bağlantılı
bağlantı_kapalı Uint dosyanın başlangıcından bağlantı bölümüne uzaklık veya link_size == 0 ise 0. Ofset (sıfır değilse) link_data bölümüne belirli bir uzaklık olmalıdır. İlgili içeriği oluşturmak için kullanılan işaret edilen veri biçiminin bu belgede belirtilmemiş olması; bu başlık alanı (ve önceki), çalışma zamanı uygulamalarıdır.
harita_kapalı Uint dosyanın başlangıcından harita öğesine uzaklık. Belirli uzaklıkta kopyasının değeri sıfır olmayan bir değer olmalı, data bölümüne bir uzaklık olmalıdır. ve verilerin "map_list" ile belirtilen biçimde olması gerekir bölümüne göz atın.
dize_kimlikleri_boyutu Uint dize tanımlayıcıları listesindeki dize sayısı
dize_kimlikleri_kapalı Uint dosyanın başlangıcından dize tanımlayıcıları listesine uzaklık veya string_ids_size == 0 ise 0 (kabul edilir ki (tuhaf kenar harfi) ekleyebilirsiniz. Ofset (sıfır değilse) string_ids bölümünün başında olmalıdır.
tür_kimlikleri_boyutu Uint tür tanımlayıcıları listesindeki öğe sayısı, en fazla 65.535
tür_kimlikleri_kapalı Uint dosyanın başlangıcından tür tanımlayıcıları listesine arasındaki uzaklık veya type_ids_size == 0 ise 0 (kabul edilir ki (tuhaf kenar harfi) ekleyebilirsiniz. Ofset (sıfır değilse) type_ids öğesinin başında olmalıdır bölümüne ekleyin.
proto_kimlik_boyutu Uint prototip tanımlayıcılar listesindeki öğe sayısı, en fazla 65.535
proto_kimlikler_kapalı Uint dosyanın başlangıcından prototip tanımlayıcıları listesine arasındaki uzaklık veya proto_ids_size == 0 ise 0 (kabul edilir ki (tuhaf kenar harfi) ekleyebilirsiniz. Ofset (sıfır değilse) proto_ids öğesinin başında olmalıdır bölümüne ekleyin.
alan_kimlikleri_boyutu Uint alan tanımlayıcıları listesindeki öğe sayısı
alan_kimlikleri_kapalı Uint dosyanın başlangıcından alan tanımlayıcıları listesine uzaklık veya field_ids_size == 0 ise 0. Ofset, değeri sıfır olmayan bir değer, field_ids öğesinin başında olmalıdır bölümüne ekleyin.
yöntem_kimlikleri_boyut Uint yöntem tanımlayıcıları listesindeki öğe sayısı
yöntem_kimlikleri_kapalı Uint dosyanın başlangıcından yöntem tanımlayıcıları listesine uzaklık veya method_ids_size == 0 ise 0. Ofset, değeri sıfır olmayan bir değer, method_ids öğesinin başında olmalıdır bölümüne ekleyin.
class_defs_size Uint sınıf tanımları listesindeki öğe sayısı
sınıf_defs_kapalı Uint dosyanın başlangıcından sınıf tanımları listesine uzaklık veya class_defs_size == 0 ise 0 (kabul edilir ki (tuhaf kenar harfi) ekleyebilirsiniz. Ofset (sıfır değilse) class_defs bölümünün başında olmalıdır.
veri_boyutu Uint data bölümünün bayt cinsinden boyutu. Çift sayı olmalıdır sizeof(uint) sayısının katı.
veri_kapalı Uint başlangıcından data bölümü.

harita_listesi

Veri bölümünde görünür

header_item öğesinden referans alındı

Hizalama: 4 bayt

Bu, sıralı olarak dosya içeriğinin tamamının yer aldığı bir listedir. Google header_item ile ilgili biraz fazlalık içeriyor ancak bütün bir süreçte yineleme yapmak için kullanımı kolay bir biçim olarak dosyası olarak kaydedebilirsiniz. Belirli bir tür, haritada en fazla bir kez görünmelidir, ancak izin modu dışındaki sipariş türlerinin biçimin geri kalanından kaynaklanan kısıtlamalar (ör. Önce header bölümü, ardından bir bölüm görüntülenmelidir string_ids bölümü vb.). Ayrıca, harita girişleri ilk ofsete göre sıralanmalıdır ve çakışmamalıdır.

Ad Biçimi Açıklama
beden Uint listenin boyutu, girişlerde
liste harita_öğesi[size] liste öğeleri

harita_öğesi biçimi

Ad Biçimi Açıklama
tür Ushort öğe türü; aşağıdaki tabloya bakın
unused Ushort (kullanılmıyor)
beden Uint belirtilen uzaklıkta bulunacak öğelerin sayısı
telafi etmek Uint dosyanın başlangıcından söz konusu öğelere uzaklık

Kodları yazın

Öğe Türü Sabit Değer Bayt Cinsinden Öğe Boyutu
başlık_öğesi TÜR_BAŞLIK_ITEM 0x0.000 0x70
string_id_item TYPE_STRING_ID_ITEM 0x0.001 0x04
type_id_item [tür_kimliği] TYPE_TYPE_ID_ITEM 0x0002 0x04
proto_id_item TYPE_PROTO_ID_ITEM 0x0003 0x0c
alan_kimliği_öğesi TYPE_FIELD_ID_ITEM 0x0004 0x08
yöntem_kimliği_öğesi TYPE_METHOD_ID_ITEM 0x0005 0x08
class_def_item TYPE_CLASS_DEF_ITEM 0x0006 0x20
site_kimliği_çağrı_öğesi TYPE_CALL_SITE_ID_ITEM 0x0007 0x04
yöntem_handle_item TYPE_METHOD_HANDLE_ITEM 0x0008 0x08
harita_listesi TYPE_MAP_LIST 0x1.000 4+ (öğe.bedeni * 12)
tür listesi TYPE_TYPE_LIST 0x1.001 4+ (öğe.bedeni * 2)
ek açıklama_kümesi_ref_listesi TYPE_ANNOTATION_SET_REF_LIST 0x1.002 4+ (öğe.bedeni * 4)
ek açıklama_kümesi_öğesi TYPE_ANNOTATION_SET_ITEM 0x1.003 4+ (öğe.bedeni * 4)
sınıf_verileri_öğesi TYPE_CLASS_DATA_ITEM 0x2.000 implicit; ayrıştırılmalıdır
code_item [kod_öğesi] TYPE_CODE_ITEM 0x2.001 implicit; ayrıştırılmalıdır
dize_veri_öğesi TYPE_STRING_DATA_ITEM 0x2002 implicit; ayrıştırılmalıdır
hata ayıklama_bilgileri_öğesi TYPE_DEBUG_INFO_ITEM 0x2003 implicit; ayrıştırılmalıdır
ek açıklama_öğesi TYPE_ATTRIBUTE_ITEM 0x2004 implicit; ayrıştırılmalıdır
kodlanmış_dizi_öğesi TÜR_KODLU_ARRAY_ÖĞESİ 0x2.005 implicit; ayrıştırılmalıdır
ek açıklamalar_dizin_öğesi TYPE_OVERS_DIRECTORY_ITEM 0x2006 implicit; ayrıştırılmalıdır
gizliapi_class_data_item TYPE_HIDDENAPI_CLASS_DATA_ITEM 0xF000 implicit; ayrıştırılmalıdır

string_id_item

string_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
dize_verileri_kapalı Uint bu dosyanın dize verilerine göre uzaklığı öğe. Ofset bir konuma olmalıdır data bölümünde, veriler de "string_data_item" ile belirtilen biçim bölümüne göz atın. Ofset için herhangi bir eşleşme gereksinimi yoktur.

dize_veri_öğesi

Veri bölümünde görünür

Hizalama: yok (bayta hizalı)

Ad Biçimi Açıklama
utf16_beden uleb128 UTF-16 kod birimleri halinde ("dize" değeri) uzunluğunu" pek çok sistemde kullanılabilir). Yani bu, problemin kodu çözülmüş dize. (Kodlanan uzunluk, 0 bayt olabilir.)
veri ubyte[] bir dizi MUTF-8 kod birimi (sekizli veya bayt olarak da bilinir) ve ardından bir baytlık değer 0 gelir. Görüntüleyin "MUTF-8 (Değiştirilmiş UTF-8) Kodlaması" ve veri biçimi üzerine tartışmak.

Not: Şunları içeren bir dize kullanılabilir: (kodlanmış biçimi) UTF-16 vekil kod birimleri (yani U+d800 ... U+dfff) anormalliklere kıyasla ayrı ayrı veya kodlamasını UTF-16 olarak değiştirmeyin. Daha üst düzey kullanımlara dizeleri kullanarak bu tür geçersiz kodlamaları reddetmelidir.

type_id_item [tür_kimliği]

type_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
açıklayıcı_idx Uint tanımlayıcıya ait string_ids listesine dizine ekleyin emin olun. Dize, Yukarıda tanımlanan TypeDescriptor.

proto_id_item

proto_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
kısa_idx Uint kısa biçim için string_ids listesine dizine ekle açıklama dizesi kullanabilirsiniz. Dize, ShortyDescriptor için söz dizimi yukarıda tanımlanmıştır ve ilgili olmalıdır: bu öğenin dönüş türü ve parametreleriyle aynıdır.
Return_type_idx Uint dönüş türü için type_ids listesine dizin bu prototipin
parametreler_kapalı Uint dosyanın başlangıcından parametre türleri listesine uzaklık bu prototip için; 0 veya bu prototipte parametreleridir. Sıfır değilse bu ofset data bölümünü içerir ve olması gereken veriler biçimi aşağıda "type_list" tarafından belirtilmektedir. Ayrıca, listede void türüne bir referans olmamalıdır.

alan_kimliği_öğesi

Field_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
class_idx Ushort dizinini, bu tanımlayıcıya ait type_ids listesine ekleyin girin. Bu bir dizi veya temel tür değil, sınıf türü olmalıdır.
type_idx Ushort type_ids listesine ekle bu alan
ad_idx Uint bunun adı için string_ids listesine dizine ekleyin girin. Dize, MemberName'in söz dizimine uygun olmalıdır. tanımlanmıştır.

yöntem_kimliği_öğesi

method_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
class_idx Ushort dizinini, bu tanımlayıcıya ait type_ids listesine ekleyin yöntemidir. Bu değer, temel tür değil, sınıf veya dizi türü olmalıdır.
proto_idx Ushort şunun prototipi için dizine ekle: proto_ids bu yöntem
ad_idx Uint bunun adı için string_ids listesine dizine ekleyin yöntemidir. Dize, MemberName'in söz dizimine uygun olmalıdır. tanımlanmıştır.

class_def_item

class_defs bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
class_idx Uint bu sınıfın type_ids listesine dizine ekleyin. Bu bir dizi veya temel tür değil, sınıf türü olmalıdır.
access_flags Uint sınıfa (public, final, vb.) bakın. "access_flags Tanımlar"a bakın inceleyebilirsiniz.
Superclass_idx Uint üst sınıf için type_ids listesine ekleme veya Bu sınıfta hiç yoksa NO_INDEX sabit değeri üst sınıf (yani, Object gibi bir kök sınıfıdır). Varsa bu bir dizi veya temel tür değil, sınıf türü olmalıdır.
arayüzler_kapalı Uint dosyanın başlangıcından arayüz listesine arasındaki uzaklık veya Yoksa 0. Bu ofset data bölümünde olmalı ve veriler tarafından belirtilen biçimde olmalıdır "type_list" bölümüne göz atın. Listedeki öğelerin her biri bir sınıf türü (dizi veya temel tür değil) olmalıdır ve yineleme olmamalıdır.
kaynak_dosya_kimliğix Uint string_ids listesine ekleyin bu sınıfın (en azından çoğunluğunun) orijinal kaynağını içeren dosya veya NO_INDEX özel değeri kullanılarak bu bilgilerden faydalanabilirsiniz. Herhangi bir yöntemin debug_info_item öğesi bu kaynak dosyayı geçersiz kılabilir ancak çoğu sınıfın tek bir kaynak dosyadan gelecektir.
ek açıklamalar_kapalı Uint dosyanın başlangıcından ek açıklama yapısına uzaklık bu sınıf için veya0 bu sınıfa katılacağım. Sıfır değilse bu ofset data bölümü ve burada olması gereken veriler "annotations_directory_item" ile belirtilen biçim aşağıda, tanımlayıcı olarak bu sınıfı belirten tüm öğelerle birlikte.
sınıf_verileri_kapalı Uint dosyanın başlangıcından ilişkilendirilen bu öğe için sınıf verileri veya sınıf yoksa 0 verileri hakkında daha fazla bilgi edinin. (Bu da böyle olabilir; örneğin, bu sınıf işaretçi bir arayüzdür.) Sıfır değilse, göreli konum data bölümünü içerir ve olması gereken veriler "class_data_item" ile belirtilen biçim tümünü içeren bu sınıfı tanımlayıcı olarak belirten öğe.
statik_değerler_kapalı Uint dosyanın başlangıcından başlangıç listesine doğru uzaklık static alanları için değerleri veya varsa 0 hiçbiri değildir (ve tüm static alanları 0 veya null). Bu ofset, data bölümündeki verileri de "encoded_array_item" ile belirtilen biçim bölümüne göz atın. Boyut dizinin şu sayısından büyük olmamalıdır: static alanları tanımlamak için kullanın ve öğeler static alanı, karşılık gelen field_list. Her bir dizinin türü öğesinin, karşılık gelen alanının belirtilen türüyle eşleşmesi gerekir. Dizide, mevcut öğe sayısından daha az öğe varsa static alanı varsa kalan alanlar başlatılır ve türe uygun 0 veya null ile değiştirin.

site_kimliği_çağrı_öğesi

Call_site_ids bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
site_dışı_çağrı Uint dosyanın başlangıcından site tanımına uzaklık. Ofset veri bölümünde olmalı ve içerdiği veriler Google Ads hesabının "site_öğesini_çağrı" bölümüne göz atın.

site_öğesini_çağrı

Veri bölümünde görünür

Hizalama: yok (bayt hizalı)

çağrı_sitesi_öğesi, öğeleri bağımsız değişkenlere karşılık gelen bir kodlanmış_dizi_öğesidir. bir bootstrap bağlayıcı yöntemiyle sağlanır. İlk üç bağımsız değişken şunlardır:

  1. Önyükleme bağlayıcı yöntemini (VALUE_METHOD_HANDLE) temsil eden yöntem işleyici.
  2. Önyükleme bağlayıcısının çözümlemesi gereken bir yöntem adı (VALUE_STRING).
  3. Çözülecek yöntem adının türüne (VALUE_METHOD_TYPE) karşılık gelen yöntem türü.

Ek bağımsız değişkenler, önyükleme bağlayıcı yöntemine iletilen sabit değerlerdir. Bu bağımsız değişkenler herhangi bir dönüşüm türü olmadan geçirilebilir.

Önyükleme bağlayıcı yöntemini temsil eden yöntem işleyicinin dönüş türü java.lang.invoke.CallSite olmalıdır. İlk üç parametre türü şunlardır:

  1. java.lang.invoke.Lookup
  2. java.lang.String
  3. java.lang.invoke.MethodType

Ek bağımsız değişkenlerin parametre türleri sabit değerlerinden belirlenir.

yöntem_handle_item

method_handles bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
metod_handle_type Ushort yöntem işleyicinin türü; aşağıdaki tabloya bakın
unused Ushort (kullanılmıyor)
alan_veya_yöntem_kimliği Ushort Yöntem işleyici türünün erişimci mi yoksa yöntem çağırıcı mı olduğuna bağlı olarak alan veya yöntem kimliği
unused Ushort (kullanılmıyor)

Yöntem işleyici türü kodları

Sabit Değer Açıklama
YÖNTEM_EL_TÜRÜ_TÜRÜ_STATIC_PUT 0x00 Yöntem işleyici bir statik alan belirleyicidir (erişimci)
YÖNTEM_HANDLE_TYPE_STATIC_GET 0x01 Yöntem işleyici bir statik alan alıcıdır (erişimci)
YÖNTEM_EL_TÜRÜ_TÜRÜ_ÖRNEK_PUT 0x02 Yöntem işleyici bir örnek alanı belirleyici (erişimci)
YÖNTEM_HANDLE_TYPE_ÖRNEK_GETİRME 0x03 Yöntem işleyici bir örnek alanı alıcısıdır (erişimci)
YÖNTEM_HANDLE_TYPE_INVOKE_STATIC 0x04 Yöntem herkese açık kullanıcı adı, statik bir yöntem çağırıcıdır
YÖNTEM_HANDLE_TYPE_INVOKE_ÖRNEĞİ 0x05 Yöntem herkese açık kullanıcı adı, bir örnek yöntemi çağırıcısıdır
YÖNTEM_HANDLE_TYPE_INVOKE_CONSTRUCTOR 0x06 Yöntem herkese açık kullanıcı adı, bir kurucu yöntem çağırıcısıdır
YÖNTEM_HANDLE_TYPE_INVOKE_DIRECT 0x07 Yöntem herkese açık kullanıcı adı bir doğrudan yöntem çağırıcıdır
YÖNTEM_HANDLE_TYPE_INVOKE_INTERFACE 0x08 Yöntem herkese açık kullanıcı adı bir arayüz yöntemi çağırıcısıdır

sınıf_verileri_öğesi

class_def_item öğesinden referans alındı

Veri bölümünde görünür

Hizalama: yok (bayta hizalı)

Ad Biçimi Açıklama
statik_alanlar_boyutu uleb128 bu öğede tanımlanan statik alanların sayısı
ornek_alanları_boyutu uleb128 bu öğede tanımlanan örnek alanlarının sayısı
doğrudan_yöntemler_boyutu uleb128 bu öğede tanımlanan doğrudan yöntemlerin sayısı
sanal_yöntem_boyutu uleb128 bu öğede tanımlanan sanal yöntemlerin sayısı
statik_alanlar kodlanmış alan[statik_alanlar_boyutu] tanımlı statik alanlar, kodlanmıştır. Alanlar şu ölçüte göre sıralanmalıdır: field_idx artan sırada.
ornek_alanları kodlanmış alan[ornek_alanları_boyutu] tanımlanmış örnek alanları, kodlanmıştır. Alanlar şu ölçüte göre sıralanmalıdır: field_idx artan sırada.
doğrudan_yöntemler kodlanmış_yöntem[doğrudan_yöntemler_boyutu] tanımlanan doğrudan (static, private, veya kurucusu) yöntemleridir; kodlanmıştır. Yöntemler şunlara göre sıralanmalıdır: method_idx artan sırada.
sanal_yöntemler kodlanmış_yöntem[virtual_methods_size] tanımlanan sanal (static, private, veya kurucusu) yöntemleridir; kodlanmıştır. Bu liste devralınan öğeleri içermemelidir yöntemleri için geçerli değildir. İlgili içeriği oluşturmak için kullanılan yöntemler method_idx metriğine göre artan düzende sıralanmalıdır. Sanal yöntemin method_idx değeri aynı olmamalıdır yöntem olarak kullanılamaz.

Not: Tüm öğeler field_id ve method_id örnekleri aynı tanımlayıcı sınıfına başvurmalıdır.

kodlanmış alan biçimi

Ad Biçimi Açıklama
alan_kimliği x_fark uleb128 bu kimliğin kimliği için field_ids listesine dizine ekleyin alan (adı ve açıklayıcıyı içerir), fark olarak gösterilir daha önceki bir öğenin dizininden çıkarır. bir listedeki ilk öğe doğrudan temsil edilir.
access_flags uleb128 alana (public, final, vb.) bakın. "access_flags Tanımlar"a bakın inceleyebilirsiniz.

coding_method biçimi

Ad Biçimi Açıklama
yöntem_kimliği x_fark uleb128 bu kimliğin kimliği için method_ids listesine dizine ekleyin yöntem (adı ve açıklayıcıyı içerir), farklılık olarak gösterilir daha önceki bir öğenin dizininden çıkarır. bir listedeki ilk öğe doğrudan temsil edilir.
access_flags uleb128 yöntemin (public, final, vb.) bakın. "access_flags Tanımlar"a bakın inceleyebilirsiniz.
kod_kapalı uleb128 dosyanın başlangıcından kod yapısına doğru uzaklık yöntemi veya bu yöntem abstract ise 0 veya native. Uzaklık, data bölümü. Verilerin biçimi "code_item" bölümüne göz atın.

tür listesi

class_def_item ve proto_id_item'den referans alındı

Veri bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
beden Uint listenin boyutu, girişlerde
liste type_item[size] liste öğeleri

type_item biçimi

Ad Biçimi Açıklama
type_idx Ushort type_ids listesine dizine ekle

code_item [kod_öğesi]

coding_method'ten referans alındı

Veri bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
tescil_beden Ushort bu kodun kullandığı kayıtların sayısı
ins_size Ushort yönteme gelen bağımsız değişkenlerin kelime sayısı kod şunun için:
dış_boyut Ushort bu komutun gerektirdiği, giden bağımsız değişken alanındaki kelime sayısı yöntem çağrısı kodu
deneme_boyutu Ushort try_item sayısı. Sıfır değilse bunlar,tries Bu örnekte insns.
hata ayıklama_bilgileri_kapalı Uint dosyanın başlangıcından hata ayıklama bilgisine (satır numaraları + yerel değişken bilgisi) dizisi, aksi takdirde 0 yani hiçbir bilgi yoktur. Ofset (sıfır değilse) data bölümündeki bir konuma. Biçim veriler "debug_info_item" ile belirtilmiş bölümüne göz atın.
insns_size Uint talimatlar listesinin boyutu, 16 bit kod birimleri
Insns ushort[insns_size] gerçek bayt kodu dizisidir. Kodun insns biçimi dizi, tamamlayıcı belge tarafından belirtilir Dalvik bayt kodu. Not ushort dizisi olarak tanımlansa da dört baytlık hizalamayı tercih eden bazı dahili yapılardır. Ayrıca, bir endian-swapped dosyada olursa, değiştirme yalnızca bağımsız ushort örneklerinde yapılır ve dahili yapılara sahip.
padding ushort (isteğe bağlı) = 0 tries ile dört bayt hizalı hale getirmek için iki baytlık dolgu. Bu öğe yalnızca tries_size değeri sıfır olmayan bir değer olduğunda bulunur ve insns_size tek.
dener try_item[tries_size] (isteğe bağlı) kod istisnalarının nerede yakalandığını gösteren dizi fikir edinmiş oldunuz. Dizideki öğeler çakışmamalıdır düşükten yükseğe doğru sıralayın. Bu öğe yalnızca tries_size sıfır dışındaysa mevcut olur.
işleyiciler coding_catch_handler_list (isteğe bağlı) Yakalama türleri ve ilişkili listelerin listesini temsil eden bayt için geçerli değildir. Her try_item, bayt bazında bir ofsete sahiptir yapıya dahil ediyorum. Bu öğe yalnızca tries_size sıfır olmayan bir değerdir.

dene_öğesi biçimi

Ad Biçimi Açıklama
başlangıç_addr Uint bu girişin kapsadığı kod bloğunun başlangıç adresi. Adres sayısı, ilk kapsanan ilk bölümün başına kadar 16 bitlik kod birimi sayısıdır teşekkür ederiz.
insn_count Ushort bu girişin kapsadığı 16 bit kod biriminin sayısı. Son kod dahil edilen birim (dahil) start_addr + insn_count - 1.
işleyici_kapalı Ushort başlangıcından itibaren bayt cinsinden ofset encoded_catch_hander_list - Bu giriş için encoded_catch_handler. Bu bir encoded_catch_handler başına uzaklık.

kodlanmış_yakalama_işleyici_liste biçimi

Ad Biçimi Açıklama
beden uleb128 bu listenin boyutu girişlerde
liste kodlanmış_yakalama_işleyici[işleyici_boyutu] doğrudan temsil edilen gerçek işleyici listesi listesi (ofset olarak değil), ve sıralı olarak birleştiriliyor.

kodlanmış_yakalama_işleyici biçimi

Ad Biçimi Açıklama
beden sleb128 sayısı. Olumlu değilse bu yakalama türlerinin sayısını negatife çevirir ve her şeyi yakalayan bir düğme kullanır. Örneğin: size/0 olduğu, ancak açıkça yazılmış yakalamaların olmadığı anlamına gelir. 2 sayısının size olması, açıkça iki yakalamanın en iyi yolu. Ayrıca size/-1 yazma ile birlikte tümünü yakalama öğesinin bulunduğu anlamına gelir.
işleyiciler kodlanmış_tür_addr_eşi[Mutlak(boyut)] yakalanan her biri için bir adet olmak üzere abs(size) kodlanmış öğenin akışı türünü belirtmelisiniz.
tümünü_yala uleb128 (isteğe bağlı) bayt kodu adresidir. Bu öğe yalnızca size pozitifse mevcut olur.

coding_type_addr_pair biçimi

Ad Biçimi Açıklama
type_idx uleb128 type_ids listesine eklemek için yakalamak için istisna
adr uleb128 ilişkili istisna işleyicinin bayt kodu adresi

hata ayıklama_bilgileri_öğesi

code_item parametresinden referans alındı

Veri bölümünde görünür

Hizalama: yok (bayta hizalı)

Her debug_info_item, DWARF3'ten esinlenen bayt kodlu bir yorumlandığında konumlar için çeşitli değerler yayan bir sorguya ait yerel değişken bilgilerini de code_item. Dizi, değişken uzunlukta bir karakterle başlıyor başlığı (uzunluğu yöntem sayısına bağlıdır) parametreleri), ardından durum makinesi bayt kodları gelir ve DBG_END_SEQUENCE baytlık boyuta sahip.

Durum makinesi beş kayıttan oluşur. İlgili içeriği oluşturmak için kullanılan address kaydı, 16 bit kod birimlerinde ilişkili insns_item. İlgili içeriği oluşturmak için kullanılan address kaydı, her ayın başında 0 itibarıyla başlayacak debug_info dizisi ve yalnızca monoton olarak artmalıdır. line kaydı, hangi kaynak satır numarasını temsil eder? tarafından yayınlanan sonraki konumlar tablo girişiyle ilişkilendirilmelidir kontrol etmeye başladım. Sıra başlığında başlatılır ve pozitif veya negatif yönlerdeki değişimdir, ancak hiçbir zaman 1 source_file kaydı, kaynak dosyasını seçin. Başlatıldığı zaman: class_def_item içindeki source_file_idx değeridir. Diğer iki değişken prologue_end ve epilogue_begin, boole flag'leridir (ilk kez false), bu değer bir sonraki konumun yayınlanıp yayınlanmadığını yöntemin başlangıcı veya son sözü olarak kabul edilmelidir. Durum makinesi aynı zamanda, kullanılan son yerel değişkenin adını ve türünü de izlemelidir. DBG_RESTART_LOCAL kodu için tüm kayıtları gösterir.

Başlık aşağıdaki gibidir:

Ad Biçimi Açıklama
satır_başlangıç uleb128 durum makinesinin line kaydı için başlangıç değeri. Gerçek bir pozisyon girişini temsil etmiyor.
parametre_boyutu uleb128 kodlanan parametre adlarının sayısı. Projede örnek yönteminin this hariç olmak üzere yöntem parametresi başına bir belirtin.
parametre_adları uleb128p1[parametre_boyutu] yöntem parametresi adının dize dizini. Kodlanmış değer: NO_INDEX, ad olmadığını gösteriyor özelliği ilişkilendirilmiş parametre için kullanılabilir. Tür tanımlayıcısı yöntem tanımlayıcısı ve imzadan kaynaklanır.

Bayt kodu değerleri aşağıdaki gibidir:

Ad Değer Biçim Argümanlar Açıklama
DBG_END_SEQUENCE (DBG_END_SEQUENCE) 0x00 (yok) code_item için hata ayıklama bilgisi dizisini sonlandırır
DBG_ADVANCE_PC 0x01 uleb128 addr_diff addr_diff: adres kaydına eklenecek tutar konum girişi yapmadan adres kaydını ilerletir
DBG_ADVANCE_LINE 0x02 sleb128 line_diff line_diff: satır kaydı değiştirme miktarı pozisyon girişi yapmadan satır kaydını ilerletir
DBG_START_LOCAL 0x03 uleb128 sicil_numarası
uleb128p1 name_idx
uleb128p1 type_idx
register_num: yerel ayarı içeren kayıt
name_idx:
adının dize dizini type_idx: türün dizinini yazın
mevcut adreste yerel bir değişken ekler. İkisinden biri name_idx veya type_idx olabilir NO_INDEX (değerin bilinmediğini) belirtir.
DBG_START_LOCAL_EXTENDED 0x04 uleb128 sicil_numarası
uleb128p1 name_idx
uleb128p1 type_idx
uleb128p1 sig_idx
register_num: yerel ayarı içeren kayıt
name_idx:
adının dize dizini type_idx: türün dizinini türleyin
sig_idx: imza türünün dize dizini
mevcut adreste tür imzası olan bir yerel gösterir. name_idx, type_idx veya sig_idx, NO_INDEX olabilir bilinmediğini belirtir. (sig_idx Ancak -1, aynı veriler daha fazla gösterilebilir. DBG_START_LOCAL işlem kodunu verimli bir şekilde kullanarak.)

Not: Tartışmayı şurada görebilirsiniz: "dalvik.annotation.Signature" aşağıdaki uyarıları inceleyin bazı işaretler vardır.

DBG_END_LOCAL 0x05 uleb128 register_num register_num: yerel alan içeren kayıt şu anda yayında olan bir yerel değişkeni şu anda kapsam dışında olarak işaretler adres
DBG_RESTART_LOCAL 0x06 uleb128 register_num register_num: Yeniden başlatmak için kaydolun mevcut adrese bir yerel değişken yeniden eklenir. Ad ve tür, belirtilen bölgede yayında olan son yerel bilgiyle aynıdır. kaydolun.
DBG_SET_PROLOGUE_END 0x07 (yok) prologue_end durum makine kaydını ayarlar. Bu, eklenen bir sonraki konum girişinin Bu bölüm, yöntem açıklamasının sonu olarak düşünülebilir; bir yöntem ayrılma noktası) gösterir. prologue_end kaydı herhangi bir özel (>= 0x0a) işlem kodu tarafından temizlendi.
DBG_SET_EPILOGUE_BEGIN 0x08 (yok) epilogue_begin durum makine kaydını ayarlar. Bu, eklenen bir sonraki konum girişinin yöntemin başlangıcı olarak düşünülebilir (uygun bir yer yöntemini kullanmayı deneyin). epilogue_begin kaydı, herhangi bir özel (>= 0x0a) işlem kodu.
DBG_SET_FILE 0x09 uleb128p1 name_idx name_idx: kaynak dosya adının dize dizini; Bilinmeyense NO_INDEX sonraki tüm satır numarası girişlerinin buna başvuruda bulunduğunu gösterir kaynak dosya adı, code_item.
Özel İşlem Kodları 0x0a...0xff (yok) line ve address kayıtlarında ilerler. bir konum girişi yayınlar, prologue_end ve epilogue_begin. Açıklama için aşağıya bakın.

Özel işlem kodları

0x0a ile 0xff arasında değerlere sahip işlemler (dahil) hem line hem de address öğesini taşıyın küçük bir miktarda kaydedilir ve ardından yeni bir konum tablosu girişi yayınlar. Artış formülü aşağıdaki gibidir:

DBG_FIRST_SPECIAL = 0x0a  // the smallest special opcode
DBG_LINE_BASE   = -4      // the smallest line number increment
DBG_LINE_RANGE  = 15      // the number of line increments represented

adjusted_opcode = opcode - DBG_FIRST_SPECIAL

line += DBG_LINE_BASE + (adjusted_opcode % DBG_LINE_RANGE)
address += (adjusted_opcode / DBG_LINE_RANGE)

ek açıklamalar_dizin_öğesi

class_def_item öğesinden referans alındı

Veri bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
sınıf_annotasyonları_kapalı Uint dosyanın başlangıcından doğrudan oluşturulan ek açıklamalara sınıfın üzerine veya sınıfta doğrudan ek açıklama yoksa 0. Sıfır değilse, göreli konum data bölümü. Verilerin biçimi belirtilir "annotation_set_item" tarafından bölümüne göz atın.
alanlar_boyutu Uint bu öğe tarafından ek açıklama eklenen alanların sayısı
ek açıklamalı_yöntem_boyutu Uint bu öğe tarafından açıklama eklenen yöntemlerin sayısı
ek açıklamalı_parametre_boyutu Uint bu öğe tarafından açıklama eklenen yöntem parametresi listelerinin sayısı
alan_ek açıklamaları Field_annotation[fields_size] (isteğe bağlı) ilişkili alan ek açıklamalarının listesidir. Liste öğeleri field_idx ölçütüne göre artan düzende sıralanır.
yöntem_ek açıklamaları method_annotation[methods_size] (isteğe bağlı) listeleyen ek açıklamaları görebilirsiniz. Liste öğeleri method_idx ölçütüne göre artan düzende sıralanır.
parametre_ek açıklamaları parametre_annotation[parameters_size] (isteğe bağlı) ilişkili yöntem parametresi ek açıklamalarının listesi. The element of the liste, method_idx ölçütüne göre artan düzende sıralanmalıdır.

Not: Tüm öğeler field_id ve method_id örnekleri aynı tanımlayıcı sınıfına başvurmalıdır.

alan_notlama biçimi

Ad Biçimi Açıklama
alanı_idx Uint kimliği için field_ids listesine dizine ekleyin açıklama eklenen alan
ek açıklamalar_kapalı Uint dosyanın başlangıcından ek açıklama listesine uzaklık girin. Göreli konum, data içindeki bir konuma olmalıdır bölümüne ekleyin. Verilerin biçimi "annotation_set_item" bölümüne göz atın.

yöntem_ek açıklama biçimi

Ad Biçimi Açıklama
yöntem_idx Uint kimliği için method_ids listesine dizine ekleyin not eklenmiş yöntem
ek açıklamalar_kapalı Uint dosyanın başlangıcından ek açıklama listesine uzaklık yöntem. Uzaklık, data bölümü. Verilerin biçimi "annotation_set_item" bölümüne göz atın.

parametre_ek açıklama biçimi

Ad Biçimi Açıklama
yöntem_idx Uint kimliği için method_ids listesine dizine ekleyin yöntemleri için ek açıklama
ek açıklamalar_kapalı Uint dosyanın başlangıcından ek açıklama listesine uzaklık yöntem parametreleridir. Uzaklık, data bölümü. Verilerin biçimi "annotation_set_ref_list" bölümüne göz atın.

ek açıklama_kümesi_ref_listesi

parametre_annotations_item parametresinden referans alındı

Veri bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
beden Uint listenin boyutu, girişlerde
liste ek açıklama_seti_ref_öğesi[boyut] liste öğeleri

ek açıklama_seti_ref_öğesi biçimi

Ad Biçimi Açıklama
ek açıklamalar_kapalı Uint dosyanın başlangıcından referans verilen ek açıklama kümesine uzaklık veya bu öğe için ek açıklama yoksa 0. Sıfır değilse, göreli konum data içindeki bir konumda olmalıdır bölümüne ekleyin. Verilerin biçimi "annotation_set_item" bölümüne göz atın.

ek açıklama_kümesi_öğesi

Ek açıklamalar_dizin_öğesi, alan_annotations_öğesi, method_annotations_item ve ek açıklama_seti_ref_öğesi

Veri bölümünde görünür

Hizalama: 4 bayt

Ad Biçimi Açıklama
beden Uint girişlerde, kümenin boyutu
giriş ek açıklama_kapalı_öğesi[size] alt kümesidir. Öğeler artan düzende sıralanmalıdır. type_idx tarafından.

ek açıklama_kapalı_öğe biçimi

Ad Biçimi Açıklama
ek açıklama_kapalı Uint dosyanın başlangıcından ek açıklamaya uzaklık. Göreli konum, data bölümündeki bir konuma olmalıdır. ve o konumdaki verilerin biçimi "annotation_item" bölümüne göz atın.

ek açıklama_öğesi

ek açıklama_set_öğesinden referans alındı

Veri bölümünde görünür

Hizalama: yok (bayta hizalı)

Ad Biçimi Açıklama
görünürlük Ubayt bu ek açıklamanın amaçlanan görünürlüğü (aşağıya bakın)
ek açıklama kodlanmış_notlama kodlanan ek açıklama içerikleri, "encoded_annotation biçimi" altında "encoded_value kodlama" bölümünü ziyaret edin.

Görünürlük değerleri

Bunlar, visibility alanı için geçerli seçeneklerdir annotation_item:

Ad Değer Açıklama
VISIBILITY_BUILITY 0x00 yalnızca derleme sırasında (ör. derleme sırasında) görülebilmesi amaçlanır veya başka bir kod)
VISIBILITY_ÇALIŞMA SAATİ 0x01 çalışma zamanında görünür olması amaçlanmıştır
VISIBILITY_SİSTEM 0x02 yalnızca temel sistem tarafından çalışma zamanında görünür olması amaçlanır (normal kullanıcı koduna değil)

kodlanmış_dizi_öğesi

class_def_item öğesinden referans alındı

Veri bölümünde görünür

Hizalama: yok (bayta hizalı)

Ad Biçimi Açıklama
değer kodlanmış_dizi belirtilen biçimde, kodlanmış dizi değerini temsil eden bayt "encoded_array Biçimi"ne göre "encoded_value" altında Kodlama" bölümünü ziyaret edin.

gizliapi_class_data_item

Bu bölümde, her bir sınıf tarafından kullanılan kısıtlanmış arayüzlerle ilgili veriler yer alır.

Not: Gizli API özelliği Android 10.0'da kullanıma sunuldu. ve yalnızca başlatma sınıfı yolundaki sınıfların DEX dosyaları için geçerlidir. Aşağıda açıklanan işaret listesi gelecekteki sürümlerde genişletilebilir. kullanıma sunuyoruz. Daha fazla bilgi için bkz. SDK dışı arayüzlerle ilgili kısıtlamalar hakkında daha fazla bilgi edinin.

Ad Biçimi Açıklama
beden Uint bölümün toplam boyutu
ofsetler uint[] class_idx tarafından dizine eklenen ofset dizisi. class_idx dizinindeki sıfır dizi girişi, ya bu class_idx veya tüm gizli API için veri yok olduğunu unutmayın. Aksi takdirde, dizi girişi sıfır değildir ve bir dizi gizli API işaretiyle ilgili bölümün başlangıcı bu class_idx için.
bayraklar uleb128[] her sınıf için gizli API işareti dizisi birleştirilmiştir. Olası işaret değerleri aşağıdaki tabloda açıklanmıştır. İşaretler, alanlar ve yöntemler ile aynı sırada kodlanır. kodlanmıştır.

Kısıtlama işareti türleri:

Ad Değer Açıklama
izin verilenler listesine eklemek 0 Serbestçe kullanılabilen ve Google Ad Manager'ın resmi olarak belgelenen Android çerçevesi Paket Dizini.
gri liste 1 Uygulamanın hedef API düzeyi.
kara listeye al 2 Uygulamanın hedef API düzeyi. Bu arayüzlerden birine erişmek çalışma zamanı hatası.
gri liste‐max‐o 3 Android 8.x ve önceki sürümlerde kullanılabilen SDK olmayan arayüzler kısıtlamalara tabi değildir.
gri liste‐max‐p 4 Android 9.x için kullanılabilen SDK olmayan arayüzler kısıtlamalara tabi değildir.
gri liste‐max‐q 5 Android 10.x için kullanılabilen SDK olmayan arayüzler kısıtlamalara tabi değildir.
gri liste‐maks‐r 6 Android 11.x için kullanılabilen SDK olmayan arayüzler kısıtlamalara tabi değildir.

Sistem ek açıklamaları

Sistem notları, yansıtıcı reklam öğelerinin çeşitli bölümlerini temsil etmek için (ve yöntemler ve alanlar hakkındaki bilgiler). Bu bilgiler, Genellikle yalnızca istemci (sistem dışı) kodu tarafından dolaylı olarak erişilir.

Sistem ek açıklamaları, .dex dosyalarında şu şekilde temsil edilir: görünürlük ayarı VISIBILITY_SYSTEM olarak ayarlanmış ek açıklamalar.

dalvik.annotation.DescriptionDefault

Ek açıklama arayüzlerindeki yöntemlerde görünür

Her birine bir AnnotationDefault ek açıklaması varsayılan bağlamaları belirtmek isteyen ek açıklama arayüzü.

Ad Biçimi Açıklama
değer Ek Açıklama bu ek açıklama için varsayılan bağlamalar, bir ek açıklama olarak gösterilir seçilebilir. Ek açıklama, notasyon; adların varsayılan değerleri yoktur.

dalvik.annotation.EnclosingClass

Göründüğü sınıflar

Her sınıfa bir EnclosingClass ek açıklaması eklenir kendi başına başka bir sınıfın üyesi olarak tanımlanır veya anonim ancak yöntem gövdesinde tanımlanmamış (ör. sentetik bir iç sınıf). Bu ek açıklamaya sahip her sınıfın bir InnerClass ek açıklaması. Ayrıca, bir sınıfta hem EnclosingClass hem de EnclosingMethod ek açıklaması.

Ad Biçimi Açıklama
değer Sınıf bu sınıfı sözlük açısından en yakın şekilde düzenleyen sınıf

dalvik.annotation.EnclosingMethod

Göründüğü sınıflar

Her sınıfa bir EnclosingMethod ek açıklaması eklenir reklam öğesidir. Buna sahip her sınıf ek açıklamanın da bir InnerClass ek açıklaması olmalıdır. Ayrıca, bir sınıfta hem EnclosingClass öğesi bulunamaz ve EnclosingMethod ek açıklaması da yer alır.

Ad Biçimi Açıklama
değer Yöntem bu sınıfı sözlük açısından en yakın şekilde kapsayan yöntem

dalvik.annotation.InnerClass

Göründüğü sınıflar

Her sınıfa bir InnerClass ek açıklaması eklenir Bunlar, başka bir sınıfın tanımının sözlüksel kapsamında tanımlanır. Bu ek açıklamaya sahip olan sınıflar ayrıca bir ya EnclosingClass ek açıklaması veya bir EnclosingMethod ek açıklaması.

Ad Biçimi Açıklama
ad Dize bu sınıfın orijinal olarak beyan edilen basit adı (herhangi bir paket öneki). Bu sınıf anonimse adı null
erişim İşaretleri int sınıfın orijinal olarak beyan edilen erişim işaretleri (farklılık gösterebilir) ve yürütme aşamaları arasındaki uyuşmazlık nedeniyle modelleri (kaynak dil ve hedef sanal makine)

dalvik.annotation.MemberClasses

Göründüğü sınıflar

Her sınıfa bir MemberClasses ek açıklaması eklenir izin verir. (Üye sınıfı doğrudan bir iç sınıftır içerir.)

Ad Biçimi Açıklama
değer Sınıf[] üye sınıflarının dizisi

dalvik.annotation.MethodParameters

Yöntemlerde görünür

Not: Bu ek açıklama, Android'den sonra eklenmiştir. 7.1. Bu özelliğin önceki Android sürümlerindeki varlığı yoksayılır.

MethodParameters ek açıklaması isteğe bağlıdır ve şu amaçlarla kullanılabilir: parametre adları ve değiştiriciler gibi parametre meta verileri sağlar.

Bu ek açıklama, parametresi meta verileri çalışma zamanında gerekli değildir. java.lang.reflect.Parameter.isNamePresent(), kontrol etmek için kullanılabilir bir parametre için meta verinin mevcut olup olmadığı ve ilişkili yansıma java.lang.reflect.Parameter.getName() gibi yöntemlerin düşmesi bilgi yoksa çalışma zamanında varsayılan davranışa geri döner.

Derleyiciler, parametre meta verileri eklenirken şu bilgileri de içermelidir: parametre meta verileri olduğundan, numaralandırmalar gibi oluşturulmuş sınıflara bir parametrenin sentetik veya zorunlu olup olmadığını içerir.

MethodParameters ek açıklaması yalnızca tek bir yöntemi açıklar parametreleridir. Bu nedenle, derleyiciler ek açıklamayı tamamen çıkarabilir Örneğin, kod boyutu amacıyla parametre içermeyen kurucular ve yöntemler için çalışma zamanı verimliliğini artırır.

Aşağıda belgelenen diziler, Yöntemle ilişkilendirilmiş method_id_item dex yapısı, aksi takdirde şurada bir java.lang.reflect.MalformedParametersException atılacak: belirler.

Yani: method_id_item.proto_idx -> proto_id_item.parameters_off -> type_list.size, names().length ile aynı ve accessFlags().length.

Çünkü MethodParameters tüm resmi yöntemleri açıklamıştır kaynak kodunda açıkça veya dolaylı olarak belirtilmeyenler dahil olmak üzere, dizilerin boyutu, İmza veya diğer meta verilerden farklı olabilir yalnızca kaynakta belirtilen açık parametrelere dayalı bilgiler girin. MethodParameters ayrıca gerçek yöntemde bulunmayan ek açıklama alıcı parametrelerini yazın imzası var.

Ad Biçimi Açıklama
isimler String[] İlişkilendirilmiş yöntem için biçimsel parametrelerinin adları. Dizi boş olmamalıdır, ancak resmi parametre yoksa boş olmalıdır. A değeri söz konusu dizine sahip biçimsel parametrenin adı yoksa dizi boş olmalıdır.
. Parametre adı dizeleri boşsa veya '.', ';', '[' içeriyorsa veya "/" ardından a java.lang.reflect.MalformedParametersException şu saatte atılacak: belirler.
erişim İşaretleri int[] İlişkili yöntem için biçimsel parametrelerin erişim işaretleri. İlgili içeriği oluşturmak için kullanılan dizi boş olmamalıdır, ancak resmi parametre yoksa boş olmalıdır.
. Değer, aşağıdaki değerlere sahip bir bit maskesidir:
  • 0x0010 : final, parametre nihai olarak bildirildi
  • 0x1000 : yapay, parametre derleyici tarafından sunulmuştur
  • 0x8000 : Zorunlu, parametre yapaydır, ancak aynı zamanda dil tarafından da ima edilmektedir spesifikasyon
ziyaret edin. Bu kümenin dışında herhangi bir bit ayarlanmışsa Çalışma zamanında java.lang.reflect.MalformedParametersException atılacak.

dalvik.annotation.İmza

Sınıflarda, alanlarda ve yöntemlerde görünür

Her sınıfa bir Signature ek açıklaması eklenir. alan veya yöntem olarak tanımlanır ve bu şekilde bir type_id_item ile temsil edilebilir olandan farklı olacak şekilde ayarlayın. İlgili içeriği oluşturmak için kullanılan .dex biçimi, imza biçimini tanımlamaz; o yalnızca kullanıcının imzalarını başarılı bir şekilde uygulanması için gereken tüm özellikler anlambilim. Bu nedenle, imzalar genellikle ayrıştırılmaz (veya doğrulanmaz) elde edebilirsiniz. İmzalar çok kolay daha yüksek düzeydeki API'lere ve araçlara (hata ayıklayıcıları gibi) izin verilir. bu nedenle imzanın sözleşme imzalanmaması için geçerli imzaların alınması, güvenlik önlemleri ve karşılaşma olasılığına karşı kendini geçersiz imza.

İmza dizelerinde çok sayıda yinelenen içerik olma eğiliminde olduğundan, bir Signature ek açıklama, bir dizi yinelenen öğelerin doğal olarak aynı anlama geldiği dizeler imzadır ve imza, bu verilerin birleştirilmesi dizideki tüm dizeleri içerir. Verinin nasıl çekileceği konusunda bir imzayı farklı dizelere ayırmanızı sağlar; duruma göre .dex dosyalarını oluşturan araçlar.

Ad Biçimi Açıklama
değer String[] imzasını içeren bir dize dizisi olarak birleştirilmesinin

dalvik.annotation.Throws

Yöntemlerde görünür

Bu sorguda belirtilen her yönteme bir Throws ek açıklaması bir veya daha fazla istisna türünü atlattığını bildirmiştiniz.

Ad Biçimi Açıklama
değer Sınıf[] istisna türleri dizisinden