Android platformu çok sayıda paylaşılan Java kitaplığı içerir
isteğe bağlı olarak
Uygulama manifest'indeki <uses-library>
etiketi. Uygulamalar bağlantısı
kitaplıklara karşı denemeler yapın; bu nedenle bunları Android API'nin geri kalanı gibi ele alın
ve araç desteği açısından önemlidir. Bununla birlikte,
çoğu kütüphanede bu özellikler yoktur.
java_sdk_library
modül türü, kitaplıkların yönetilmesine yardımcı olur
yardımcı olur. Cihaz üreticileri bu mekanizmayı kendi başlarına kullanabilirler.
yönelik olarak, API'leri için geriye dönük uyumluluğu sürdürmek amacıyla paylaşılan Java kitaplıklarını geliştirdiler.
Cihaz üreticileri
<uses-library>
etiketini kullanabilirsiniz.
java_sdk_library
, bu Java kitaplıklarının
API kararlı.
java_sdk_library
,
java_sdk_library
tarihine kadar uygulanan kitaplıklar
derleme dosyası (Android.bp
) aracılığıyla aşağıdaki işlemleri gerçekleştirin:
- Saplama kitaplıkları
stubs
içermek için oluşturulur,stubs.system
vestubs.test
. Bu saplama kitaplıkları@hide
tanınması ile oluşturulur,@SystemApi
ve@TestApi
ek açıklamaları. java_sdk_library
, API spesifikasyon dosyalarını yönetir (ör.current.txt
) dizininden çıkarabilirsiniz. Bu dosyalar emin olmak amacıyla, en son kodla karşılaştırılarak kontrol edebilirsiniz. Bunlar farklıysa nasıl güncelleyeceğinizi açıklıyor. üzerinde yapılan tüm güncelleme değişikliklerini manuel olarak inceleyin. emin olmanız gerekir.
Tüm API'leri güncellemek içinm update-api
kullanın. Bir API'nin güncel olduğunu doğrulamak içinm checkapi
kullanın.- API spesifikasyon dosyaları, en son
API'nin geriye dönük uyumlu olduğundan emin olmak için yayınlanmış Android sürümlerini
önceki sürümlerle birlikte. Sağlanan
java_sdk_library
modül AOSP kapsamında, daha önce yayınlanan sürümleriniprebuilts/sdk/<latest number>
. - API spesifikasyon dosyaları kontrolleriyle ilgili olarak, aşağıdakilerden biri:
- Kontrollerin devam etmesine izin verin. (Hiçbir şey yapmayın.)
java_sdk_library
bölümüne şu öğeleri ekleyerek kontrolleri devre dışı bırakın:
unsafe_ignore_missing_latest_api: true,
- Yeni
java_sdk_library
modülleri için boş API'ler sağlayın şeklindemodule_name.txt
adlı boş metin dosyaları oluşturarakversion/scope/api
dizininde yer alır. - Çalışma zamanı için uygulama kitaplığı yüklüyse bir XML dosyası oluşturulup yüklenmeli.
java_sdk_library nasıl çalışır?
X
adlı bir java_sdk_library
şunları oluşturur:
- Uygulama kitaplığının iki kopyası:
X
adlı bir kitaplık veX.impl
adlı bir diğeri.X
kitaplığı yüklendi cihaz üzerinde.X.impl
kitaplığı yalnızca açıkça erişim olduğunda bulunur uygulama kitaplığı, diğer modüller tarafından gerekli kılınıyor. Örneğin, teşvik etmek anlamına gelir. Açık erişimin nadiren gerekli olduğunu unutmayın. - Erişimi özelleştirmek için kapsamlar etkinleştirilebilir ve devre dışı bırakılabilir. (Java'ya benzer) anahtar kelime erişimi değiştiricileri gibi, herkese açık kapsam da çok çeşitli erişimler sağlar; CANNOT TRANSLATE test kapsamı, yalnızca testte kullanılan API'ler içerir.) Etkinleştirilen her kapsam için kitaplığı şunları oluşturur:
- Bir saplama kaynak modülü (
droidstubs
modül türünde) - tüketir ve bir dizi saplama kaynağı çıkışını sağlar. API spesifikasyon dosyası. - Bir saplama kitaplığı (
java_library
modül türünde) - derlenen sürümünü kullanıma sunduk. Bunu derlemek için kullanılan kitaplıklarjava_sdk_library
içinde sağlananlarla aynıdır. Bu, uygulama ayrıntıları API koçanlarına sızmaz. - Saplamaları derlemek için ek kitaplıklara ihtiyacınız varsa
stub_only_libs
stub_only_static_libs
bunların tedarik edilmesini sağlayacak.
java_sdk_library
“X
” olarak adlandırılır ve
"X
" olarak derlendiğinden emin olun.
somut olarak ortaya koyar. Derleme uygun bir kitaplık seçer. Sahip olduğunuz
derlemenin ön planda olup olmadığını görmek için saplamalarınızı
hatalar. Aşağıdaki kılavuzdan yararlanarak gerekli düzeltmeleri yapın:
- Komut satırına bakarak uygun bir kitaplığa sahip olduğunuzu doğrulayın ve kapsamınızı belirlemek için orada hangi saplamaların listelendiğini inceleyin:
- Kapsam çok geniş: Bağımlı kitaplık için belirli bir API kapsamı gerekiyor. Ama kitaplıkta bu kapsamın dışında kalan API'leri görürsünüz. Örneğin: herkese açık API'lere dahil edilen sistem API'leri dahil edilir.
- Kapsam çok dar: Bağlı kitaplık, olması gerekir. Örneğin, bağlı kitaplıkta, sistem API'sini alır, ancak bunun yerine genel API'yi alır. Bu genellikle gerekli API'ler eksik olduğundan derleme hatası.
- Kitaplığı düzeltmek için aşağıdakilerden yalnızca birini yapın:
- İhtiyacınız olan sürümü seçmek için
sdk_version
kodunu değiştirin. VEYA - Uygun kitaplığı açıkça belirtin (ör.
<X>.stubs
) veya<X>.stubs.system
.
java_sdk_library X kullanımı
X
uygulama kitaplığı,
apex.java_libs
. Bununla birlikte, bir Sog sınırlaması nedeniyle,
X
alanına başka bir java_sdk_library
modülünden referans veriliyor
aynı APEX kitaplığı içinde, X.impl
açıkça
X
kitaplığı değil, kullanılmalıdır.
java_sdk_library
öğesine başka bir yerden referans verildiğinde bir saplama
emin olabilirsiniz. Saplama kitaplığı,
modülünün sdk_version
özellik ayarını değiştirin. Örneğin, Yeşil Ofis’teki
sdk_version: "current"
genel saplamaları kullanırken,
sdk_version: "system_current"
parametresini belirten modül
sistem koçları. Tam eşleşme bulunamazsa en yakın saplama kitaplığı
kullanılır. Yalnızca herkese açık bir API sağlayan bir java_sdk_library
herkese açık kostümleri sağlamak.
Örnekler ve kaynaklar
srcs
ve api_packages
özellikleri
java_sdk_library
vardır.
java_sdk_library { name: "com.android.future.usb.accessory", srcs: ["src/**/*.java"], api_packages: ["com.android.future.usb"], }
AOSP, yeni java_sdk_library
kullanımını önerir (ancak şart değildir)
örnekleri, kullanmak istedikleri API kapsamlarını açıkça etkinleştirir. Ayrıca transkriptinizi
(isteğe bağlı olarak) mevcut java_sdk_library
örneklerini şuna taşıyın:
kullanacakları API kapsamlarını açıkça etkinleştirmelidir:
java_sdk_library { name: "lib", public: { enabled: true, }, system: { enabled: true, }, … }
Çalışma zamanı için kullanılan impl
kitaplığını yapılandırmak için tüm
hostdex
gibi normal java_library
özellikleri
compile_dex
ve errorprone
.
java_sdk_library { name: "android.test.base", srcs: ["src/**/*.java"], errorprone: { javacflags: ["-Xep:DepAnn:ERROR"], }, hostdex: true, api_packages: [ "android.test", "android.test.suitebuilder.annotation", "com.android.internal.util", "junit.framework", ], compile_dex: true, }
Saplama kitaplıklarını yapılandırmak için aşağıdaki özellikleri kullanın:
merge_annotations_dirs
vemerge_inclusion_annotations_dirs
.api_srcs
: Belgenin parçası olan isteğe bağlı kaynak dosyaların listesi kitaplığının parçası değildir.stubs_only_libs
: Şurada bulunan Java kitaplıklarının listesi: sınıf yolu.hidden_api_packages
: Olması gereken paket adlarının listesi API'den gizlenmiştir.droiddoc_options
: Şunun için ek bağımsız değişken: metalava olarak değiştirin.droiddoc_option_files
: Başvuruda bulunulabilecek dosyaları listelerdroiddoc_options
içinden$(location <label>)
kullanarak, Burada<file>
, listedeki bir giriştir.annotations_enabled
.
java_sdk_library
bir java_library
ancak değil
droidstubs
modülü, dolayısıyla droidstubs
modülünün tümünü desteklemez
özellikler. Aşağıdaki örnek,
android.test.mock kitaplık derlemesi
dosyası olarak kaydedebilirsiniz.
java_sdk_library { name: "android.test.mock", srcs: [":android-test-mock-sources"], api_srcs: [ // Note: The following aren’t APIs of this library. Only APIs under the // android.test.mock package are taken. These do provide private APIs // to which android.test.mock APIs reference. These classes are present // in source code form to access necessary comments that disappear when // the classes are compiled into a Jar library. ":framework-core-sources-for-test-mock", ":framework_native_aidl", ], libs: [ "framework", "framework-annotations-lib", "app-compat-annotations", "Unsupportedappusage", ], api_packages: [ "android.test.mock", ], permitted_packages: [ "android.test.mock", ], compile_dex: true, default_to_stubs: true, }
Geriye dönük uyumluluğu koruma
Derleme sistemi, API'lerin geriye dönük olarak korunup korunmadığını kontrol eder.
oluşturulan dosyalarla en güncel API dosyalarını karşılaştırarak
Derleme sırasında API dosyaları. java_sdk_library
, aşağıdakileri gerçekleştirir:
uyumluluk kontrolü için prebuilt_apis
tarafından sağlanan bilgileri kullanın.
java_sdk_library
ile oluşturulan tüm kitaplıklarda API dosyaları olmalıdır
prebuilt_apis
üzerinde api_dirs
uygulamasının son sürümünde yer alır.
Sürümü yayınladığınızda API, dosyaları ve saplamaları listeler
kitaplıkları, PRODUCT=sdk_phone_armv7-sdk
ile dist derlemesi ile edinilebilir.
api_dirs
özelliği, API sürümü dizinlerinin listesidir
prebuilt_apis
içinde. API sürümü dizinleri aşağıdaki gibi olmalıdır:
Android.bp
dizin düzeyinde bulunur.
prebuilt_apis { name: "foo", api_dirs: [ "1", "2", .... "30", "current", ], }
version/scope/api/
ile dizinleri yapılandırın
dizin altındaki yapıyı oluşturuyor. version
.
API düzeyine karşılık gelir ve scope
,
dizinin herkese açık mı, sistem mi yoksa test mi olduğunu kontrol eder.
version/scope
Java kitaplıkları içerir.version/scope/api
, API içeriyor.txt
dosya. Adlı boş metin dosyaları oluşturmodule_name.txt
. vemodule_name-removed.txt
burada.├── 30 │ ├── public │ │ ├── api │ │ │ ├── android.test.mock-removed.txt │ │ │ └── android.test.mock.txt │ │ └── android.test.mock.jar │ ├── system │ │ ├── api │ │ │ ├── android.test.mock-removed.txt │ │ │ └── android.test.mock.txt │ │ └── android.test.mock.jar │ └── test │ ├── api │ │ ├── android.test.mock-removed.txt │ │ └── android.test.mock.txt │ └── android.test.mock.jar └── Android.bp