SORU
29 HAZİRAN 2011, ÇARŞAMBA


Nasıl android kaynakları ve kaynakların KİMLİĞİ iş arasındaki eşleme mu?

Android sadece doğru kaynağı bulmak için büyülü bir şeydiR. id.XXX.

Kaynaklar ikili biçime derlenmiş AFAIK, bu nasıl eşleştirme mantığı kaputun altında çalışıyor?

Belkibu gibi çalışır:

Örneğin, içindelayout1.xmlvar:

<Button android:id="@ id/button1" >

ve AAPT, r.java bu oluşturur:

public static final int button1=0x7f05000b;

O zaman*.muayenegenrated,@ id button1/ile substituded ile "0x7f05000b".

Dediğimiz zaman, böylece:

findViewById(R.id.button1);

KİMLİĞİ 0x7f05000b gibi bir dizi olmasına rağmen hala KİMLİĞİ üzerinde temel arama yap, biz aslında.

Teşekkürler!

EKLEYİN

Gerçekten bilmek istiyorum, kaynak kimliği tamsayı kaynak içerik ayrıştırılır nasıl nedir? Diğer bir deyişle, nasıl Android çalışma zamanı tek ipucu olarak kaynak kodu olan kaynak içeriği bulmak mı?

Örneğin, nasıl drawable resmi bir kaynak kimliği ile bulundu? Ya da nasıl bir dize değeri kaynak kimliği bulundu.

CEVAP
11 Temmuz 2011, PAZARTESİ


Oluşturma zaman, aapt aracı tanımladığınız kaynakları (ama dosyaları ayrı dosyalar apaçık tanımlar) tüm toplar ve onlara kaynak Kimliği atar.

Kaynak kodu şeklinde 32 bit bir sayıdır: PPTTNNNN. PP kaynak paketi; TT kaynak türü; NNNN bu tür bir kaynağın adıdır. Uygulamalar kaynaklar için, PP hep 0x7f.

TT ve NNNN değerler tarafından atanan aapt keyfi-temel olarak, her yeni tür bir sonraki kullanılabilir numara atanır ve kullanılan (başlangıç, 1); Aynı şekilde, her yeni adı yazın, bir sonraki kullanılabilir numara atanır ve kullanılan (başlangıç 1).

Eğer öyleyse bu kaynak dosyaları bu sırada aapt tarafından ele olursak:

layout/main.xml
drawable/icon.xml
layout/listitem.xml

Gördüğümüz ilk türüdür "" böylece TT verilir == 1. düzen Bu tür altında ilk ismi "" böylece NNNN verilir == 1. Ana Son kaynak KİMLİĞİ 0x7f010001.

Gelecek görüyoruz "drawable TT verilen" = = 2. Bu tür için ilk adım "" böylece NNNN alır == 1. simge Son kaynak KİMLİĞİ 0x7f020001.

Biz başka bir "düzen" = = 1 olarak önce TT var. bakın son Bu yeni isim "gelecek değeri NNNN alır" = = 2. öğesini vardır Son kaynak KİMLİĞİ 0x7f010002.

Varsayılan olarak aapt bu tanımlayıcılar aynı yapılar arasında tutmak için hiçbir girişimde bulunmaz unutmayın. Her zaman kaynaklarını değiştirmek, yeni tanımlayıcılar alabilirsiniz. Her zaman onlar inşa edilir, yeni bir R.java kodunuzu doğru değerler alır böylece geçerli tanımlayıcıları ile oluşturulur. Bu nedenle, hiçbir yerde farklı boyunca kullanılabilir kalıcı kaynak tanımlayıcıları sizin app inşa gerekir.

Kaynaklar derlenmiş ve tanımlayıcıları atanmış bir kez oluşturur R.java kaynak dosyası ve bir ikili dosya "kaynaklar denir.aapt kodu"kaynak adları, tanımlayıcılar, ve değerleri ayrı dosya geldiğini, onların değeri, bu dosyanın yolu. (kaynak içeren arsc muayene), bir biçimde, kolayca ve zamanında cihazda ayrıştırılır mmapped.

Kaynakların bir özeti alabilirsiniz.arsc komutu ile bir muayene dosyası "aapt dökümü kaynakları <yolu-muayene>".

İkili kaynak tablo biçimi kaynak veri yapıları burada: başlık dosyasında belgelenmiştir

https://github.com/android/platform_frameworks_base/blob/master/include/androidfw/ResourceTypes.h

Cihaz üzerinde kaynak tablo okuma için tam uygulama burada:

https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • Ty Moss

    Ty Moss

    20 Kasım 2007

İLGİLİ SORU / CEVAPLAR