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 |
---|---|---|---|
00 | 0 | 0 | -1 |
01 | 1 | 1 | 0 |
7f | -1 | 127) | 126 |
80 7f | -128 | 16256 | 16255 |
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_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ç) |
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
|
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:
- Önyükleme bağlayıcı yöntemini (VALUE_METHOD_HANDLE) temsil eden yöntem işleyici.
- Önyükleme bağlayıcısının çözümlemesi gereken bir yöntem adı (VALUE_STRING).
- Çö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:
java.lang.invoke.Lookup
java.lang.String
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ıtname_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ıtname_idx : adının dize dizini type_idx : türün dizinini türleyinsig_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:
" |
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:
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 |