Android Kuralları

. Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Kurallar

android_binary

Kural kaynağını görüntüle
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.

Dolaylı çıkış hedefleri

  • name.apk: Bir Android uygulaması hata ayıklama anahtarları ve zipaligned varsa uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Hata ayıklama anahtarlarıyla imzalandığında uygulamanızı bırakamazsınız.
  • name_unsigned.apk: Belgenin imzalanmamış sürümü öğesini kullanarak yayınlamadan önce sürüm anahtarlarıyla imzalanabilecek dosyayı teslim etmeyi amaçlar.
  • name_deploy.jar: geçişli olarak kapatılmasına neden olabilir.

    Dağıtma jar dosyası, her bir komut dosyasının Bu hedefin çalışma zamanı sınıf yolunu arayan classloader baştan sona.

  • name_proguard.jar: Aşağıdakileri içeren bir Java arşivi ProGuard'ı çalıştırmanın sonucu name_deploy.jar. Bu çıkış yalnızca şu durumlarda üretilir: proguard_specs özelliği belirtiliyor.
  • name_proguard.map: Eşleme dosyası sonucu: name_deploy.jar üzerinde ProGuard'ı çalıştırıyorum. Bu çıkış yalnızca şu durumlarda üretilir: proguard_specs özelliği belirtilmiş ve proguard_generate_mapping veya shrink_resources ayarlanmış olmalıdır.

Örnekler

Android kuralı örneklerini şu uygulamanın examples/android dizininde bulabilirsiniz: Bazel kaynak ağacı.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

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

.java türündeki srcs dosyaları derlendi. Okunabilirlik açısından srcs içinde .java kaynak dosya oluşturuldu. Bunun yerine, bağımlı kuralının adını srcs bölümüne yerleştirin. bakın.

.srcjar türündeki srcs dosyanın paketi açılmış ve derlendi. (Bu, .java dosyaları kümesi oluşturmanız gerekiyorsa yararlı olur: veya derleme uzantısı gibi gelen sesler için kullanılabilir.)

assets

Etiket listesi; varsayılan değer []

Paketlenecek öğelerin listesi. Bu genellikleglob assets dizini. Ayrıca, başka kurallara da dâhil olmak üzere dosyaları) ya da diğer paketlerdeki dışa aktarılan dosyaları (bu dosyalar, İlgili paketteki assets_dir dizini.
assets_dir

String; varsayılan değer ""

assets içindeki dosyaların yolunu belirten dize. assets ve assets_dir çifti, "paketlenmiş" ifadesini tanımlar öğelerin her ikisi de sağlanmalı veya hiçbiri sağlanmamalıdır.
crunch_png

Boole; varsayılan değer True

PNG uygulaması yapın (veya kullanmayın). Bu, dokuz yama işlemeden bağımsızdır ve tamamlandı. Bu, aapt hatası aapt2'de düzeltildi.
custom_package

String; varsayılan değer ""

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, BUILD dosyasının bulunduğu dizinden belirlenir. belirleyecek olan kişi odur. Farklı bir paket belirtebilirsiniz ancak bu diğer sınıflarla sınıf yolu çatışmalarına yol açabileceğinden, yalnızca çalışma zamanında algılanacak kitaplıklar bu kapsamdadır.
debug_key

Etiket; varsayılan değer "@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 bu araçlar varsayılan anahtardan farklı bir anahtar kullanmak istediğinden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, temin edilir ve kaynak ağacınızda tutulmaz.

debug_signing_keys

Etiket listesi; varsayılan değer []

Dosya listesi, hata ayıklama apk'sini imzalamak için kullanılacak hata ayıklama anahtar depoları. Genellikle bu araçlar varsayılan anahtardan farklı anahtarlar kullanmak istediğinden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, temin edilir ve kaynak ağacınızda tutulmaz.

debug_signing_lineage_file

Etiket; varsayılan değer None

error_signing_keys için imzalama sırasını içeren dosya. Genellikle bu araçlar varsayılan anahtardan farklı anahtarlar kullanmak istediğinden bu özellik atlanmalıdır.

UYARI: Üretim anahtarlarınızı kullanmayın, temin edilir ve kaynak ağacınızda tutulmaz.

densities

Dize listesi; varsayılan değer []

Apk oluşturulurken filtrelenecek yoğunluklar. Bu işlem, belirtilen ekran yoğunluklarını kullanarak APK boyutunu küçültün. İlgili uyumlu ekranlar bölümü, halihazırda bir üst küme içermiyorsa manifeste eklenir inceleyebilirsiniz.
dex_shards

Tam sayı; varsayılan değer 1

Ayrıştırılması gereken kırık sayısı. Bu da uygulama yükleme ve başlatma süresi pahasına, dexing işlemini çok daha hızlı hale getirir. İlgili içeriği oluşturmak için kullanılan o kadar fazla parça kullanılmalıdır. Başlangıç için 25 iyi bir değerdir. yardımcı olur.

Her kırığın son uygulamada en az bir dex olacağını unutmayın. İşte bu nedenle Bunun 1'den fazlasına ayarlanması, yayın ikili programları için önerilmez.

dexopts

Dize listesi; varsayılan değer []

sınıflar.dex oluşturulurken dx aracı için ek komut satırı işaretleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.
enable_data_binding

Boole; varsayılan değer False

True (doğru) ise bu kural, veriler bağlama ifadeleriyle birlikte verilen düzen kaynaklarında resource_files özelliği. Bu olmadan ayarı, veri bağlama ifadeleri derleme hataları oluşturur.

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

  1. Geçişli olarak buna bağlı tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kuralın veri bağlama ifadelerini kaynak üzerinden devralmasıdır. birleştiriliyor. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Tüm hedeflere veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekle değerleridir. Bu kitaplığın konumu, depo kurulumunuza bağlıdır.
incremental_dexing

Tam sayı; nonconfig; varsayılan değer -1

Varsayılanları geçersiz kılarak, hedefin artımlı dexing ile veya artımlı dexit olmadan oluşturulmasını zorla ve --incremental_dexing işareti.
instruments

Etiket; varsayılan değer None

android_binary aracı hedefi.

Bu özellik ayarlanırsa android_binary bir test olarak değerlendirilir araç testleri uygulaması. android_instrumentation_test target, bu hedefi test_app özelliği için de geçerlidir.

javacopts

Dize listesi; varsayılan değer []

Bu hedef için ekstra derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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

key_rotation_min_sdk

String; varsayılan değer ""

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

Etiket; varsayılan değer None

Bir metin dosyası, sınıf dosyası adlarının listesini içerir. Bu sınıf dosyalarıyla tanımlanan sınıflar, birincil sınıflar.dex'tir. e.g.:
          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

Dize listesi; varsayılan değer []

Ana dex listesi oluşturucuya aktarılacak 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

Etiket listesi; varsayılan değer []

İçinde tutulması gereken sınıfları belirlemek için ProGuard spesifikasyonları olarak kullanılacak dosyalar büyük dex. Yalnızca multidex özelliği legacy olarak ayarlanırsa izin verilir.
manifest

Etiket; zorunlu

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). resource_files veya assets tanımlanırsa tanımlanmalıdır.
manifest_values

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

Manifest'te geçersiz kılınacak değerler sözlüğü.

Manifest'teki tüm ${name} örnekleri, bu sözlükteki ada karşılık gelir.

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

packageName yoksayılır ve şu iki ayardan ayarlanır: Belirtilmişse applicationId veya manifestteki paket.

manifest_merger, legacy olarak ayarlandığında yalnızca applicationId, versionCode ve versionName şunu yapacak: herhangi bir etkisi olmaz.

multidex

String; varsayılan değer "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ı olduğunda kodu birden fazla dex dosyasına böl aşıldığından emin olun. Çalışma zamanında multidex sınıflarını yüklemek için yerel platform desteği olduğunu varsayar. Bu özellik yalnızca Android L ve sonraki modellerde çalışır.
  • legacy: Dex 64K dizin sınırı olduğunda kodu birden fazla dex dosyasına böl aşıldığından emin olun. Multidex sınıflarının uygulama kodu ile yüklendiğini varsayar (ör. yerel platform desteği).
  • manual_main_dex: Dex 64K olduğunda kodu birden fazla dex dosyasına ayırın dizin sınırı aşıldı. Ana dex dosyasının içeriği kullanarak bir metin dosyasında sınıfların listesini sağlamak main_dex_list özelliği hakkında daha fazla bilgi edinin.
  • off: Şu değeri aşsa bile tüm kodu tek bir dex dosyasında derleyin: dizin sınırı.
nocompress_extensions

Dize listesi; varsayılan değer []

Apk'de sıkıştırılmamış halde bırakılacak dosya uzantılarının bir listesi.
package_id

Tam sayı; varsayılan değer 0

Bu ikili programdaki kaynaklara atanacak paket kimliği.

Daha fazla bilgi için AAPT2'nin --package-id bağımsız değişkenini inceleyin. Bu, genellikle ayarlanmadan bırakılırsa varsayılan değer 127 olur. (0x7F).

plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Belirtilen her java_plugin Eklentiler özelliği bu hedef oluşturuldu. Kaynaklar: eklenti, yardımcı olur.
proguard_apply_dictionary

Etiket; varsayılan değer None

ProGuard için eşleme olarak kullanılacak dosya. Satırla ayrılmış bir "kelimeler" dosyası sırasında sınıf ve üyeleri yeniden adlandırırken kod karartma.
proguard_apply_mapping

Etiket; varsayılan değer None

ProGuard için eşleme olarak kullanılacak dosya. proguard_generate_mapping tarafından oluşturulan yeniden kullanılır.
proguard_generate_mapping

Boole; nonconfig; varsayılan değer False

ProGuard eşleme dosyası oluşturulup oluşturulmayacağı. Eşleme dosyası yalnızca proguard_specs belirtiliyor. Bu dosya, orijinal ile kod karartma uygulanmış sınıf, yöntem ve alan adları.

UYARI: Bu özellik kullanılırsa ProGuard spesifikasyon ne -dontobfuscate ne de -printmapping

proguard_specs

Etiket listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

Kaynak yapılandırma filtrelerinin listesi (ör. "tr") kaynak kullanımını sınırlandıracak apk'yi yalnızca 'en'dekilerle değiştirin yapılandırma. Sahte yerelleştirmeyi etkinleştirmek için en_XA ve/veya ar_XB sözde yerel ayar.
resource_files

Etiket listesi; varsayılan değer []

Paketlenecek kaynakların listesi. Bu genellikleglob res dizini.
. Oluşturulan dosyalara (genrules'tan) şuradan referans verilebilir: Buraya da etiket ekleyin. Tek kısıtlama şu: oluşturulan çıkışlar aynı "res" altında olmalıdır diğer dizinlerdeki gibi kaynak dosyalarının her biri.
shrink_resources

Tam sayı; varsayılan değer -1

Kaynak daraltmanın 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) gerektirir ve ProGuard gerektirir. Gradle kaynak daraltıcı ile aynı şekilde çalışır. (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

Önemli farklılıklar:

  • values/ kaynağındaki kaynaklar ve dosya tabanlı kaynaklar
  • varsayılan olarak strict mode değerini kullanır
  • Kullanılmayan kimlik kaynaklarını kaldırma işlemi yalnızca aapt2 ile desteklenir
Kaynak daraltma etkinse name_files/resource_shrinker.log oluşturulan analiz ve silme işlemlerinin ayrıntılarını içeren bir belge de oluşturulur.

Olası değerler:

  • shrink_resources = 1: Android kaynak daraltma özelliğini açar
  • shrink_resources = 0: Android kaynak daraltma özelliğini devre dışı bırakır
  • shrink_resources = -1: Küçültme --android_resource_shrinking işaretini kaldırın.

aar_import

Kural kaynağını görüntüle
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, .aar dosyalarının şunlar için kitaplık olarak kullanılmasına izin verir: android_library ve android_binary kural.

Ö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

Etiket listesi; varsayılan değer []

Bu kurala bağlı olan kurallara aktarılacak hedefler. Bkz. java_library.exports.
srcjar

Etiket; varsayılan değer None

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

android_library

Kural kaynağını görüntüle
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ı bir .jar dosyasında derler ve arşivler. Android çalışma zamanı kitaplığı android.jar örtülü olarak başlatıldı emin olmanız gerekir.

Dolaylı çıkış hedefleri

  • libname.jar: Bir Java arşivi.
  • libname-src.jar: Şunu içeren bir arşiv: kaynakları ("kaynak jar") kolaylaştırır.
  • name.aar: Android "aar" Java arşivini içeren paket ve kaynaklarını gözden geçireceğiz. Geçişli kapatmayı içermez.

Örnekler

Android kuralı örneklerini şu uygulamanın examples/android dizininde bulabilirsiniz: Bazel kaynak ağacı.

Aşağıdaki örnekte şunlar gösterilmektedir: idl_import_root nasıl ayarlanır? //java/bazel/helloandroid/BUILD şunları içeriyor:

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

Etiket listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

Şu özelliklere sahip .java veya .srcjar dosyalarının listesi: işlenir.

.java türündeki srcs dosyaları derlendi. Okunabilirlik açısından srcs içinde .java kaynak dosya oluşturuldu. Bunun yerine, bağımlı kuralının adını srcs bölümüne yerleştirin. bakın.

.srcjar türündeki srcs dosyanın paketi açılmış ve derlendi. (Bu, .java dosyaları kümesi oluşturmanız gerekiyorsa yararlı olur: veya derleme uzantısı gibi gelen sesler için kullanılabilir.)

srcs atlanırsa deps, bu kuraldan dışa aktarıldı (bkz. Daha fazla bilgi için Java_library'nin dışa aktarımları (bağımlılıkları dışa aktarmayla ilgili bilgilere bakın). Ancak bu davranış yakında kullanımdan kaldırılacak; ona güvenmemeye çalışın.

assets

Etiket listesi; varsayılan değer []

Paketlenecek öğelerin listesi. Bu genellikleglob assets dizini. Ayrıca, başka kurallara da dâhil olmak üzere dosyaları) ya da diğer paketlerdeki dışa aktarılan dosyaları (bu dosyalar, İlgili paketteki assets_dir dizini.
assets_dir

String; varsayılan değer ""

assets içindeki dosyaların yolunu belirten dize. assets ve assets_dir çifti, "paketlenmiş" ifadesini tanımlar öğelerin her ikisi de sağlanmalı veya hiçbiri sağlanmamalıdır.
custom_package

String; varsayılan değer ""

Java kaynaklarının oluşturulacağı Java paketi. Varsayılan olarak paket, BUILD dosyasının bulunduğu dizinden belirlenir. belirleyecek olan kişi odur. Farklı bir paket belirtebilirsiniz ancak bu diğer sınıflarla sınıf yolu çatışmalarına yol açabileceğinden, yalnızca çalışma zamanında algılanacak kitaplıklar bu kapsamdadır.
enable_data_binding

Boole; varsayılan değer False

True (doğru) ise bu kural, veriler bağlama ifadeleriyle birlikte verilen düzen kaynaklarında resource_files özelliği. Bu olmadan ayarı, veri bağlama ifadeleri derleme hataları oluşturur.

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

  1. Geçişli olarak buna bağlı tüm Android kuralları için bu özelliği ayarlayın. Bunun nedeni, bağımlıların kuralın veri bağlama ifadelerini kaynak üzerinden devralmasıdır. birleştiriliyor. Dolayısıyla, bu ifadeleri ayrıştırmak için veri bağlama ile derlemeleri de gerekir.
  2. Tüm hedeflere veri bağlama çalışma zamanı kitaplığı için bir deps = girişi ekle değerleridir. Bu kitaplığın konumu, depo kurulumunuza bağlıdır.
exported_plugins

Etiket listesi; varsayılan değer []

java_plugin listesi (ör. ek açıklama) işlemcileri) doğrudan bu kitaplığa bağımlı kitaplıklara aktarmak için kullanılır.

Belirtilen java_plugin listesi şu kitaplığa uygulanacaktır: Bu kitaplığa, sanki bu kitaplık açık bir şekilde açıkça beyan edilmiş gibi plugins içinde etiketler.

exports

Etiket listesi; varsayılan değer []

exports özellikleri üzerinden erişilen tüm kuralların kapatılması doğrudan bağımlılığı olan herhangi bir kuralın doğrudan exports ile hedefleyin.

exports, ait olduğu kuralın doğrudan noktası değil.

exports_manifest

Tam sayı; varsayılan değer 1

Manifest girişlerinin android_binary hedeflerine dışa aktarılıp aktarılmayacağı arasında değişir. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
idl_import_root

String; varsayılan değer ""

idl içeren Java paket ağacının köküne giden pakete bağlı yol kaynak (bu kitaplığa dahil).

Bu yol, bu kitaplığa bağımlı hale geleceksiniz.

idl_import_root belirtildiğinde hem idl_parcelables ve idl_srcs, nesnenin Java paketi tarafından belirtilen yolda olmalıdır idl_import_root altında temsil ediliyorlar. idl_import_root şu olduğunda: belirtilmediyse hem idl_parcelables hem de idl_srcs değeri paket tarafından belirtilen Java köküdür.

Bkz. örnekler.

idl_parcelables

Etiket listesi; varsayılan değer []

İçe aktarma olarak sağlanacak Android IDL tanımlarının listesi. Bu dosyalar, Doğrudan bu kitaplığa bağlı android_library hedef veya geçişli kapanma yoluyla gerçekleştirilir, ancak Java'ya çevrilmez. veya derlenebilir.

Yalnızca doğrudan karşılık gelen .aidl dosya Bu kitaplıktaki .java kaynak dahil edilmelidir (ör. özel (parcelable uygulamaları) aksi takdirde idl_srcs, kullanılır.

Bu dosyaların, yardımcı derleyici tarafından bulunabilmesi için uygun şekilde yerleştirilmesi gerekir. idl_import_root açıklamasına bakın 'ni inceleyin.

idl_preprocessed

Etiket listesi; varsayılan değer []

İçe aktarma olarak sağlanacak ön işlenmiş Android IDL tanımlarının listesi. Bu dosyalar, Doğrudan bu kitaplığa bağlı android_library hedef veya geçişli kapanma yoluyla gerçekleştirilir, ancak Java'ya çevrilmez. veya derlenebilir.

Yalnızca.aidl Bu kitaplıktaki .java kaynak dahil edilmelidir (ör. özel (Parcelable uygulamaları), aksi takdirde idl_srcs Java arayüzlerine çevrilmesi gereken Android IDL tanımları idl_parcelable kullan kullanabilirsiniz.

idl_srcs

Etiket listesi; varsayılan değer []

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

Bu dosyalar, Doğrudan bu kitaplığa bağlı android_library hedef veya geçişli kapatma yoluyla kapatılabilir.

Bu dosyaların, yardımcı derleyici tarafından bulunabilmesi için uygun şekilde yerleştirilmesi gerekir. idl_import_root açıklamasına bakın 'ni inceleyin.

javacopts

Dize listesi; varsayılan değer []

Bu hedef için ekstra derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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

manifest

Etiket; varsayılan değer None

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). resource_files veya assets tanımlanırsa tanımlanmalıdır.

Boole; varsayılan değer 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ı şurada kullanılmayacak: .apk oluşturuldu. Kitaplık tarafından sağlanacaksa yararlıdır ortamını bozar.
plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Belirtilen her java_plugin Eklentiler özelliği bu hedef oluşturuldu. Kaynaklar: eklenti, yardımcı olur.
proguard_specs

Etiket listesi; varsayılan değer []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilmişse bunlar, bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya eklenen dosyalar sadece ideaklı kurallara, yani -dontnote, -dontwarn, yan etkileri ve -keep ile başlayan kuralları içerir. Diğer seçenekler yalnızca android_binary öğesinin proguard_specs (totoolojik olmayan birleştirmeler için)
resource_files

Etiket listesi; varsayılan değer []

Paketlenecek kaynakların listesi. Bu genellikleglob res dizini.
. Oluşturulan dosyalara (genrules'tan) şuradan referans verilebilir: Buraya da etiket ekleyin. Tek kısıtlama şu: oluşturulan çıkışlar aynı "res" altında olmalıdır diğer dizinlerdeki gibi kaynak dosyalarının her biri.

android_instrumentation_test

Kural kaynağını görüntüle
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 araç testlerini çalıştırır. Bu emülatörü başlatın, test edilen uygulamayı, test uygulamasını yükleyin ve ve test paketinde tanımlanan testleri çalıştırın.

test_app özelliği Testin yer aldığı android_binary. Sırasıyla bu android_binary android_binary uygulamasını enstrümanlar özelliğiyle birlikte kullanılamaz.

Ö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

Etiket listesi; varsayılan değer []

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

Etiket; zorunlu

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şkenlerden bahsedelim: --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, hangi hedef üzerinden test edildiğini belirtmelidir instruments özelliğiyle ilişkilidir.

android_local_test

Kural kaynağını görüntüle
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 birim testi için kullanılır (cihazda değil). Android Robolectric test çerçevesiyle çalışır. Ayrıntılı bilgi için Android Robolectric sitesine göz atın. testler yazacağım.

Dolaylı çıkış hedefleri

  • name.jar: Testin Java arşivi.
  • name-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").
  • name_deploy.jar: 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 Robolectric'in deponuzu WORKSPACE dosyanıza 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 işlem, Robolectric için gereken maven_jar kurallarını getirir. Daha sonra her android_local_test kuralı @robolectric//bazel:robolectric. 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

Etiket listesi; varsayılan değer []

Test edilecek kitaplıkların listesi ve bağlanacak ek kitaplıkların listesi paydaşlarla iletişime geçin. Geçişli modda Android kurallarında belirtilen tüm kaynaklar, öğeler ve manifest dosyaları bu özelliğin kapatılması testte mevcuttur.

deps için izin verilen kurallar listesi: android_library, aar_import, java_import, java_library, ve java_lite_proto_library.

srcs

Etiket listesi; varsayılan değer []

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 dosyaları derlendi. Okunabilirlik açısından srcs içinde .java kaynak dosya oluşturuldu. Bunun yerine, bağımlı kuralının adını srcs bölümüne yerleştirin. bakın.

.srcjar türündeki srcs dosyanın paketi açılmış ve derlendi. (Bu, .java dosyaları kümesi oluşturmanız gerekiyorsa yararlı olur: veya derleme uzantısı gibi gelen sesler için kullanılabilir.)

Diğer dosyalar yoksayıldığı sürece yukarıda açıklanan dosya türünde en az bir dosya olduğundan emin olun. Aksi halde oluşur.

srcs özelliği gereklidir ve boş bırakılamaz runtime_deps belirtilmişse.

custom_package

String; varsayılan değer ""

R sınıfının oluşturulacağı Java paketi. Varsayılan olarak paket, kuralı içeren BUILD dosyasının bulunduğu dizinden dizin. Bu özelliği kullanırsanız büyük olasılıkla test_class öğesini de kullanmanız gerekecektir.
densities

Dize listesi; varsayılan değer []

Apk oluşturulurken filtrelenecek yoğunluklar. İlgili uyumlu ekranlar bölümü, halihazırda bir Süperset StarlarkListing.
enable_data_binding

Boole; varsayılan değer False

True (doğru) ise bu kural, veriler bağlama referanslarını içeren bir veri ilişkilendirme modelini kullanır. Yok: Bu ayarda, veri bağlama bağımlılıklarında ikili düzeyde kod oluşturma işlemi gerekmez. ve derleme hataları oluşturabilir.
javacopts

Dize listesi; varsayılan değer []

Bu kitaplık için ek derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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

jvm_flags

Dize listesi; varsayılan değer []

Bu ikili programı çalıştırmak için oluşturulmuş sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) öğesine tabi ve "Değişken yap" ifadesini değiştirme ve Bourne kabuk belirteçleme.

Java ikili programı için sarmalayıcı komut dosyası bir CLASSPATH tanımı içeriyor (bağımlı tüm jar'ları bulmak için) kullanır 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 ve ardından "$@" ile diğerlerini geçin bağımsız değişkenlerini ekleyin. Ancak, ayrıştırma için tasarlanmış bağımsız değişkenler komuttaki sınıf adından önce belirtilmelidir. satırında görünür. jvm_flags içeriği sarmalayıcıya eklenir komut dosyasını eklemeniz gerekir.

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

manifest

Etiket; varsayılan değer None

Android manifest dosyasının adı (normal olarak AndroidManifest.xml). source_files veya öğeler tanımlanırsa ya da test edilen kitaplıklarda minSdkVersion etiketi vardır.
manifest_values

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

Manifest'te geçersiz kılınacak değerler sözlüğü. Şuradaki herhangi bir ${name} örneği: manifesto, bu sözlükteki ada karşılık gelen değerle değiştirilir. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion ve maxSdkVersion, ilgili özellikleri de geçersiz kılar ve kullanımlar-sdk etiketleri. packageName yoksayılır ve şu iki ayardan ayarlanır: Şu durumda applicationId manifest dosyasındaki pakete göre ayarlanır. manifest_values parametresi kullanmak için kuralda bir manifest dosyası olması gerekmez.
nocompress_extensions

Dize listesi; varsayılan değer []

Kaynak apk'de sıkıştırılmamış halde bırakılacak dosya uzantılarının listesi.
plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin bu kuralla birlikte çalıştırılır geliştirildi. Bir kitaplık, exported_plugins Kaynaklar oluşturulan dosya, bu kuralın ortaya çıkan jar'ına dahil edilir.
resource_configuration_filters

Dize listesi; varsayılan değer []

Kaynak yapılandırma filtrelerinin listesi (ör. "tr") kaynak kullanımını sınırlandıracak apk'yi yalnızca 'en'dekilerle değiştirin yapılandırma.
resource_jars

Etiket listesi; varsayılan değer []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini kullanın.
resource_strip_prefix

String; varsayılan değer ""

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

Belirtilirse bu yol öneki resources içindeki her dosyadan çıkarılır. özelliğini gönderin. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Değilse belirtildiğinde (varsayılan), kaynak dosyasının yolu yine aynı mantığını kaynak dosyalardan oluşan Java paketi olarak kullanır. Örneğin, stuff/java/foo/bar/a.txt şu şekilde konumlandırılacak: foo/bar/a.txt.

runtime_deps

Etiket listesi; varsayılan değer []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Bunlar sıradan deps ürününde olduğu gibi çalışma zamanı sınıf yolunda görünür, ancak üzerinde çalışmalıdır. Yalnızca çalışma zamanında gereken bağımlılıklar burada görebilirsiniz. Bağımlılık analizi araçları, runtime_deps ve deps.
stamp

Tam sayı; varsayılan değer 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • 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şaretidir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

test_class

String; varsayılan değer ""

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

Bu özellik, çalıştırılacak bir Java sınıfının adını belirtir inceleyeceğiz. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa Java sınıfı adı bu videonun name'sine karşılık gelen android_local_test kural kullanılacak. Test sınıfına org.junit.runner.RunWith ile ek açıklama eklenmesi gerekiyor.

use_launcher

Boole; varsayılan değer True

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

Bu özellik false (yanlış) değerine ayarlanırsa Başlatıcı özelliğini ve ilgili --java_launcher işaretle bu hedef için yoksayılacak.

android_device

Kural kaynağını görüntüle
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 özellikler. Bu emülatör, bazel çalıştırmasıyla başlatılabilir komutunu çalıştırarak veya oluşturulan komut dosyasını doğrudan yürütebilirsiniz. Birlikte çalıştığınız kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarınızı kullanın.

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

Temel alınan temelde KVM görüntülerinin oluşturulmasında android_device, system_image, X86 tabanlıdır ve en çok I686 CPU mimarisi için optimize edilmiştir. KVM'yi kullanmak için ekleyin android_device kuralına tags = ['requires-kvm'] .

Dolaylı çıkış hedefleri

  • name_images/userdata.dat: Resim dosyaları ve emülatörü başlatacak anlık görüntüler içerir
  • name_images/emulator-meta-data.pb: Emülatöre iletilecek serileştirilmiş bilgileri içerir yeniden başlatın.

Ö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ü başlatabilirsiniz. bazel run :nexus_s -- --action=start öğesini yürüterek yerel olarak çalıştırın. Komut dosyası, şu işaretler:

  • --adb_port: adb'nin açılacağı bağlantı noktası. Adb dosyası oluşturmak komutları, adb connect'i vereceğiniz bağlantı noktasıdır. .
  • --emulator_port: Emülatörün telnet yönetimini açığa çıkaran bağlantı noktası konsolu açık duruma getirin.
  • --enable_display: Doğruysa emülatörü bir ekranla başlatır (varsayılan false olarak ayarlayın).
  • --action: Ya başlat ya da sonlandır.
  • --apks_to_install: Emülatöre yüklenecek apk'lerin 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ün önbellek bölümünün megabayt cinsinden boyutu. Bunun minimum değeri 16 megabayttır.
default_properties

Etiket; varsayılan değer None

Emülatörde /default.prop içine yerleştirilecek tek bir özellikler dosyası. Bu, kural yazarının emülatörü daha fazla işleve benzeyecek şekilde yapılandırmasına olanak tanır gerçek bir cihaz (özellikle de UserAgent dizelerini ve veya sunucunun farklı davranışlara neden olabilecek belirli belirli bir cihaz). Bu dosyadaki özellikler salt okunur durumu geçersiz kılar genellikle ro.product.model gibi bir emülatör tarafından ayarlanan özelliklerdir.
horizontal_resolution

Tam sayı; zorunlu

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

Etiket listesi; varsayılan değer []

Başlatma sırasında cihaza yüklenecek APK'ların listesi.
ram

Tam sayı; zorunlu

Cihaz için emüle edilecek ram cinsinden megabayt cinsinden ram miktarı. Bu, yalnızca cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. İlgili içeriği oluşturmak için kullanılan minimum değer 64 megabayttır.
screen_density

Tam sayı; zorunlu

Emüle edilen ekranın inç başına piksel cinsinden yoğunluğu. Bunun minimum değeri 30 ppi'dır.
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ükleneceği Linux çekirdeği
  • ramdisk.img: Başlatma sırasında kullanılacak başlangıç görüntüsü
  • userdata.img: İlk kullanıcı verisi bölümü
  • source.properties: "Tüm Sayfalar" görevindeki resimler
Bu dosyalar Android SDK'nın bir parçasıdır veya üçüncü taraflarca ( örneğin Intel, x86 boyutunda görüntüler sağlar).
vertical_resolution

Tam sayı; zorunlu

Taklit edilecek piksel cinsinden dikey ekran çözünürlüğü. 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üle
android_ndk_repository(name, api_level, path, repo_mapping)

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

Bu android_ndk_repository uygulamasının, uygulayacağım. NDK'nın 25 ve sonraki sürümleri de dahil olmak üzere gelecekteki sürümleri için destek android_ndk_repository Starlark sürümünde uygulanacak. Görüntüleyin Starlark için rules_android_ndk sürümünü değil.

Android için geliştirme yapmak için android_sdk_repository kuralının WORKSPACE dosya

Daha fazla bilgi için kullanım hakkındaki dokümanların tamamını inceleyin.

Örnekler

android_ndk_repository(
    name = "androidndk",
)

Yukarıdaki örnek, $ANDROID_NDK_HOME cihazındaki Android NDK'nızı bulup algılayacak desteklediği en yüksek API düzeyine sahip olmalıdır.

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

Yukarıdaki örnekte, ./android-ndk-r20 JNI'nizi derlerken API düzey 24 kitaplıklarını kullanır girin.

cpuözellikleri

Android NDK, cpufeatures kitaplığı Bu kimlik, çalışma zamanında cihazın CPU'sunu algılamak için kullanılabilir. Aşağıdaki örnekte, cpufeatures'ı tıklayın.

# 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

Tam sayı; nonconfig; varsayılan değer 0

Temel alınan Android API düzeyi. Belirtilmemişse en yüksek API düzeyi yüklü oluşturmak için kullanılır.
path

String; nonconfig; varsayılan değer ""

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

Android NDK şuradan indirilebilir: Android geliştirici sitesi ziyaret edin.

repo_mapping

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

Yerel depo adından genel depo adına bir sözlük. Bu sayede şunlar üzerinde kontrol sahibi olunabilir: çalışma alanı bağımlılık çözümü sunar.

Örneğin, "@foo": "@bar" girişi, bu deposu "@foo" değerine bağlıdır (örneğin, "@foo//some:target") içeriyorsa bu bağımlılığı dünya genelinde "@bar" ("@bar//some:target") olarak ilan edildi.

android_sdk_repository

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

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

Örnekler

Bazel için Android SDK'sı ayarlamak isterseniz en az android_sdk_repository kuralı uygulamanız gerekir. "androidsdk" adlı WORKSPACE dosyanızdan $ANDROID_HOME ortam değişkenini Android SDK'nızın yoluna ekleyin. Bazel en yüksek Android API düzeyini kullanacak varsayılan olarak Android SDK'da yüklü olan derleme araçları sürümünü de kullanabilirsiniz.
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. Derleme şu durumlarda başarısız olur: Android SDK'da belirtilen API düzeyi veya derleme araçları sürümü yüklü değil.

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

Yukarıdaki örnekte, Android SDK'ya çalışma alanına bağlı bir yolun kullanımı da gösterilmektedir. Bu Android SDK, Bazel çalışma alanınızın bir parçasıysa (ör. kontrolü).

Destek Kitaplıkları

Destek Kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" olarak bulunur. Bu, Support ve AppCompat kitaplıkları gibi ortak Android kitaplıklarının sürümlü bir kümesidir. depo olarak paketlenir. android_sdk_repository, Bazel oluşturur bağımlılıklarında kullanılabilecek bu kitaplıkların her biri için android_binary ve android_library hedefleri.

Oluşturulan hedeflerin adları @androidsdk//${group}:${artifact}-${version} biçimindeki Android Destek Deposu. Aşağıdaki örnekte bir android_library değerinin v7 uygulama uyumluluğu kitaplığı.

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

Tam sayı; nonconfig; varsayılan değer 0

Varsayılan olarak temel alınacak Android API düzeyi. Belirtilmezse en yüksek API düzeyi bunların kullanılacağı görünür.

Belirli bir derleme için kullanılan API düzeyi, android_sdk tarafından geçersiz kılınabilir tıklayın. android_sdk_repository, şunun için android_sdk hedefi oluşturur: SDK'da @androidsdk//:sdk-${level} adlı her API düzeyi, bu özelliğin belirtilip belirtilmediği. Örneğin, varsayılan olmayan bir API'de geliştirme yapmak için seviye: 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//...)" komutunu çalıştırabilirsiniz.

build_tools_version

String; nonconfig; varsayılan değer ""

Android SDK içinden kullanılacak Android derleme araçları sürümü. Belirtilmemişse en son derleme araçları sürümü kullanılacak.

Bazel için derleme araçları 30.0.0 veya sonraki sürümleri gerekir.

path

String; nonconfig; varsayılan değer ""

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

Android SDK'sı şuradan indirilebilir: Android geliştirici sitesine gidin.

repo_mapping

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

Yerel depo adından genel depo adına bir sözlük. Bu sayede şunlar üzerinde kontrol sahibi olunabilir: çalışma alanı bağımlılık çözümü sunar.

Örneğin, "@foo": "@bar" girişi, bu deposu "@foo" değerine bağlıdır (örneğin, "@foo//some:target") içeriyorsa bu bağımlılığı dünya genelinde "@bar" ("@bar//some:target") olarak ilan edildi.