Android Kuralları

Kurallar

android_binary

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 olarak işaretlenmiş bir Android uygulama paketi dosyası, uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Hata ayıklama anahtarlarıyla imzalandığında uygulamanızı yayınlayamazsınız.
  • name_unsigned.apk: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen imzalanmamış bir sürümü.
  • name_deploy.jar: Bu hedefin geçişli kapanışını içeren bir Java arşivi.

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

  • name_proguard.jar: name_deploy.jar üzerinde ProGuard'ın çalıştırılmasının sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilirse üretilir.
  • name_proguard.map: name_deploy.jar üzerinde ProGuard'ın çalıştırılmasının bir eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilir ve proguard_generate_mapping veya shrink_resources ayarlanırsa oluşturulur.

Örnekler

Android kural örneklerini, Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

İkili hedefe bağlanacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri şunlardır: android kısıtlamasına sahip android_library, java_library ve Android hedef platformu için .so yerel kitaplıkları sarmalama veya oluşturma.cc_library
srcs

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir uygulama değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs öğesine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılıp derlendi. (Bu, bir tür veya derleme uzantısına sahip bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

assets

List of labels; optional

Paketlenecek öğelerin listesi. Bu genellikle assets dizinindeki tüm dosyaların glob boyutudur. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizininde olduğu sürece diğer kurallara (dosya oluşturan tüm kurallar) veya diğer paketlerdeki dışa aktarılan dosyalara da başvurabilirsiniz.
assets_dir

String; optional

assets içindeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı ya da hiçbiri sağlanmamalıdır.
crunch_png

Boolean; optional; default is True

PNG'nin önünü açın (ya da kullanmayın). Bu, her zaman yapılan dokuz yama işleminden bağımsızdır. Bu, aapt2'de düzeltilmiş bir aapt hatası için kullanımdan kaldırılmış bir çözümdür.
custom_package

String; optional

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren DERLEME dosyasının bulunduğu dizinden tahmin edilir. Farklı bir paket belirtebilirsiniz ancak yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarına yol açabileceğinden bunun yapılması kesinlikle önerilmez.
debug_key

Label; optional; default is @bazel_tools//tools/android:debug_keystore

Hata ayıklama apk'sini imzalamak için kullanılacak hata ayıklama anahtar deposunu içeren dosya. Genellikle varsayılan anahtar dışında bir anahtar kullanmak istemediğinizden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_keys

List of labels; optional

Hata ayıklama apk'sini imzalamak için kullanılacak dosya ve hata ayıklama anahtar depoları listesi. Genellikle varsayılan anahtar dışında anahtar kullanmak istemediğinizden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

debug_signing_lineage_file

Label; optional

Debugger_signing_keys için imzalama sırasını içeren dosya. Genellikle varsayılan anahtar dışında anahtar kullanmak istemediğinizden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır.

densities

List of strings; optional

APK'yı oluştururken filtrelenecek yoğunluklar. Bu işlem, APK boyutunu küçültmek için belirtilen ekran yoğunluklarına sahip bir cihaz tarafından yüklenmeyecek kafes çekilebilir kaynaklarını çıkarır. Buna karşılık gelen bir uyumlu ekranlar bölümü, önceden üst küme girişi içermiyorsa manifest'e de eklenir.
dex_shards

Integer; optional; default is 1

Çevrilmesi gereken parça sayısı, parçalara ayrılmalıdır. Böylece uygulama yükleme ve başlatma süresinden tasarruf ederek dexme işlemini çok daha hızlı hale getirebilirsiniz. İkili dosya ne kadar büyük olursa o kadar fazla parça kullanılmalıdır. 25, deneme yapmaya başlamak için iyi bir değerdir.

Her kırığın, son uygulamada en az bir dex ile sonuçlanacağını unutmayın. Bu nedenle, sürüm ikili programları için bunun 1'den fazla bir değere ayarlanması önerilmez.

dexopts

List of strings; optional

sınıflar.dex oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.
enable_data_binding

Boolean; optional; default is False

Doğru değerine ayarlanırsa 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ı üretir.

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

  1. Bu özelliği, geçişli olarak buna bağımlı 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. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlamayla da oluşturmaları gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu depo ayarlarınıza göre değişir.
incremental_dexing

Integer; optional; nonconfigurable; default is -1

Hedefi artımlı sıralamayı geçersiz kılma, varsayılanları geçersiz kılma ve --incremental_dexing işaretiyle veya bu işaret olmadan oluşturulmaya zorlayın.
instruments

Label; optional

Araca android_binary hedefi.

Bu özellik ayarlanırsa bu android_binary, araç testleri için bir test uygulaması olarak değerlendirilir. Böylece android_instrumentation_test hedefi, bu hedefi test_app özelliğinde belirtebilir.

javacopts

List of strings; optional

Bu hedef için ekstra derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

key_rotation_min_sdk

String; optional

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

Label; optional

Metin dosyası, sınıf dosyası adlarının listesini içerir. Bu sınıf dosyaları tarafından tanımlanan sınıflar, birincil sınıflar.dex bölümüne yerleştirilir. Ör.:
          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 birlikte kullanılmalıdır.
main_dex_list_opts

List of strings; optional

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

List of labels; optional

Ana dizinde 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

Label; required

Android manifest dosyasının adı (normalde AndroidManifest.xml). resource_files veya varlıklar tanımlanıyorsa tanımlanmalıdır.
manifest_values

Dictionary: String -> String; optional

Manifest'te geçersiz kılınacak değerlerden oluşan bir sözlük. 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 Use-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. BundleName yoksayılır ve belirtildiyse applicationId'den veya manifest'teki paketten ayarlanır. Manifest_merger eski olarak ayarlandığında yalnızca applicationId, versionCode ve versionName geçerli olur.
multidex

String; optional; default is "native"

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öler. Çalışma zamanında multidex sınıfları yüklemek için yerel platform desteği olduğunu varsayar. Bu özellik 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öler. Multidex sınıflarının uygulama kodu üzerinden yüklendiği varsayılır (yerel platform desteği yoktur).
  • manual_main_dex: Dex 64K dizin sınırı aşıldığında kodu birden fazla dex dosyasına böler. Ana dex dosyasının içeriği, main_dex_list özelliği kullanılarak bir metin dosyasında sınıfların listesi sağlanarak belirtilmelidir.
  • off: Dizin sınırını aşsa bile tüm kodları tek bir dex dosyasında derleyin.
nocompress_extensions

List of strings; optional

APK'da sıkıştırılmamış halde kalacak dosya uzantılarının listesi.
package_id

Integer; optional; default is 0

Bu ikili programdaki kaynaklara atanacak paket kimliği.

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

plugins

List of labels; optional

Derleme zamanında çalışacak Java derleyici eklentileri. Eklentiler özelliğinde belirtilen her java_plugin, bu hedef oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına eklenir.
proguard_apply_dictionary

Label; optional

ProGuard için eşleme olarak kullanılacak dosya. Kod karartma sırasında sınıf ve üyeleri yeniden adlandırırken çıkarılacak "words" (kelimeler) için satırla ayrılmış bir dosya.
proguard_apply_mapping

Label; optional

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

Boolean; optional; nonconfigurable; default is False

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

UYARI: Bu özellik kullanılırsa ProGuard spesifikasyonu ne -dontobfuscate ne de -printmapping içermelidir.

proguard_specs

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bu dosya, ProGuard tarafından kullanılacak teknik özellikleri açıklar.
resource_configuration_filters

List of strings; optional

Apk'taki kaynakları yalnızca "en" yapılandırmasındakilerle sınırlandıran "en" gibi kaynak yapılandırma filtrelerinin listesi. Sözde yerelleştirmeyi etkinleştirmek için en_XA ve/veya ar_XB sözde yerel ayarlarını ekleyin.
resource_files

List of labels; optional

Paketlenecek kaynakların listesi. Bu genellikle res dizinindeki tüm dosyaların glob boyutudur.
Oluşturulan dosyalara (genrules'dan) burada Label aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininde olması gerektiğidir.
shrink_resources

Integer; optional; default is -1

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

Önemli farklılıklar:

  • hem values/ içindeki kaynaklar hem de dosya tabanlı kaynaklar kaldırılacak
  • varsayılan olarak strict mode kullanır
  • kullanılmayan kimlik kaynaklarının kaldırılması yalnızca aapt2 ile desteklenir
Kaynak daraltma etkinleştirilirse gerçekleştirilen analiz ve silme işlemlerinin ayrıntılarını içeren name_files/resource_shrinker.log de oluşturulur.

Olası değerler:

  • shrink_resources = 1: Android kaynağını daraltmayı etkinleştirir
  • shrink_resources = 0: Android kaynağı daraltmayı kapatır
  • shrink_resources = -1: Daraltma işlemi, --android_resource_shrinking işareti tarafından kontrol edilir.

aar_import

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 izin verir.

Ö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

Name; required

Bu hedef için benzersiz bir ad.

aar

Label; required

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

List of labels; optional

Bu kurala bağlı kurallara dışa aktarılacak hedefler. Bkz. java_library.exports.
srcjar

Label; optional

AAR'de derlenmiş JAR dosyaları için kaynak kodu içeren JAR dosyası.

android_library

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ı bir .jar dosyasında derleyip arşivler. Android çalışma zamanı kitaplığı android.jar, dolaylı yoldan derleme sınıfı yoluna yerleştirilir.

Örtülü çıkış hedefleri

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

Örnekler

Android kural örneklerini, Bazel kaynak ağacının examples/android dizininde bulabilirsiniz.

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

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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

Bağlantı oluşturulacak diğer kitaplıkların listesi. İzin verilen kitaplık türleri şunlardır: android_library, android kısıtlamasıyla java_library ve Android hedef platformu için .so yerel kitaplıkları sarmalama veya oluşturma.cc_library
srcs

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir uygulama değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs öğesine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılıp derlendi. (Bu, bir tür veya derleme uzantısına sahip bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

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

assets

List of labels; optional

Paketlenecek öğelerin listesi. Bu genellikle assets dizinindeki tüm dosyaların glob boyutudur. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizininde olduğu sürece diğer kurallara (dosya oluşturan tüm kurallar) veya diğer paketlerdeki dışa aktarılan dosyalara da başvurabilirsiniz.
assets_dir

String; optional

assets içindeki dosyaların yolunu veren dize. assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı ya da hiçbiri sağlanmamalıdır.
custom_package

String; optional

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren DERLEME dosyasının bulunduğu dizinden tahmin edilir. Farklı bir paket belirtebilirsiniz ancak yalnızca çalışma zamanında algılanacak diğer kitaplıklarla sınıf yolu çakışmalarına yol açabileceğinden bunun yapılması kesinlikle önerilmez.
enable_data_binding

Boolean; optional; default is False

Doğru değerine ayarlanırsa 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ı üretir.

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

  1. Bu özelliği, geçişli olarak buna bağımlı 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. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlamayla da oluşturmaları gerekir.
  2. Bu özelliği ayarlayan tüm hedeflere veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekleyin. Bu kitaplığın konumu depo ayarlarınıza göre değişir.
exported_plugins

List of labels; optional

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

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağımlı olan tüm kitaplığa, tıpkı kitaplık bu etiketleri plugins içinde açıkça bildirmiş gibi uygulanır.

exports

List of labels; optional

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

exports, ait oldukları kuralın doğrudan altları değil.

exports_manifest

Integer; optional; default is 1

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

String; optional

Bu kitaplıkta yer alan idl kaynaklarını içeren Java paket ağacı kökünün pakete bağlı yolu.

Bu yol, bu kitaplığa bağlı olan idl kaynakları işlenirken 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.

Örnekleri inceleyin.

idl_parcelables

List of labels; optional

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

Yalnızca bu kitaplıktaki .java kaynağı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, yardımcı derleyicinin onları bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi edinmek için idl_import_root açıklamasına bakın.

idl_preprocessed

List of labels; optional

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

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

idl_srcs

List of labels; optional

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 bağlı olan tüm android_library hedefleri için doğrudan veya geçişli kapatma yoluyla içe aktarma olarak kullanıma sunulur.

Bu dosyalar, yardımcı derleyicinin onları bulabilmesi için uygun şekilde yerleştirilmelidir. Bunun ne anlama geldiği hakkında bilgi edinmek için idl_import_root açıklamasına bakın.

javacopts

List of strings; optional

Bu hedef için ekstra derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

manifest

Label; optional

Android manifest dosyasının adı (normalde AndroidManifest.xml). resource_files veya varlıklar tanımlanıyorsa tanımlanmalıdır.

Boolean; optional; default is False

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

List of labels; optional

Derleme zamanında çalışacak Java derleyici eklentileri. Eklentiler özelliğinde belirtilen her java_plugin, bu hedef oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyasına eklenir.
proguard_specs

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanmaktadır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca eş anlamlı kuralları (-dontnote, -dontwarn, forcenosideeffects ve -keep ile başlayan kurallar) olmalıdır. Diğer seçenekler, ttolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary ürününün proGuard_specs bölümünde görünebilir.
resource_files

List of labels; optional

Paketlenecek kaynakların listesi. Bu genellikle res dizinindeki tüm dosyaların glob boyutudur.
Oluşturulan dosyalara (genrules'dan) burada Label aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların dahil edilen diğer kaynak dosyalarıyla aynı "res" dizininde olması gerektiğidir.

android_instrumentation_test

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)

Bir android_instrumentation_test kuralı, Android enstrümantasyon testlerini çalıştırır. Bu noktada bir emülatör başlatılır, test edilmekte olan uygulamayı, test uygulamasını ve gerekli diğer uygulamaları yükler, test paketinde tanımlanan testleri çalıştırır.

test_app özelliği, testi içeren android_binary özelliğini belirtir. Bu android_binary, test edilen android_binary uygulamasını araçlar özelliğiyle 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

Name; required

Bu hedef için benzersiz bir ad.

support_apks

List of labels; optional

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

Label; required

Testin çalıştırılacağı android_device cihazı.

Testi, zaten ç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

Label; required

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

android_local_test

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ın yerel olarak (cihazda değil) test edilmesi içindir. Android Robofactric test çerçevesiyle çalışır. Robofactric testleri yazma hakkında ayrıntılı bilgi için Android Robofactric sitesine bakın.

Örtülü çıkış hedefleri

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

Örnekler

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

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
Bu işlem, Robofactric için gereken maven_jar kurallarını çeker. Daha sonra her android_local_test kuralı, @robolectric//bazel:robolectric değerine 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:robolectric",
    ],
)

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

Test edilecek kitaplıkların listesi ve hedefe bağlanacak ek kitaplıkların listesi. Bu özelliğin geçişli olarak kapanması sırasında Android kurallarında tanımlanan tüm kaynaklar, öğeler ve manifest dosyaları testte kullanıma sunulur.

deps politikasında izin verilen kurallar listesi: android_library, aar_import, java_import, java_library ve java_lite_proto_library.

srcs

List of labels; optional

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

.java türündeki srcs dosya derlendi. Okunabilirlik açısından, oluşturulan bir .java kaynak dosyasının adını srcs içine yerleştirmek iyi bir uygulama değildir. Bunun yerine, bağımlı kural adını aşağıda açıklandığı gibi srcs öğesine yerleştirin.

.srcjar türündeki srcs dosyaları paketten çıkarılıp derlendi. (Bu, bir tür veya derleme uzantısına sahip bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

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 verilir.

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

custom_package

String; optional

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

List of strings; optional

APK'yı oluştururken filtrelenecek yoğunluklar. Buna karşılık gelen bir uyumlu ekranlar bölümü, halihazırda bir üst küme StarlarkListing içermiyorsa manifest dosyasına da eklenir.
enable_data_binding

Boolean; optional; default is False

Doğru değerine ayarlanırsa bu kural, bu testin kullandığı veri bağlama özelliğinin etkin olduğu bağımlılıklarda kullanılan veri bağlama referanslarını işler. Bu ayar olmadan, veri bağlama bağımlılıklarında ikili program düzeyinde kod oluşturma işlemi gerekmez ve derleme hataları ortaya çıkabilir.
javacopts

List of strings; optional

Bu kitaplık için ekstra derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuğu belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

jvm_flags

List of strings; optional

Bu ikili programı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" değişikliğine ve Bourne kabuğu belirtkeleme'ne tabidir.

Java ikilisi için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) 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 "$@" ifadesini 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ırmaya yönelik bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags öğesinin içeriği, sınıf adı listelenmeden önce sarmalayıcı komut dosyasına eklenir.

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

manifest

Label; optional

Android manifest dosyasının adı (normalde AndroidManifest.xml). source_files veya öğeler tanımlanmışsa ya da test edilen kitaplıklardaki manifestlerin herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
manifest_values

Dictionary: String -> String; optional

Manifest'te geçersiz kılınacak değerlerden oluşan bir sözlük. 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, manifestin ve use-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yok sayılır ve belirtilirse applicationId öğesinden veya manifest'teki paketten ayarlanır. Manifest_values için kuralda bir manifest olması gerekmez.
nocompress_extensions

List of strings; optional

Kaynak APK'sında sıkıştırılmamış olarak bırakılacak dosya uzantılarının listesi.
plugins

List of labels; optional

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin, bu kural oluşturulduğunda çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan eklentiler de devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın sonuç jar dosyasına eklenir.
resource_configuration_filters

List of strings; optional

Apk'taki kaynakları yalnızca "en" yapılandırmasındaki kaynaklarla sınırlayacak "en" gibi kaynak yapılandırma filtrelerinin listesi.
resource_jars

List of labels; optional

Kullanımdan kaldırıldı: Bunun yerine java_import ve deps veya schedule_deps kullanın.
resource_strip_prefix

String; optional

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Hata, kaynak dosyasının bu dizin altında olmamasıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, kaynak dosyaların Java paketi ile aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

List of labels; optional

Yalnızca çalışma zamanında nihai ikili programın veya testin kullanılabilmesini sağlayacak kitaplıklar. Sıradan deps gibi bunlar da çalışma zamanı sınıf yolunda görünür ancak bunların aksine derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
stamp

Integer; optional; default is 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucunu önbelleğe alma olanağı sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

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

test_class

String; optional

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

Bu özellik, bu test tarafından çalıştırılacak Java sınıfının adını belirtir. Bu ayarı yapmak nadiren gerekebilir. 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ına org.junit.runner.RunWith ifadesi eklenmelidir.

use_launcher

Boolean; optional; default is True

İkili programın özel bir başlatıcı kullanıp kullanmayacağı.

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

android_device

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 bir bazel çalıştırma komutuyla veya oluşturulan komut dosyasının doğrudan yürütülmesiyle başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarını temel almanız önerilir.

Bu kural, bazel testi ve ateşleme amacıyla --run_under bayrağı için uygun bir hedeftir. Sistem bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve test eder veya uygun şekilde çalıştırır.

Temel system_image X86 tabanlıysa ve en fazla I686 CPU mimarisi için optimize edilmişse android_device, KVM görüntüleri 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 görüntü dosyaları ve anlık görüntüler içerir
  • name_images/emulator-meta-data.pb: Emülatörü yeniden başlatmak üzere emülatöre iletmek 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. Emülatörü yerel olarak başlatmak için bazel run :nexus_s -- --action=start komutunu çalıştırın. Komut dosyası aşağıdaki işaretleri gösterir:

  • --adb_port: Adb'nin açılacağı bağlantı noktası. Emülatöre adb komutları yayınlamak isterseniz adb bağlantısı vereceğiniz bağlantı noktası budur.
  • --emulator_port: Emülatörün telnet yönetim konsolunun açılacağı bağlantı noktası.
  • --enable_display: Doğru değerine ayarlanırsa emülatörü bir ekranla başlatır (varsayılan değer false'tur).
  • --action: Ya başlatın ya da sonlandırın.
  • --apks_to_install: emülatöre yüklenecek apk'lerin listesi.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

cache

Integer; required

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

Label; optional

Emülatörde /default.prop için yerleştirilecek tek bir özellikler dosyası. Bu, kural yazarının emülatörü daha fazla gerçek bir cihaz gibi görünecek şekilde yapılandırmasına olanak tanır (özellikle, UserAgent dizelerinin ve bir uygulamanın veya sunucunun belirli bir cihaza göre farklı davranmasına neden olabilecek diğer davranışların kontrol edilmesi). Bu dosyadaki özellikler, ro.product.model gibi genellikle emülatör tarafından ayarlanan salt okunur özellikleri geçersiz kılar.
horizontal_resolution

Integer; required

Emülasyon için kullanılacak yatay ekran çözünürlüğü. Minimum değer 240'tır.
platform_apks

List of labels; optional

Açılış sırasında cihaza yüklenecek apk'lerin listesi.
ram

Integer; required

Cihaz için emülecek megabayt cinsinden ram miktarı. 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

Integer; required

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

Label; required

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: Başlatma sırasında kullanılacak ilk görüntü
  • userdata.img: İlk kullanıcı verisi bölümü
  • source.properties: Resimler hakkında bilgiler içeren bir özellikler dosyası
Bu dosyalar, Android SDK'nın bir parçasıdır veya üçüncü taraflarca sağlanır (örneğin, Intel, x86 görüntüleri sağlar).
vertical_resolution

Integer; required

Emülasyon için piksel cinsinden dikey ekran çözünürlüğü. Minimum değer 240'tır.
vm_heap

Integer; required

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

android_ndk_repository(name, api_level, path, repo_mapping)

Yerel kodla Android hedefleri oluşturmayı desteklemek için Bazel'ı Android NDK kullanacak şekilde yapılandırır.

Android için geliştirme yapmak için WORKSPACE dosyanızda android_sdk_repository kuralının da olması gerektiğini unutmayın.

Daha fazla bilgi için Bazel ile Android NDK'yı kullanma hakkındaki belgelerin tamamını okuyun.

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, $ANDROID_NDK_HOME kaynağından 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 bölgesindeki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzeyi 24 kitaplıklarını kullanır.

CPU özellikleri

Android NDK, çalışma zamanında cihazın CPU'sunu algılamak için kullanılabilen cpufeatures kitaplığını içerir. Aşağıdaki örnekte Bazel ile CPU özelliklerinin 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

Name; required

Bu hedef için benzersiz bir ad.

api_level

Integer; optional; nonconfigurable; default is 0

Temel alabileceğiniz Android API düzeyi. Belirtilmezse en yüksek API düzeyi yüklü olur.
path

String; optional; nonconfigurable

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

Android NDK, Android geliştirici sitesinden indirilebilir.

repo_mapping

Dictionary: String -> String; optional

Yerel kod deposu adından genel kod deposu adına bir sözlük. Böylece bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin, bir "@foo": "@bar" girişi bu deponun "@foo" ürününe bağlı olduğu her zaman ("@foo//some:target" üzerindeki bir bağımlılık gibi) söz konusu bağımlılığı global olarak tanımlanan "@bar" ("@bar//some:target") içinde çözmesi gerektiğini bildirir.

android_sdk_repository

android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

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

Örnekler

Bazel için Android SDK'yı ayarlarken WORKSPACE dosyanıza "androidsdk" adlı bir android_sdk_repository kuralı ekleyip $ANDROID_HOME ortam değişkenini Android SDK'nızın yoluna ayarlayabilirsiniz. Bazel, varsayılan olarak en yüksek Android API düzeyini kullanır ve Android SDK'da yüklü olan araçları oluşturur.
android_sdk_repository(
    name = "androidsdk",
)

Yeniden oluşturulabilir 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 çalışma alanına göre bir yolun kullanılması da gösterilmektedir. Android SDK, Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne eklenmişse) bu seçenek yararlıdır.

Destek Kitaplıkları

Destek Kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" adıyla kullanılabilir. Bu, Support ve AppCompat kitaplıkları gibi yerel Maven deposu olarak paketlenmiş, sürümlü bir ortak Android kitaplıkları grubudur. 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 Support Repository'deki kitaplıkların Maven koordinatlarından türetilerek @androidsdk//${group}:${artifact}-${version} olarak biçimlendirilmiştir. Aşağıdaki örnekte, bir android_library öğesinin v7 appcompat kitaplığının 25.0.0 sürümüne nasıl bağlı 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

Name; required

Bu hedef için benzersiz bir ad.

api_level

Integer; optional; nonconfigurable; default is 0

Varsayılan olarak geliştirme yapabileceğiniz Android API düzeyi. Belirtilmezse en yüksek API düzeyi yüklenen kullanılır.

Belirli bir derleme için kullanılan API düzeyi, android_sdk işareti tarafından geçersiz kılınabilir. android_sdk_repository, bu özelliğin belirtilip belirtilmediğinden bağımsız olarak, SDK'da @androidsdk//:sdk-${level} adıyla yüklü olan her API düzeyi için bir android_sdk hedefi oluşturur. Örneğin, varsayılan olmayan bir API düzeyini temel alarak uygulama geliştirmek için: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

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

build_tools_version

String; optional; nonconfigurable

Android SDK'sının içinden kullanılacak Android derleme araçlarının sürümü. Belirtilmezse yüklü olan en son derleme araçları sürümü kullanılır.

Bazel, derleme araçları sürümü 30.0.0 veya üzerini gerektirir.

path

String; optional; nonconfigurable

Android SDK'ya giden mutlak veya göreli yol. Bu özellik veya $ANDROID_HOME ortam değişkeni ayarlanmalıdır.

Android SDK, Android geliştirici sitesinden indirilebilir.

repo_mapping

Dictionary: String -> String; optional

Yerel kod deposu adından genel kod deposu adına bir sözlük. Böylece bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin, bir "@foo": "@bar" girişi bu deponun "@foo" ürününe bağlı olduğu her zaman ("@foo//some:target" üzerindeki bir bağımlılık gibi) söz konusu bağımlılığı global olarak tanımlanan "@bar" ("@bar//some:target") içinde çözmesi gerektiğini bildirir.