Kurallar
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
Kural kaynağını görüntülemeandroid_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)
Android uygulama paketi dosyaları (.apk) oluşturur.
Örtülü çıkış hedefleri
name.apk
: Hata ayıklama anahtarlarıyla imzalanmış ve zipaligned olan bir Android uygulama paket dosyasıdır. Uygulamanızı geliştirmek ve hatalarını ayıklamak için kullanılabilir. Uygulamanızı hata ayıklama anahtarlarıyla imzalandığında yayınlayamazsınız.name_unsigned.apk
: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilecek imzasız bir sürümü.name_deploy.jar
: Bu hedefin geçişli kapanımını içeren bir Java arşivi.Dağıtım JAR'ı, bu hedefin çalışma zamanı sınıf yolunda baştan sona arama yapan bir sınıf yükleyicisi tarafından bulunabilecek tüm sınıfları içerir.
name_proguard.jar
:name_deploy.jar
üzerinde ProGuard çalıştırma sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse oluşturulur.name_proguard.map
:name_deploy.jar
üzerinde ProGuard çalıştırmanın eşleme dosyası sonucu. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse ve proguard_generate_mapping veya shrink_resources ayarlanmışsa oluşturulur.
Örnekler
Android kurallarına ilişkin örnekleri Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer android_library ,
android kısıtlaması olan java_library ve
Android hedef platformu için .so yerel kitaplıklarını sarmalayan veya üreten cc_library .
|
srcs
|
Etiket listesi; varsayılan değer
|
assets
|
Etiket listesi; varsayılan değer assets dizinindeki tüm dosyaların glob 'sıdır. Ayrıca, diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da başvurabilirsiniz. Ancak bu dosyaların ilgili paketteki assets_dir dizini altında olması gerekir.
|
assets_dir
|
Dize; varsayılan değer assets içindeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar. Bu özelliklerin ikisi de sağlanmalı veya ikisi de sağlanmamalıdır.
|
crunch_png
|
Boole değeri; varsayılan değer |
custom_package
|
Dize; varsayılan değer |
debug_key
|
Etiket; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır. |
debug_signing_keys
|
Etiket listesi; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır. |
debug_signing_lineage_file
|
Etiket; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda saklanmamalıdır. |
densities
|
Dize listesi; varsayılan değer |
dex_shards
|
Tam sayı; varsayılan değer Her parçanın nihai uygulamada en az bir dex ile sonuçlanacağını unutmayın. Bu nedenle, yayın ikilileri için bu değeri 1'den fazla olarak ayarlamanız önerilmez. |
dexopts
|
Dize listesi; varsayılan değer |
enable_data_binding
|
Boole değeri; varsayılan değer Veri bağlama içeren bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
incremental_dexing
|
Tamsayı; yapılandırılamaz; varsayılan değer |
instruments
|
Etiket; varsayılan değer Enstrüman için Bu özellik ayarlanırsa bu |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
key_rotation_min_sdk
|
Dize; varsayılan değer |
main_dex_list
|
Etiket; varsayılan değer android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex.class android/support/multidex/MultiDexApplication.class com/google/common/base/Objects.class multidex="manual_main_dex" ile kullanılmalıdır.
|
main_dex_list_opts
|
Dize listesi; varsayılan değer |
main_dex_proguard_specs
|
Etiket listesi; varsayılan değer multidex özelliği legacy olarak ayarlanmışsa izin verilir.
|
manifest
|
Etiket: zorunlu Android manifest dosyasının adı (normaldeAndroidManifest.xml ).
resource_files veya assets tanımlanmışsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan değer
Manifest'teki tüm
|
multidex
|
Dize; varsayılan değer Olası değerler:
|
nocompress_extensions
|
Dize listesi; varsayılan değer |
package_id
|
Tam sayı; varsayılan değer Daha fazla bilgi için AAPT2'nin |
plugins
|
Etiket listesi; varsayılan değer java_plugin , bu hedef her oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç JAR'ına dahil edilir.
|
proguard_apply_dictionary
|
Etiket; varsayılan değer |
proguard_apply_mapping
|
Etiket; varsayılan değer proguard_generate_mapping tarafından oluşturulan bir eşleme dosyası, yeni bir derlemeye aynı eşlemeyi uygulamak için yeniden kullanılır.
|
proguard_generate_mapping
|
Boole; yapılandırılamaz; varsayılan değer proguard_specs belirtilirse oluşturulur. Bu dosyada, orijinal ve karartılmış sınıf, yöntem ve alan adları arasındaki eşleme listelenir.
UYARI: Bu özellik kullanılıyorsa Proguard spesifikasyonu |
proguard_specs
|
Etiket listesi; varsayılan değer |
resource_configuration_filters
|
Dize listesi; varsayılan değer en_XA ve/veya ar_XB sözde yerel ayarlarını ekleyin.
|
resource_files
|
Etiket listesi; varsayılan değer res dizinindeki tüm dosyaların glob 'sıdır.
Oluşturulan dosyalar (genrules'dan) burada da Etiket ile referans verilebilir. Tek kısıtlama, oluşturulan çıktıların, dahil edilen diğer kaynak dosyalarıyla aynı " res " dizininde olmasıdır.
|
shrink_resources
|
Tam sayı; varsayılan değer manifest ve resource_files özellikleri) 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:
name_files/resource_shrinker.log
da oluşturulur. Bu dosya, gerçekleştirilen analiz ve silme işlemlerini ayrıntılı olarak açıklar.
Olası değerler:
|
aar_import
Kural kaynağını görüntülemeaar_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 android_library
ve android_binary
kuralları için 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 |
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 |
srcjar
|
Etiket; varsayılan değer |
android_library
Kural kaynağını görüntülemeandroid_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)
Bu kural, kaynaklarını derleyip .jar
dosyası olarak arşivler.
Android çalışma zamanı kitaplığı android.jar
, derleme sınıfı yoluna örtülü olarak yerleştirilir.
Örtülü çıkış hedefleri
libname.jar
: Java arşivi.libname-src.jar
: Kaynakları ("kaynak jar") içeren bir arşiv.name.aar
: Bu hedefin java arşivini ve kaynaklarını içeren bir Android "aar" paketi. Geçişli kapanmayı içermez.
Örnekler
Android kurallarına ilişkin örnekleri Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Aşağıdaki örnekte idl_import_root
nasıl ayarlanacağı gösterilmektedir.
//java/bazel/helloandroid/BUILD
şunları içerebilir:
android_library( name = "parcelable", srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable # MyParcelable.aidl will be used as import for other .aidl # files that depend on it, but will not be compiled. idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable # We don't need to specify idl_import_root since the aidl file # which declares bazel.helloandroid.MyParcelable # is present at java/bazel/helloandroid/MyParcelable.aidl # underneath a java root (java/). ) android_library( name = "foreign_parcelable", srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable idl_parcelables = [ "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable ], # We need to specify idl_import_root because the aidl file which # declares android.helloandroid.OtherParcelable is not positioned # at android/helloandroid/OtherParcelable.aidl under a normal java root. # Setting idl_import_root to "src" in //java/bazel/helloandroid # adds java/bazel/helloandroid/src to the list of roots # the aidl compiler will search for imported types. idl_import_root = "src", ) # Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement. android_library( name = "foreign_interface", idl_srcs = [ "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface ], # As above, idl_srcs which are not correctly positioned under a java root # must have idl_import_root set. Otherwise, OtherInterface (or any other # interface in a library which depends on this one) will not be able # to find CallbackInterface when it is imported. idl_import_root = "src", ) # MyParcelable.aidl is imported by MyInterface.aidl, so the generated # MyInterface.java requires MyParcelable.class at compile time. # Depending on :parcelable ensures that aidl compilation of MyInterface.aidl # specifies the correct import roots and can access MyParcelable.aidl, and # makes MyParcelable.class available to Java compilation of MyInterface.java # as usual. android_library( name = "idl", idl_srcs = ["MyInterface.aidl"], deps = [":parcelable"], ) # Here, ServiceParcelable uses and thus depends on ParcelableService, # when it's compiled, but ParcelableService also uses ServiceParcelable, # which creates a circular dependency. # As a result, these files must be compiled together, in the same android_library. android_library( name = "circular_dependencies", srcs = ["ServiceParcelable.java"], idl_srcs = ["ParcelableService.aidl"], idl_parcelables = ["ServiceParcelable.aidl"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer android_library ,
android kısıtlaması olan java_library ve
Android hedef platformu için .so yerel kitaplıklarını sarmalayan veya üreten cc_library .
|
srcs
|
Etiket listesi; varsayılan değer .java veya .srcjar dosyalarının listesi.
|
assets
|
Etiket listesi; varsayılan değer assets dizinindeki tüm dosyaların glob 'sıdır. Ayrıca, diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da başvurabilirsiniz. Ancak bu dosyaların ilgili paketteki assets_dir dizini altında olması gerekir.
|
assets_dir
|
Dize; varsayılan değer assets içindeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar. Bu özelliklerin ikisi de sağlanmalı veya ikisi de sağlanmamalıdır.
|
custom_package
|
Dize; varsayılan değer |
enable_data_binding
|
Boole değeri; varsayılan değer Veri bağlama içeren bir Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
exported_plugins
|
Etiket listesi; varsayılan değer java_plugin listesi (ör. ek açıklama işlemcileri).
Belirtilen |
exports
|
Etiket listesi; varsayılan değer exports özellikleri aracılığıyla ulaşılan tüm kuralların kapanması, exports ile hedefi doğrudan kullanan tüm kuralların doğrudan bağımlılıkları olarak kabul edilir.
|
exports_manifest
|
Tam sayı; varsayılan değer android_binary hedeflerine
dışa aktarılıp aktarılmayacağı. uses-permissions özellikleri hiçbir zaman dışa aktarılmaz.
|
idl_import_root
|
Dize; varsayılan değer Bu kitaplığa bağlı idl kaynakları işlenirken bu yol, içe aktarma kökü olarak kullanılır.
Örnekleri inceleyin. |
idl_parcelables
|
Etiket listesi; varsayılan değer android_library hedefler için içe aktarma olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.
Bu kitaplıktaki Bu dosyalar, aidl derleyicisinin 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
|
Etiket listesi; varsayılan değer android_library hedefler için içe aktarma olarak kullanılabilir ancak Java'ya çevrilmez veya derlenmez.
Bu kitaplıktaki |
idl_srcs
|
Etiket listesi; varsayılan değer srcs içeriğiyle birlikte derlenir.
Bu dosyalar, doğrudan veya geçişli kapanımı aracılığıyla bu kitaplığa bağlı olan tüm Bu dosyalar, aidl derleyicisinin 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
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanmışsa tanımlanmalıdır.
|
neverlink
|
Boole değeri; varsayılan değer neverlink olarak işaretlenen bir kuralın çıkışları .apk oluşturulurken kullanılmaz. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır.
|
plugins
|
Etiket listesi; varsayılan değer java_plugin , bu hedef her oluşturulduğunda çalıştırılır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç JAR'ına dahil edilir.
|
proguard_specs
|
Etiket listesi; varsayılan değer android_binary hedefine eklenirler.
Burada yer alan dosyalar yalnızca idempotent kurallar içermelidir. Bu kurallar şunlardır: -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar. Diğer seçenekler, çelişkili olmayan birleştirme işlemleri için yalnızca android_binary 'nın proguard_specs dosyasında görünebilir.
|
resource_files
|
Etiket listesi; varsayılan değer res dizinindeki tüm dosyaların glob 'sıdır.
Oluşturulan dosyalar (genrules'dan) burada da Etiket ile referans verilebilir. Tek kısıtlama, oluşturulan çıktıların, dahil edilen diğer kaynak dosyalarıyla aynı " res " dizininde olmasıdır.
|
android_instrumentation_test
Kural kaynağını görüntülemeandroid_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)
android_instrumentation_test
kuralı, Android araç testlerini çalıştırır. Bir emülatör başlatır, test edilen uygulamayı, test uygulamasını ve gerekli diğer uygulamaları yükler ve test paketinde tanımlanan testleri çalıştırır.
test_app özelliği, testi içeren android_binary
değerini belirtir. Bu android_binary
, instruments özelliği aracılığıyla test edilen android_binary
uygulamasını belirtir.
Örnek
# java/com/samples/hello_world/BUILD android_library( name = "hello_world_lib", srcs = ["Lib.java"], manifest = "LibraryManifest.xml", resource_files = glob(["res/**"]), ) # The app under test android_binary( name = "hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_lib"], )
# javatests/com/samples/hello_world/BUILD android_library( name = "hello_world_test_lib", srcs = ["Tests.java"], deps = [ "//java/com/samples/hello_world:hello_world_lib", ... # test dependencies such as Espresso and Mockito ], ) # The test app android_binary( name = "hello_world_test_app", instruments = "//java/com/samples/hello_world:hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_test_lib"], ) android_instrumentation_test( name = "hello_world_uiinstrumentation_tests", target_device = ":some_target_device", test_app = ":hello_world_test_app", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
support_apks
|
Etiket listesi; varsayılan değer |
target_device
|
Etiket: zorunlu Testin üzerinde çalıştırılacağı android_device. Testi zaten çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu argümanları kullanın:
|
test_app
|
Etiket: zorunlu Test sınıflarını içeren android_binary hedefi.android_binary hedefi, instruments özelliği aracılığıyla hangi hedefi test ettiğini belirtmelidir.
|
android_local_test
Kural kaynağını görüntülemeandroid_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) birim testine yöneliktir.
Android Robolectric test çerçevesiyle çalışır.
Robolectric testleri yazma hakkında ayrıntılı bilgi için Android Robolectric sitesini inceleyin.
Ö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
Robolectric'i android_local_test
ile kullanmak için WORKSPACE
dosyanıza Robolectric'in deposunu ekleyin:
http_archive( name = "robolectric", urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-bazel-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()
maven_jar
kurallarını getirir.
Ardından her android_local_test
kuralı @robolectric//bazel:robolectric
'e bağlı olmalıdır. Aşağıdaki örneğe bakın.
android_local_test( name = "SampleTest", srcs = [ "SampleTest.java", ], manifest = "LibManifest.xml", deps = [ ":sample_test_lib", "@robolectric//bazel:android-all", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer
|
srcs
|
Etiket listesi; varsayılan değer
Yukarıda açıklanan dosya türlerinden en az biri olduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde hata oluşur.
|
custom_package
|
Dize; varsayılan değer test_class özelliğini de kullanmanız gerekir.
|
densities
|
Dize listesi; varsayılan değer |
enable_data_binding
|
Boole değeri; varsayılan değer |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
jvm_flags
|
Dize listesi; varsayılan değer Bir Java ikilisi için sarmalayıcı komut dosyası, 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 Bu özelliğin |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanmışsa ya da test edilen kitaplıkların manifest dosyalarından herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan değer applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion ve
maxSdkVersion , manifest ve
uses-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilmişse applicationId 'den, belirtilmemişse manifestteki paketten ayarlanır.
manifest_values kullanmak için kuralda manifest olması gerekmez.
|
nocompress_extensions
|
Dize listesi; varsayılan değer |
plugins
|
Etiket listesi; varsayılan değer java_plugin , bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
|
resource_configuration_filters
|
Dize listesi; varsayılan değer |
resource_jars
|
Etiket listesi; varsayılan değer |
resource_strip_prefix
|
Dize; varsayılan değer
Belirtilirse bu yol öneki, |
runtime_deps
|
Etiket listesi; varsayılan değer deps gibi bunlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak 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
|
Tam sayı; varsayılan değer
Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
test_class
|
Dize; varsayılan değer
Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bu ayarın yapılması nadiren gerekir. Bu bağımsız değişken atlanırsa bu |
use_launcher
|
Boole değeri; varsayılan değer Bu özellik yanlış olarak ayarlanırsa bu hedef için launcher özelliği ve ilgili |
android_device
Kural kaynağını görüntülemeandroid_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 özelliklerle yapılandırılmış bir Android emülatörü oluşturur. Bu emülatör, bazel run komutuyla veya oluşturulan komut dosyasını doğrudan çalıştırarak başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarını kullanmanız önerilir.
Bu kural, bazel test ve blaze run için --run_under işaretiyle kullanılmaya uygundur. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve uygun şekilde test eder veya çalıştırır.
android_device
Temel system_image X86 tabanlıysa ve en fazla I686 CPU mimarisi için optimize edilmişse KVM 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 resim dosyaları ve anlık görüntüler içerir.name_images/emulator-meta-data.pb
: Emülatöre aktarılıp yeniden başlatılması için gerekli olan seri hale getirilmiş bilgileri içerir.
Örnekler
Aşağıdaki örnekte android_device'ın 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
şunları 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ıç senaryosu oluşturur. bazel run :nexus_s -- --action=start komutunu çalıştırarak emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretleri kullanıma sunar:
- --adb_port: adb'nin kullanıma açılacağı bağlantı noktası. Emülatöre adb komutları göndermek istiyorsanız adb connect komutunu bu bağlantı noktasına gönderebilirsiniz.
- --emulator_port: Emülatörün telnet yönetim konsolunun gösterileceği bağlantı noktası.
- --enable_display: Doğruysa emülatörü ekranla başlatır (varsayılan olarak yanlıştır).
- --action: Başlatma veya sonlandırma.
- --apks_to_install: Emülatöre yüklenecek APK'ların listesi.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
cache
|
Tam sayı; zorunlu Emülatörün önbellek bölümünün megabayt cinsinden boyutu. Bunun minimum değeri 16 megabayttır. |
default_properties
|
Etiket; varsayılan değer |
horizontal_resolution
|
Tam sayı; zorunlu Emüle edilecek yatay ekran çözünürlüğü (piksel). Minimum değer 240'tır. |
platform_apks
|
Etiket listesi; varsayılan değer |
ram
|
Tam sayı; zorunlu Cihaz için emüle edilecek RAM miktarı (megabayt cinsinden). Bu ayar, cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. Minimum değer 64 megabayttır. |
screen_density
|
Tam sayı; zorunlu Emüle edilen ekranın inç başına piksel cinsinden yoğunluğu. Bunun minimum değeri 30 ppi'dir. |
system_image
|
Etiket: zorunlu Aşağıdaki dosyaları içeren bir dosya grubu:
|
vertical_resolution
|
Tam sayı; zorunlu Emüle edilecek dikey ekran çözünürlüğü (piksel). Minimum değer 240'tır. |
vm_heap
|
Tam sayı; zorunlu Android'in her işlem için kullanacağı sanal makine yığınının megabayt cinsinden boyutu. Minimum değer 16 megabayttır. |
android_ndk_repository
Kural kaynağını görüntülemeandroid_ndk_repository(name, api_level, path, repo_mapping)
Android hedeflerinin yerel kodla oluşturulmasını desteklemek için Bazel'i Android NDK kullanacak şekilde yapılandırır.
android_ndk_repository
öğesinin bu uygulamasının Starlark'taki bir uygulamayla değiştirildiğini unutmayın. 25 ve sonraki sürümler de dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository
'nın Starlark sürümünde uygulanacaktır. Starlark sürümü için rules_android_ndk bölümüne bakın.
Android için derleme yapmanın, android_sdk_repository
dosyanızda bir WORKSPACE
kuralı gerektirdiğini unutmayın.
Daha fazla bilgi için Android NDK'yı Bazel ile kullanma hakkındaki tam dokümanı okuyun.
Örnekler
android_ndk_repository( name = "androidndk", )
Yukarıdaki örnek, Android NDK'nizi $ANDROID_NDK_HOME
konumunda 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, çalışma alanınızın ./android-ndk-r20
bölümünde bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzeyi 24 kitaplıklarını kullanır.
cpufeatures
Android NDK, bir cihazın CPU'sunu çalışma zamanında algılamak için kullanılabilecek cpufeatures kitaplığını içerir. Aşağıdaki örnekte, Bazel ile cpufeatures'ın nasıl kullanılacağı gösterilmektedir.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
api_level
|
Tamsayı; yapılandırılamaz; varsayılan değer |
path
|
Dize; yapılandırılamaz; varsayılan değer $ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.
Android NDK'yı Android Developers sitesinden indirebilirsiniz. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan değer Örneğin, |
android_sdk_repository
Kural kaynağını görüntülemeandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Android hedeflerinin oluşturulmasını desteklemek için Bazel'i yerel bir Android SDK'sını kullanacak şekilde yapılandırır.
Örnekler
Bazel için bir Android SDK'sı ayarlamak üzere yapmanız gereken minimum işlem,WORKSPACE
dosyanıza "androidsdk" adlı bir android_sdk_repository
kuralı yerleştirmek ve $ANDROID_HOME
ortam değişkenini Android SDK'nızın yoluna ayarlamaktır. Bazel, varsayılan olarak Android SDK'ya yüklenen en yüksek Android API düzeyini ve derleme araçları sürümünü kullanır.
android_sdk_repository( name = "androidsdk", )
Yeniden üretilebilir 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'ya giden çalışma alanına göreli bir yolun kullanımı da gösterilmektedir. Bu, Android SDK'sı Bazel çalışma alanınızın bir parçasıysa (ör. sürüm kontrolüne dahil edilmişse) kullanışlıdır.
Destek Kitaplıkları
Destek kitaplıkları, Android SDK Yöneticisi'nde "Android Support Repository" (Android Destek Deposu) olarak sunulur.
Bu, yerel bir Maven deposu olarak paketlenmiş, Support ve AppCompat kitaplıkları gibi yaygın Android kitaplıklarının sürümlendirilmiş bir kümesidir. android_sdk_repository
, android_binary
ve android_library
hedeflerinin bağımlılıklarında kullanılabilecek bu kitaplıkların her biri için Bazel hedefleri oluşturur.
Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki kitaplıkların Maven koordinatlarından türetilir ve @androidsdk//${group}:${artifact}-${version}
olarak biçimlendirilir.
Aşağıdaki örnekte, bir android_library
öğ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 |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
api_level
|
Tamsayı; yapılandırılamaz; varsayılan değer Belirli bir derleme için kullanılan API düzeyi,
|
build_tools_version
|
Dize; yapılandırılamaz; varsayılan değer Bazel için derleme araçlarının 30.0.0 veya sonraki bir sürümü gerekir. |
path
|
Dize; yapılandırılamaz; varsayılan değer $ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK'sı Android Developers sitesinden indirilebilir. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan değer Örneğin, |