Android Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Kurallar

android_binary

Kural kaynağını görüntüleme
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

Android uygulama paketi dosyaları (.apk) oluşturur.

Örtülü çıkış hedefleri

  • name.apk: Hata ayıklama anahtarlarıyla imzalanmış ve zipaligned olan bir Android uygulama paketi dosyası. Uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Uygulamanızı hata ayıklama anahtarlarıyla imzaladığınızda yayınlayamazsınız.
  • name_unsigned.apk: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen imzasız sürümü.
  • name_deploy.jar: Bu hedefin geçişli kapatmasını içeren bir Java arşivi.

    Dağıtım jar'ı, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir sınıf yükleyici tarafından bulunacak tüm sınıfları içerir.

  • name_proguard.jar: name_deploy.jar üzerinde ProGuard çalıştırmanın sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse oluşturulur.
  • name_proguard.map: name_deploy.jar üzerinde ProGuard çalıştırmanın eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse ve proguard_generate_mapping veya shrink_resources ayarlanmışsa oluşturulur.

Örnekler

Android kurallarına örnekleri Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri: android_library, java_library android kısıtlaması ile ve cc_library Android hedef platform için .so yerel kitaplıklarını sarmalayan veya üreten.
srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen kaynak dosyaların listesi.

.java türündeki srcs dosyaları derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir fikir değildir. Bunun yerine, aşağıda açıklandığı gibi srcs alanına bağlı kuralın adını girin.

.srcjar türündeki srcs dosyaları ayıklanır ve derlenir. (Bu, genrule veya derleme uzantısı içeren bir dizi .java dosyası oluşturmanız gerektiğinde faydalıdır.)

assets

Etiketler listesi; varsayılan değer []'dir.

Paketlenecek öğelerin listesi. Bu genellikle assets dizininin altındaki tüm dosyaların glob'sidir. Ayrıca, tüm bu dosyalar ilgili paketteki assets_dir dizininde olduğu sürece diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da referans verebilirsiniz.
assets_dir

Dize; varsayılan değer ""'tir

assets klasöründeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve bu özelliklerin ikisi de veya hiçbiri sağlanmalıdır.
crunch_png

Boole; varsayılan değer True'tir

PNG sıkıştırma işlemi yapın (veya yapmayın). Bu, her zaman yapılan dokuz parçaya bölme işleminden bağımsızdır. Bu, aapt2'de düzeltilen bir aapt hatası için desteği sonlandırılmış bir geçici çözümdür.
custom_package

Dize; varsayılan değer ""'tir

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden anlaşılır. Farklı bir paket belirtebilirsiniz ancak bu, diğer kitaplıklarla sınıf yolu çakışmasına neden olabileceğinden ve bu durum yalnızca çalışma zamanında algılandığından bu işlemden kaçınmanız önerilir.
debug_key

Etiket; varsayılan değer "@bazel_tools//tools/android:debug_keystore"'dir.

Hata ayıklama APK'sını imzalamak için kullanılacak hata ayıklama anahtar ambarını içeren dosya. Genellikle varsayılan anahtar dışında bir anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_keys

Etiketler listesi; varsayılan değer []'dir.

Hata ayıklama APK'sını imzalamak için kullanılacak dosyaların, hata ayıklama anahtar depolarının listesi. Genellikle varsayılan anahtar dışında anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_lineage_file

Etiket; varsayılan değer None'dir.

debug_signing_keys için imzalama soyağacını içeren dosya. Genellikle varsayılan anahtar dışında anahtar kullanmak istemezsiniz. Bu nedenle bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır.

densities

Dize listesi; varsayılan değer []'tir.

APK oluşturulurken filtrelenecek yoğunluklar. Bu işlem, APK boyutunu küçültmek için belirtilen ekran yoğunluklarına sahip bir cihaz tarafından yüklenmeyecek raster çizilebilir kaynakları kaldırır. Manifestte henüz bir süper küme listesi yoksa buna karşılık gelen bir uyumlu ekranlar bölümü de manifest'e eklenir.
dex_shards

Tam sayı; varsayılan değer 1'tür

Dizine eklenecek parça sayısı. Bu, uygulama yükleme ve başlatma süresi pahasına dexing işlemini çok daha hızlı hale getirir. İkili dosya ne kadar büyükse o kadar fazla parça kullanılmalıdır. Denemelere başlamak için 25 iyi bir değerdir.

Her bir parçanın nihai uygulamada en az bir dex dosyasına yol açacağını unutmayın. Bu nedenle, bu değerin 1'den fazla olarak ayarlanması, sürüm ikili dosyaları için önerilmez.

dexopts

Dize listesi; varsayılan değer []'tir.

classes.dex dosyası oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu
enable_data_binding

Boole; varsayılan değer False'tir

Doğru ise bu kural, resource_files özelliği aracılığıyla dahil edilen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar olmadan veri bağlama ifadeleri derleme hatalarına neden olur.

Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:

  1. Bu özelliği, kendisine geçişli olarak bağlı olan tüm Android kuralları için ayarlayın. Bunun nedeni, bağımlıların kuralın veri bağlama ifadelerini kaynak birleştirme yoluyla devralmasıdır. Bu nedenle, bu ifadeleri ayrıştırmak için veri bağlama ile de oluşturmaları gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere veri bağlama çalışma zamanındaki kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu, depo ayarlarınıza bağlıdır.
incremental_dexing

Tamsayı; yapılandırılamaz; varsayılan değer -1

Varsayılanları ve --incremental_dexing işaretini geçersiz kılarak hedefin artımlı dizin oluşturma ile veya olmadan derlenmesini zorunlu kılar.
instruments

Etiket; varsayılan değer None'dir.

Ölçüm yapılacak android_binary hedefi.

Bu özellik ayarlanırsa bu android_binary, enstrümantasyon testleri için test uygulaması olarak kabul edilir. android_instrumentation_test Hedef, bu hedefi test_app özelliğinde belirtebilir.

javacopts

Dize listesi; varsayılan değer []'tir.

Bu hedef için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

key_rotation_min_sdk

Dize; varsayılan değer ""'tir

APK'nın imzasını oluşturmak için APK'nın döndürülmüş imzalama anahtarının kullanılması gereken minimum Android platform sürümünü (API düzeyi) belirler. APK'nın orijinal imzalama anahtarı, önceki tüm platform sürümlerinde kullanılır.
main_dex_list

Etiket; varsayılan değer None'dir.

Sınıf dosya adlarının listesini içeren bir metin dosyası. Bu sınıf dosyalarıyla tanımlanan sınıflar birincil classes.dex dosyasına yerleştirilir. Örneğin:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
multidex="manual_main_dex" ile kullanılmalıdır.
main_dex_list_opts

Dize listesi; varsayılan değer []'tir.

Ana dex listesi oluşturucuya iletilecek komut satırı seçenekleri. Ana dex listesine dahil edilen sınıfları etkilemek için bu seçeneği kullanın.
main_dex_proguard_specs

Etiketler listesi; varsayılan değer []'dir.

Ana dex'te tutulması gereken sınıfları belirlemek için Proguard spesifikasyonları olarak kullanılacak dosyalar. Yalnızca multidex özelliği legacy olarak ayarlandıysa izin verilir.
manifest

Etiket; zorunlu

Android manifest dosyasının adı (genellikle AndroidManifest.xml). resource_files veya assets tanımlanmışsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan değer {}'tir

Manifestte geçersiz kılınacak değerlerin sözlüğü.

Manifest'teki tüm ${name} örnekleri, bu sözlükteki ada karşılık gelen değerle değiştirilir.

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion, manifest ve uses-sdk etiketlerindeki ilgili özellikleri de geçersiz kılar.

packageName yoksayılır ve belirtilmişse applicationId'ten veya manifest'teki paketten ayarlanır.

manifest_merger, legacy olarak ayarlandığında yalnızca applicationId, versionCode ve versionName etkili olur.

multidex

Dize; varsayılan değer "native"'tir

Kodun birden fazla dex dosyasına bölünüp bölünmeyeceği.
Olası değerler:
  • native: DEX 64K dizin sınırı aşıldığında kodu birden fazla DEX dosyasına bölün. Çoklu dex sınıflarının çalışma zamanında yüklenmesi için doğal platform desteğinin var olduğu varsayılır. Bu yöntem yalnızca Android L ve sonraki sürümlerde çalışır.
  • legacy: DEX 64K dizin sınırı aşıldığında kodu birden fazla DEX dosyasına bölün. Multidex sınıflarının uygulama kodu aracılığıyla yüklendiği varsayılır (ör. doğal platform desteği yoktur).
  • manual_main_dex: DEX 64K dizin sınırı aşıldığında kodu birden fazla DEX dosyasına bölün. Ana dex dosyasının içeriğinin, main_dex_list özelliği kullanılarak bir metin dosyasında sınıfların listesi sağlanarak belirtilmesi gerekir.
  • off: Dizin sınırını aşsa bile tüm kodu tek bir dex dosyasında derleyin.
nocompress_extensions

Dize listesi; varsayılan değer []'tir.

APK'da sıkıştırılmadan bırakılacak dosya uzantılarının listesi.
package_id

Tam sayı; varsayılan değer 0'tür

Bu ikili dosyasındaki kaynaklara atanacak paket kimliği.

Daha fazla bilgi için AAPT2'nin --package-id bağımsız değişkenine bakın. Bu genellikle ayarlanmadan bırakılabilir (ve bırakılmalıdır). Bu durumda varsayılan değer 127 olur (0x7F).

plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyicisi eklentileri. plugins özelliğinde belirtilen her java_plugin, bu hedef derlendiğinde çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına dahil edilir.
proguard_apply_dictionary

Etiket; varsayılan değer None'dir.

Proguard için eşleme olarak kullanılacak dosya. Karartma sırasında sınıfları ve üyeleri yeniden adlandırırken kullanılacak "kelimeler"den oluşan, satırla ayrılmış bir dosya.
proguard_apply_mapping

Etiket; varsayılan değer None'dir.

Proguard için eşleme olarak kullanılacak dosya. proguard_generate_mapping tarafından oluşturulan ve aynı eşlemeyi yeni bir derlemeye uygulamak için yeniden kullanılacak bir eşleme dosyası.
proguard_generate_mapping

Boole; yapılandırılamaz; varsayılan değer False'dir.

ProGuard eşleme dosyasının oluşturulup oluşturulmayacağı. Eşleme dosyası yalnızca proguard_specs belirtilirse oluşturulur. Bu dosyada, orijinal ile karartılmış sınıf, yöntem ve alan adları arasındaki eşleme listelenir.

UYARI: Bu özellik kullanılıyorsa Proguard spesifikasyonu -dontobfuscate veya -printmapping içermemelidir.

proguard_specs

Etiketler listesi; varsayılan değer []'dir.

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyada, Proguard tarafından kullanılacak özellik grubu açıklanır.
resource_configuration_filters

Dize listesi; varsayılan değer []'tir.

Apk'daki kaynakları yalnızca "en" yapılandırmasında olanlarla sınırlayacak "en" gibi kaynak yapılandırma filtrelerinin listesi. Sanal yerelleştirmeyi etkinleştirmek için en_XA ve/veya ar_XB sanal yerel ayarlarını ekleyin.
resource_files

Etiketler listesi; varsayılan değer []'dir.

Paketlenecek kaynakların listesi. Bu genellikle res dizininin altındaki tüm dosyaların glob'sidir.
Oluşturulan dosyalar (genrules'den) buradaki Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı "res" dizininde olmasıdır.
shrink_resources

Tam sayı; varsayılan değer -1'tür

Kaynak küçültme işleminin yapılıp yapılmayacağını belirtir. İkili tarafından kullanılmayan kaynaklar APK'dan kaldırılır. Bu özellik yalnızca yerel kaynakları (ör. manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard gerektirir. Çoğunlukla Gradle kaynak sıkıştırıcısıyla (https://developer.android.com/studio/build/shrink-code.html#shrink-resources) aynı şekilde çalışır.

Önemli farklılıklar:

  • values/'teki kaynaklar ve dosya tabanlı kaynaklar da kaldırılır.
  • Varsayılan olarak strict mode kullanır
  • Kullanılmayan kimlik kaynaklarının kaldırılması yalnızca aapt2 ile desteklenir.
Kaynak küçültme etkinse name_files/resource_shrinker.log da oluşturulur. Bu dosya, yapılan analizleri ve silme işlemlerini ayrıntılı olarak belirtir.

Olası değerler:

  • shrink_resources = 1: Android kaynak küçültme özelliğini etkinleştirir.
  • shrink_resources = 0: Android kaynak küçültme özelliğini devre dışı bırakır.
  • shrink_resources = -1: Shrinking, --android_resource_shrinking işareti tarafından kontrol edilir.

aar_import

Kural kaynağını görüntüleme
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)

Bu kural, android_library ve android_binary kuralları için .aar dosyalarının kitaplık olarak kullanılmasına olanak tanır.

Örnekler

    aar_import(
        name = "google-vr-sdk",
        aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar",
    )

    android_binary(
        name = "app",
        manifest = "AndroidManifest.xml",
        srcs = glob(["**.java"]),
        deps = [":google-vr-sdk"],
    )

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

aar

Etiket; zorunlu

Bu hedefe bağlı Android hedeflerine sağlanacak .aar dosyası.
exports

Etiketler listesi; varsayılan değer []'dir.

Bu kurala bağlı kurallara dışa aktarılacak hedefler. java_library.exports özelliğine bakın.
srcjar

Etiket; varsayılan değer None'dir.

AAR'daki derlenmiş JAR dosyalarının kaynak kodunu içeren bir JAR dosyası.

android_library

Kural kaynağını görüntüleme
android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)

Bu kural, kaynaklarını derleyip .jar dosyasında arşivler. Android çalışma zamanı kitaplığı android.jar, derleme sınıf yoluna dolaylı olarak yerleştirilir.

Örtülü çıkış hedefleri

  • libname.jar: Java arşivi.
  • libname-src.jar: Kaynakları ("source jar") içeren bir arşiv.
  • name.aar: Bu hedefin java arşivini ve kaynaklarını içeren bir Android "aar" paketi. Geçişli kapatma içermez.

Örnekler

Android kurallarına örnekleri Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Aşağıdaki örnekte idl_import_root değerinin nasıl ayarlanacağı gösterilmektedir. //java/bazel/helloandroid/BUILD şunu içerebilir:

android_library(
    name = "parcelable",
    srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable

    # MyParcelable.aidl will be used as import for other .aidl
    # files that depend on it, but will not be compiled.
    idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable

    # We don't need to specify idl_import_root since the aidl file
    # which declares bazel.helloandroid.MyParcelable
    # is present at java/bazel/helloandroid/MyParcelable.aidl
    # underneath a java root (java/).
)

android_library(
    name = "foreign_parcelable",
    srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable
    idl_parcelables = [
        "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable
    ],

    # We need to specify idl_import_root because the aidl file which
    # declares android.helloandroid.OtherParcelable is not positioned
    # at android/helloandroid/OtherParcelable.aidl under a normal java root.
    # Setting idl_import_root to "src" in //java/bazel/helloandroid
    # adds java/bazel/helloandroid/src to the list of roots
    # the aidl compiler will search for imported types.
    idl_import_root = "src",
)

# Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement.
android_library(
    name = "foreign_interface",
    idl_srcs = [
        "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface
        "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface
    ],

    # As above, idl_srcs which are not correctly positioned under a java root
    # must have idl_import_root set. Otherwise, OtherInterface (or any other
    # interface in a library which depends on this one) will not be able
    # to find CallbackInterface when it is imported.
    idl_import_root = "src",
)

# MyParcelable.aidl is imported by MyInterface.aidl, so the generated
# MyInterface.java requires MyParcelable.class at compile time.
# Depending on :parcelable ensures that aidl compilation of MyInterface.aidl
# specifies the correct import roots and can access MyParcelable.aidl, and
# makes MyParcelable.class available to Java compilation of MyInterface.java
# as usual.
android_library(
    name = "idl",
    idl_srcs = ["MyInterface.aidl"],
    deps = [":parcelable"],
)

# Here, ServiceParcelable uses and thus depends on ParcelableService,
# when it's compiled, but ParcelableService also uses ServiceParcelable,
# which creates a circular dependency.
# As a result, these files must be compiled together, in the same android_library.
android_library(
    name = "circular_dependencies",
    srcs = ["ServiceParcelable.java"],
    idl_srcs = ["ParcelableService.aidl"],
    idl_parcelables = ["ServiceParcelable.aidl"],
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

Bağlantı kurulacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri: android_library, java_library android kısıtlaması ile ve cc_library Android hedef platformu için .so yerel kitaplıklarını sarmalayan veya üreten.
srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen .java veya .srcjar dosyalarının listesi.

.java türündeki srcs dosyaları derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir fikir değildir. Bunun yerine, aşağıda açıklandığı gibi srcs alanına bağlı kural adını girin.

.srcjar türündeki srcs dosyaları ayıklanır ve derlenir. (Bu, genrule veya derleme uzantısı içeren bir dizi .java dosyası oluşturmanız gerektiğinde faydalıdır.)

srcs atlanırsa deps içinde belirtilen tüm bağımlılık bu kuraldan dışa aktarılır (bağımlılıkların dışa aktarılması hakkında daha fazla bilgi için java_library'nin dışa aktarma işlemleri bölümüne bakın). Ancak bu davranışın desteği yakında sonlandırılacak. Bu nedenle, bu davranışa güvenmemeye çalışın.

assets

Etiketler listesi; varsayılan değer []'dir.

Paketlenecek öğelerin listesi. Bu genellikle assets dizininin altındaki tüm dosyaların glob'sidir. Ayrıca, tüm bu dosyalar ilgili paketteki assets_dir dizininde olduğu sürece diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da referans verebilirsiniz.
assets_dir

Dize; varsayılan değer ""'tir

assets klasöründeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve bu özelliklerin ikisi de veya hiçbiri sağlanmalıdır.
custom_package

Dize; varsayılan değer ""'tir

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden anlaşılır. Farklı bir paket belirtebilirsiniz ancak bu, diğer kitaplıklarla sınıf yolu çakışmasına neden olabileceğinden ve bu durum yalnızca çalışma zamanında algılandığından bu işlemden kaçınmanız önerilir.
enable_data_binding

Boole; varsayılan değer False'tir

Doğru ise bu kural, resource_files özelliği aracılığıyla dahil edilen düzen kaynaklarındaki veri bağlama ifadelerini işler. Bu ayar olmadan veri bağlama ifadeleri derleme hatalarına neden olur.

Veri bağlama özelliğine sahip bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:

  1. Bu özelliği, kendisine geçişli olarak bağlı olan tüm Android kuralları için ayarlayın. Bunun nedeni, bağımlıların kuralın veri bağlama ifadelerini kaynak birleştirme yoluyla devralmasıdır. Bu nedenle, bu ifadeleri ayrıştırmak için veri bağlama ile de oluşturmaları gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere veri bağlama çalışma zamanındaki kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu, depo ayarlarınıza bağlıdır.
exported_plugins

Etiketler listesi; varsayılan değer []'dir.

Doğrudan bu kitaplığa bağlı kitaplıklara aktarılacak java_plugin'lerin (ör. ek açıklama işleyiciler) listesi.

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağlı olan tüm kitaplıklara, söz konusu kitaplık plugins'ta bu etiketleri açıkça tanımlamış gibi uygulanır.

exports

Etiketler listesi; varsayılan değer []'dir.

exports özellikleri aracılığıyla erişilen tüm kuralların kapatılması, exports ile doğrudan hedefe bağlı olan tüm kuralların doğrudan bağımlılıkları olarak kabul edilir.

exports, ait oldukları kuralın doğrudan bağımlıları değildir.

exports_manifest

Tam sayı; varsayılan değer 1'tür

Manifest girişlerinin bu hedefe bağlı android_binary hedeflerine aktarılıp aktarılmayacağı. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
idl_import_root

Dize; varsayılan değer ""'tir

Bu kitaplığa dahil edilen idl kaynaklarını içeren java paket ağacının köküne göreli paket yolu.

Bu kitaplığa bağlı idl kaynakları işlenirken bu yol, içe aktarma kökü olarak kullanılır.

idl_import_root belirtildiğinde hem idl_parcelables hem de idl_srcs, idl_import_root altında temsil ettikleri nesnenin java paketi tarafından belirtilen yolda olmalıdır. idl_import_root belirtilmediğinde hem idl_parcelables hem de idl_srcs, Java kökü altında paketleri tarafından belirtilen yolda olmalıdır.

Örneğine bakın.

idl_parcelables

Etiketler listesi; varsayılan değer []'dir.

İçe aktarma olarak sağlanacak Android IDL tanımlarının listesi. Bu dosyalar, bu kitaplığa doğrudan veya geçişli kapatma yoluyla bağlı olan tüm android_library hedefleri için içe aktarma dosyası olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.

Yalnızca bu kitaplıktaki .java kaynaklarına doğrudan karşılık gelen .aidl dosyaları dahil edilmelidir (ör.Parcelable'ın özel uygulamaları). Aksi takdirde idl_srcs kullanılmalıdır.

Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi için idl_import_root özelliğinin açıklamasına bakın.

idl_preprocessed

Etiketler listesi; varsayılan değer []'dir.

İçe aktarma olarak sağlanacak önceden işlenmiş Android IDL tanımlarının listesi. Bu dosyalar, bu kitaplığa doğrudan veya geçişli kapatma yoluyla bağlı olan tüm android_library hedefleri için içe aktarma dosyası olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.

Yalnızca bu kitaplıktaki .java kaynaklarına doğrudan karşılık gelen önceden işlenmiş .aidl dosyaları dahil edilmelidir (ör.Parcelable'ın özel uygulamaları). Aksi takdirde, Java arayüzlerine çevrilmesi gereken Android IDL tanımları için idl_srcs'yi, önceden işlenmemiş AIDL dosyaları için ise idl_parcelable'ı kullanın.

idl_srcs

Etiketler listesi; varsayılan değer []'dir.

Java arayüzlerine çevrilecek Android IDL tanımlarının listesi. Java arayüzleri oluşturulduktan sonra srcs içeriğiyle birlikte derlenir.

Bu dosyalar, bu kitaplığa doğrudan veya geçişli kapatma yoluyla bağlı olan tüm android_library hedefleri için içe aktarma olarak kullanılabilir.

Bu dosyalar, aidl derleyicisinin bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi için idl_import_root özelliğinin açıklamasına bakın.

javacopts

Dize listesi; varsayılan değer []'tir.

Bu hedef için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

manifest

Etiket; varsayılan değer None'dir.

Android manifest dosyasının adı (genellikle AndroidManifest.xml). resource_files veya assets tanımlanmışsa tanımlanmalıdır.

Boole; varsayılan değer False'tir

Bu kitaplığı yalnızca derleme için kullanın, çalışma zamanında kullanmayın. neverlink olarak işaretlenen bir kuralın çıkışları, .apk oluşturma işleminde kullanılmaz. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır.
plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyicisi eklentileri. plugins özelliğinde belirtilen her java_plugin, bu hedef derlendiğinde çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına dahil edilir.
proguard_specs

Etiketler listesi; varsayılan değer []'dir.

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, Proguard tarafından kullanılacak özellik grubunu açıklar. Belirtilenler, bu kitaplığa bağlı tüm android_binary hedeflerine eklenir. Buraya dahil edilen dosyalarda yalnızca idempotent kurallar (ör. -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar) bulunmalıdır. Diğer seçenekler, tautolojik olmayan birleştirmelerden emin olmak için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_files

Etiketler listesi; varsayılan değer []'dir.

Paketlenecek kaynakların listesi. Bu genellikle res dizininin altındaki tüm dosyaların glob'sidir.
Oluşturulan dosyalar (genrules'den) buradaki Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı "res" dizininde olmasıdır.

android_instrumentation_test

Kural kaynağını görüntüleme
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)

android_instrumentation_test kuralı, Android araç testlerini çalıştırır. Bir emülatör başlatır, test edilen uygulamayı, test uygulamasını ve gerekli diğer uygulamaları yükler ve test paketinde tanımlanan testleri çalıştırır.

test_app özelliği, testi içeren android_binary değerini belirtir. Bu android_binary, instruments özelliği aracılığıyla test edilen android_binary uygulamasını belirtir.

Örnek

# java/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_lib",
    srcs = ["Lib.java"],
    manifest = "LibraryManifest.xml",
    resource_files = glob(["res/**"]),
)

# The app under test
android_binary(
    name = "hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_lib"],
)
# javatests/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_test_lib",
    srcs = ["Tests.java"],
    deps = [
      "//java/com/samples/hello_world:hello_world_lib",
      ...  # test dependencies such as Espresso and Mockito
    ],
)

# The test app
android_binary(
    name = "hello_world_test_app",
    instruments = "//java/com/samples/hello_world:hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_test_lib"],
)

android_instrumentation_test(
    name = "hello_world_uiinstrumentation_tests",
    target_device = ":some_target_device",
    test_app = ":hello_world_test_app",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

support_apks

Etiketler listesi; varsayılan değer []'dir.

Enstrümantasyon testi başlamadan önce cihaza yüklenecek diğer APK'lar.
target_device

Etiket; zorunlu

Testin çalıştırılması gereken android_device.

Testi, çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu bağımsız değişkenleri kullanın: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

test_app

Etiket; zorunlu

Test sınıflarını içeren android_binary hedefi. android_binary hedefi, instruments özelliği aracılığıyla hangi hedefi test ettiğini belirtmelidir.

android_local_test

Kural kaynağını görüntüleme
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)

Bu kural, android_library kurallarını yerel olarak (cihaz üzerinde değil) birim testi içindir. Android Robolectric test çerçevesiyle çalışır. Robolectric testi yazma hakkında ayrıntılı bilgi için Android Robolectric sitesine bakın.

Örtülü çıkış hedefleri

  • name.jar: Testin Java arşivi.
  • name-src.jar: Kaynakları içeren bir arşiv ("source jar").
  • name_deploy.jar: Dağıtıma uygun bir Java dağıtım arşivi (yalnızca açıkça istenirse oluşturulur).

Örnekler

Robolectric'i android_local_test ile kullanmak için WORKSPACE dosyanıza Robolectric'in deposunu ekleyin:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
Bu, Robolectric için gereken maven_jar kurallarını getirir. Ardından her android_local_test kuralı @robolectric//bazel:robolectric'a bağlı olmalıdır. Aşağıdaki örneğe bakın.

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:android-all",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

Test edilecek kitaplıkların yanı sıra hedefe bağlanacak ek kitaplıkların listesi. Android kurallarında bu özelliğin geçişli kapanışında tanımlanan tüm kaynaklar, öğeler ve manifest dosyaları testte kullanılabilir hale getirilir.

deps alanında izin verilen kurallar android_library, aar_import, java_import, java_library ve java_lite_proto_library'dir.

srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Aşağıda açıklanan özel durumlar hariç gereklidir.

.java türündeki srcs dosyaları derlenir. Okunabilirlik açısından, oluşturulan .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir fikir değildir. Bunun yerine, aşağıda açıklandığı gibi srcs alanına bağlı kural adını girin.

.srcjar türündeki srcs dosyaları ayıklanır ve derlenir. (Bu, genrule veya derleme uzantısı içeren bir dizi .java dosyası oluşturmanız gerektiğinde faydalıdır.)

Yukarıda açıklanan dosya türünde en az bir dosya bulunduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde bir hata meydana gelir.

runtime_deps belirtilmediği sürece srcs özelliği gereklidir ve boş olamaz.

custom_package

Dize; varsayılan değer ""'tir

R sınıfının oluşturulacağı Java paketi. Paket varsayılan olarak, kuralı içeren BUILD dosyasının bulunduğu dizinden inferred edilir. Bu özelliği kullanırsanız muhtemelen test_class özelliğini de kullanmanız gerekir.
densities

Dize listesi; varsayılan değer []'tir.

APK oluşturulurken filtrelenecek yoğunluklar. Henüz bir üst küme StarlarkListing içermiyorsa manifest'e uygun ekranlar bölümü de eklenir.
enable_data_binding

Boole; varsayılan değer False'tir

Doğru ise bu kural, bu test tarafından kullanılan veri bağlama özellikli bağımlılıklarda kullanılan veri bağlama referanslarını işler. Bu ayar olmadan, veri bağlama bağımlılıkları gerekli ikili düzeyde kod oluşturma işlemine sahip olmaz ve derleme hataları oluşabilir.
javacopts

Dize listesi; varsayılan değer []'tir.

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

jvm_flags

Dize listesi; varsayılan değer []'tir.

Bu ikili dosyanın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir.

Java ikili dosyası için sarmalayıcı komut dosyası, CLASSPATH tanımı (tüm bağımlı jar dosyalarını bulmak için) içerir ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından "$@" karakterini içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırılmak istenen bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags içeriği, sınıf adı listelenmeden önce sarmalayıcı komut dosyasına eklenir.

Bu özelliğin *_deploy.jar çıkışları üzerinde etkisi olmadığını unutmayın.

manifest

Etiket; varsayılan değer None'dir.

Android manifest dosyasının adı (genellikle AndroidManifest.xml). resource_files veya assets tanımlanmışsa ya da test edilen kütüphanelerdeki manifest dosyalarından herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
manifest_values

Sözlük: Dize -> Dize; varsayılan değer {}'tir

Manifestte geçersiz kılınacak değerlerin sözlüğü. Manifest'teki tüm ${name} örnekleri, bu sözlükte name değerine karşılık gelen değerle değiştirilir. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion, manifest ile uses-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilmişse applicationId'ten veya manifest'teki paketten ayarlanır. manifest_values parametresini kullanmak için kuralda bir manifest dosyasının bulunması gerekmez.
nocompress_extensions

Dize listesi; varsayılan değer []'tir.

Kaynak apk'da sıkıştırılmadan bırakılacak dosya uzantılarının listesi.
plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
resource_configuration_filters

Dize listesi; varsayılan değer []'tir.

APK'daki kaynakları yalnızca "en" yapılandırmasında olanlarla sınırlayacak "en" gibi kaynak yapılandırma filtrelerinin listesi.
resource_jars

Etiketler listesi; varsayılan değer []'dir.

Desteği sonlandırıldı: Bunun yerine java_import ve deps veya runtime_deps kullanın.
resource_strip_prefix

Dize; varsayılan değer ""'tir

Java kaynaklarından kaldırılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki bir kaynak dosya foo/bar/a.txt adresinde bulunur.

runtime_deps

Etiketler listesi; varsayılan değer []'dir.

Son ikili dosyada kullanılacak veya yalnızca çalışma zamanında test edilecek kitaplıklar. Normal deps gibi bunlar da çalışma zamanı sınıf yolu üzerinde görünür ancak bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.
stamp

Tam sayı; varsayılan değer 0'tür

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya damgalayın. İkili dosya ve ona bağlı tüm yayın sonrası işlemler için uzaktan önbelleğe alma işlemini potansiyel olarak sonlandırdığından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işareti tarafından kontrol edilir.

Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz.

test_class

Dize; varsayılan değer ""'tir

Test çalıştırıcı tarafından yüklenecek Java sınıfı.

Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bu ayarı yapmanız gerekmez. Bu bağımsız değişken atlanırsa adı bu android_local_test kuralının name değerine karşılık gelen Java sınıfı kullanılır. Test sınıfının org.junit.runner.RunWith ile eklenmesi gerekir.

use_launcher

Boole; varsayılan değer True'tir

İkilinin özel bir başlatıcı kullanıp kullanmayacağı.

Bu özellik yanlış değerine ayarlanırsa launcher özelliği ve ilgili --java_launcher işareti bu hedef için yok sayılır.

android_device

Kural kaynağını görüntüleme
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

Bu kural, belirtilen spesifikasyonlarla yapılandırılmış bir Android emülatör oluşturur. Bu emülatör, bazel run komutuyla veya oluşturulan komut dosyası doğrudan çalıştırılarak başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarına bağlı kalmanız önerilir.

Bu kural, bazel testi ve blaze çalıştırma için --run_under işareti için uygun bir hedeftir. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve uygun şekilde test eder veya çalıştırır.

android_device, temel system_image X86 tabanlıysa ve en fazla I686 CPU mimarisi için optimize edilmişse KVM resimleri oluşturmayı destekler. KVM'yi kullanmak için android_device kuralına tags = ['requires-kvm'] ekleyin.

Örtülü çıkış hedefleri

  • name_images/userdata.dat: Emülatörü başlatmak için resim dosyalarını ve anlık görüntüleri içerir
  • name_images/emulator-meta-data.pb: Emülatöre aktarılması ve yeniden başlatılması için gereken serileştirilmiş bilgileri içerir.

Örnekler

Aşağıdaki örnekte, android_device özelliğinin nasıl kullanılacağı gösterilmektedir. //java/android/helloandroid/BUILD şunu içerir:

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties şunu içerir:

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

Bu kural, resimler ve bir başlangıç komut dosyası oluşturur. bazel run :nexus_s -- --action=start komutunu yürüterek emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretçileri gösterir:

  • --adb_port: adb'nin kullanılacağı bağlantı noktası. Emülatöre adb komutları göndermek istiyorsanız adb connect komutunu bu bağlantı noktasına gönderirsiniz.
  • --emulator_port: Emülatör telnet yönetim konsolunun açılacağı bağlantı noktası.
  • --enable_display: Doğruysa emülatörü ekranla başlatır (varsayılan olarak yanlıştır).
  • --action: start veya kill.
  • --apks_to_install: Emülatöre yüklenecek APK'ların listesi.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

cache

Tam sayı; zorunlu

Emülatör önbellek bölümünün megabayt cinsinden boyutu. Minimum değer 16 megabayttır.
default_properties

Etiket; varsayılan değer None'dir.

Emülatördeki /default.prop dosyasına yerleştirilecek tek bir properties dosyası. Bu sayede kural yazarı, emülatörde gerçek bir cihaza daha benzeyen bir görünüm elde etmek için daha fazla yapılandırma yapabilir (özellikle de UserAgent dizelerini ve bir uygulamanın veya sunucunun belirli bir cihazdan farklı davranmasına neden olabilecek diğer davranışları kontrol ederek). Bu dosyadaki özellikler, genellikle emülatör tarafından ayarlanan ro.product.model gibi salt okunur özellikleri geçersiz kılar.
horizontal_resolution

Tam sayı; zorunlu

Taklit edilecek yatay ekran çözünürlüğü (piksel). Minimum değer 240'tür.
platform_apks

Etiketler listesi; varsayılan değer []'dir.

Cihazın başlatılması sırasında yüklenecek apk'ların listesi.
ram

Tam sayı; zorunlu

Cihaz için taklit edilecek RAM miktarı (megabayt cinsinden). Bu, yalnızca cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. Minimum değer 64 megabayttır.
screen_density

Tam sayı; zorunlu

Emülasyonlu ekranın inç başına piksel cinsinden yoğunluğu. Minimum değer 30 ppi'dir.
system_image

Etiket; zorunlu

Aşağıdaki dosyaları içeren bir dosya grubu:
  • system.img: Sistem bölümü
  • kernel-qemu: Emülatörün yükleyeceği Linux çekirdeği
  • ramdisk.img: Açılış sırasında kullanılacak initrd resmi
  • userdata.img: İlk userdata bölümü
  • source.properties: Resimlerle ilgili bilgileri içeren bir özellik dosyası
Bu dosyalar Android SDK'sının bir parçasıdır veya üçüncü taraflarca sağlanır (ör. Intel, x86 resimleri sağlar).
vertical_resolution

Tam sayı; zorunlu

Taklit edilecek dikey ekran çözünürlüğü (piksel). Minimum değer 240'tür.
vm_heap

Tam sayı; zorunlu

Android'in her işlem için kullanacağı sanal makine yığınının megabayt cinsinden boyutu. Minimum değer 16 megabayttır.

android_ndk_repository

Kural kaynağını görüntüleme
android_ndk_repository(name, api_level, path, repo_mapping)

Bazel'i, Android hedeflerini yerel kodla derlemeyi desteklemek için Android NDK'yı kullanacak şekilde yapılandırır.

android_ndk_repository için kullanılan bu uygulamanın Starlark'ta bir uygulamayla değiştirildiğini unutmayın. 25 ve sonraki sürümler dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository'ün Starlark sürümünde uygulanacaktır. Starlark sürümü için rules_android_ndk bölümüne bakın.

Android için derleme işleminin, WORKSPACE dosyanızda bir android_sdk_repository kuralı da gerektirdiğini unutmayın.

Daha fazla bilgi için Android NDK'yi Bazel ile kullanmayla ilgili tüm dokümanları okuyun.

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, $ANDROID_NDK_HOME konumundaki Android NDK'nızı bulur ve desteklediği en yüksek API düzeyini algılar.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

Yukarıdaki örnekte, ./android-ndk-r20 alanındaki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlediğinde API düzeyi 24 kitaplıklarını kullanır.

cpufeatures

Android NDK, bir cihazın CPU'sunu çalışma zamanında tespit etmek için kullanılabilen cpufeatures kitaplığını içerir. Aşağıdaki örnekte, cpufeatures özelliğinin Bazel ile nasıl kullanılacağı gösterilmektedir.

# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

api_level

Tamsayı; yapılandırılamaz; varsayılan değer 0

Derleme için kullanılacak Android API düzeyi. Belirtilmemişse yüklü en yüksek API düzeyi kullanılır.
path

Dize; yapılandırılamaz; varsayılan değer ""

Android NDK'nın mutlak veya göreli yolu. Bu özellik veya $ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.

Android NDK'yı Android Developers sitesinden indirebilirsiniz.

repo_mapping

Sözlük: Dize -> Dize; varsayılan değer {}'tir

Yerel depo adından küresel depo adına bir sözlük. Bu, bu deposunun bağımlılıklarının çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olmanızı sağlar.

Örneğin, "@foo": "@bar" girişi, bu deponun "@foo"'e bağımlı olduğu her durumda ("@foo//some:target"'e bağımlılık gibi) bu bağımlılığı aslında global olarak tanımlanmış "@bar" ("@bar//some:target") içinde çözmesi gerektiğini belirtir.

android_sdk_repository

Kural kaynağını görüntüleme
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

Android hedeflerini oluşturmayı desteklemek için Bazel'i yerel bir Android SDK'sı kullanacak şekilde yapılandırır.

Örnekler

Bazel için Android SDK'sı oluşturmak için gereken minimum işlem, WORKSPACE dosyanıza "androidsdk" adlı bir android_sdk_repository kuralı eklemek ve $ANDROID_HOME ortam değişkenini Android SDK'nızın yoluna ayarlamaktır. Bazel, varsayılan olarak Android SDK'sına yüklenen en yüksek Android API düzeyini ve derleme araçları sürümünü kullanır.
android_sdk_repository(
    name = "androidsdk",
)

Tekrarlanabilir derlemeler sağlamak için path, api_level ve build_tools_version özellikleri belirli değerlere ayarlanabilir. Android SDK'da belirtilen API düzeyi veya derleme araçları sürümü yüklü değilse derleme başarısız olur.

android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)

Yukarıdaki örnekte, Android SDK'sına Workspace'e göreli bir yol kullanılması da gösterilmektedir. Bu, Android SDK'sı Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne eklenmişse) kullanışlıdır.

Destek Kitaplıkları

Destek kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" olarak bulunur. Bu, yerel bir Maven deposu olarak paketlenmiş, Support ve AppCompat kitaplıkları gibi yaygın Android kitaplıklarından oluşan sürümlü bir gruptur. android_sdk_repository, bu kitaplıkların her biri için android_binary ve android_library hedeflerinin bağımlılıklarında kullanılabilecek Bazel hedefleri oluşturur.

Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki kitaplıkların Maven koordinatlarından türetilir ve @androidsdk//${group}:${artifact}-${version} olarak biçimlendirilir. Aşağıdaki örnekte, bir android_library'nin v7 uygulama uyumluluğu kitaplığının 25.0.0 sürümüne nasıl bağımlı olabileceği gösterilmektedir.

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

api_level

Tamsayı; yapılandırılamaz; varsayılan değer 0

Varsayılan olarak derleme için kullanılacak Android API düzeyi. Belirtilmemişse yüklü en yüksek API seviyesi kullanılır.

Belirli bir derleme için kullanılan API düzeyi, android_sdk işaretiyle geçersiz kılınabilir. android_sdk_repository, bu özellik belirtilmiş olsun veya olmasın, SDK'ya yüklenmiş her API düzeyi için @androidsdk//:sdk-${level} adlı bir android_sdk hedefi oluşturur. Örneğin, varsayılan olmayan bir API düzeyine göre derleme yapmak için: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

android_sdk_repository tarafından oluşturulan tüm android_sdk hedeflerini görüntülemek için bazel query "kind(android_sdk, @androidsdk//...)"'yi çalıştırabilirsiniz.

build_tools_version

Dize; yapılandırılamaz; varsayılan değer ""

Android SDK'sından kullanılacak Android derleme araçlarının sürümü. Belirtilmemişse yüklü olan en son derleme araçları sürümü kullanılır.

Bazel için derleme araçları 30.0.0 veya sonraki bir sürüm gereklidir.

path

Dize; yapılandırılamaz; varsayılan değer ""

Android SDK'sının mutlak veya göreli yolu. Bu özellik veya $ANDROID_HOME ortam değişkeni ayarlanmalıdır.

Android SDK'sını Android Developers sitesinden indirebilirsiniz.

repo_mapping

Sözlük: Dize -> Dize; varsayılan değer {}'tir

Yerel depo adından küresel depo adına bir sözlük. Bu, bu deposunun bağımlılıklarının çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olmanızı sağlar.

Örneğin, "@foo": "@bar" girişi, bu deponun "@foo"'e bağımlı olduğu her durumda ("@foo//some:target"'e bağımlılık gibi) bu bağımlılığı aslında global olarak tanımlanmış "@bar" ("@bar//some:target") içinde çözmesi gerektiğini belirtir.