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.
Dolaylı çıkış hedefleri
name.apk
: Hata ayıklama anahtarlarıyla imzalanmış ve zipalign uygulanmış bir Android uygulama paketi dosyası. Bu dosya, uygulamanızı geliştirmek ve hata ayıklamak için kullanılabilir. Uygulamanızı hata ayıklama anahtarlarıyla imzaladığınızda yayınlayamazsınız.name_unsigned.apk
: Yukarıdaki dosyanın, herkese açık olarak yayınlanmadan önce sürüm anahtarlarıyla imzalanabilen imzasız sürümü.name_deploy.jar
: Bu hedefin geçişli kapatmasını içeren bir Java arşivi.Dağıtım jar'ı, bu hedefin çalışma zamanı sınıf yolunu baştan sona arayan bir sınıf yükleyici tarafından bulunacak tüm sınıfları içerir.
name_proguard.jar
:name_deploy.jar
üzerinde ProGuard çalıştırmanın sonucunu içeren bir Java arşivi. Bu çıkış yalnızca proguard_specs özelliği belirtilmişse oluşturulur.name_proguard.map
:name_deploy.jar
üzerinde ProGuard'ın çalıştırılmasıyla elde edilen bir 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 kuralı örneklerini, Bazel kaynak ağacının examples/android
dizininde bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer android_library ,
java_library android kısıtlaması ile ve
cc_library Android hedef platform için .so yerel kitaplıklarını sarmalayan veya üreten.
|
srcs
|
Etiket listesi; varsayılan
|
assets
|
Etiket listesi; varsayılan assets dizini altındaki tüm dosyalar için glob değerindedir. Ayrıca, tüm dosyalar ilgili paketteki assets_dir dizininde olduğu sürece diğer paketlerdeki diğer kurallara (dosya oluşturan tüm kurallar) veya dışa aktarılan dosyalara da referans verebilirsiniz.
|
assets_dir
|
Dize; varsayılan değer assets içindeki dosyaların yolunu belirten dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı veya hiçbiri sağlanmamalıdır.
|
crunch_png
|
Boole; 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, bunlar sıkı bir şekilde korunmalı ve kaynak ağacınızda tutulmamalıdır. |
debug_signing_keys
|
Etiketler listesi; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır. |
debug_signing_lineage_file
|
Etiket; varsayılan değer UYARI: Üretim anahtarlarınızı kullanmayın. Bu anahtarlar kesinlikle korunmalı ve kaynak ağacınızda tutulmamalıdır. |
densities
|
Dize listesi; varsayılan değer |
dex_shards
|
Tam sayı; varsayılan değer Her kırığın son uygulamada en az bir dex olacağını unutmayın. Bu nedenle, yayın ikili programları için bu değerin 1'den yüksek bir değere ayarlanması önerilmez. |
dexopts
|
Dize listesi; varsayılan değer |
enable_data_binding
|
Boole; varsayılan değer Veri bağlama ile 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
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
|
Etiketler listesi; varsayılan değer multidex özelliği legacy olarak ayarlandıysa izin verilir.
|
manifest
|
Etiket; zorunlu Android manifest dosyasının adı (normaldeAndroidManifest.xml olur).
resource_files veya assets tanımlanırsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan
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
|
Etiketler listesi; varsayılan değer java_plugin , bu hedef oluşturulduğunda çalışır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar dosyası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 eşleme dosyası, aynı eşlemeyi yeni bir derlemeye uygulamak için yeniden kullanılacak.
|
proguard_generate_mapping
|
Boole; yapılandırılmamış; varsayılan değer proguard_specs belirtilmişse oluşturulur. Bu dosya orijinal ile kodu karartılmış sınıf, yöntem ve alan adları arasındaki eşlemeyi listeler.
UYARI: Bu özellik kullanılıyorsa ProGuard spesifikasyonu |
proguard_specs
|
Etiketler 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 res dizini altındaki tüm dosyalar için glob değerindedir.
Oluşturulan dosyalar (genrules'den) buradaki Etiket ile de referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı " res " dizininde olması gerektiğidir.
|
shrink_resources
|
Tam sayı; varsayılan değer manifest ve resource_files özellikleri) kullanan kurallar için desteklenir ve ProGuard gerektirir.
Gradle kaynak daraltıcı ile büyük ölçüde aynı şekilde çalışır (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
Önemli farklılıklar:
name_files/resource_shrinker.log da oluşturulur.
Olası değerler:
|
aar_import
Kural kaynağını gösteraar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)
Bu kural, android_library
ve android_binary
kuralları için .aar
dosyalarının kitaplık olarak kullanılmasına olanak tanır.
Örnekler
aar_import( name = "google-vr-sdk", aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar", ) android_binary( name = "app", manifest = "AndroidManifest.xml", srcs = glob(["**.java"]), deps = [":google-vr-sdk"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
aar
|
Etiket; zorunlu Bu hedefe bağlı Android hedeflerine sağlanacak.aar dosyası.
|
exports
|
Etiketler listesi; varsayılan değer |
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ı bir .jar
dosyasında derler ve arşivler.
Android çalışma zamanı kitaplığı android.jar
, derleme sınıf yoluna dolaylı olarak yerleştirilir.
Dolaylı çıkış hedefleri
libname.jar
: Bir Java arşivi.libname-src.jar
: Kaynakları içeren bir arşiv ("kaynak jar").name.aar
: Bu hedefin java arşivini ve kaynaklarını içeren bir Android "aar" paketi. Geçişli kapatma 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
ş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 android_library ,
java_library android kısıtlaması ile ve
cc_library Android hedef platformu için .so yerel kitaplıklarını sarmalayan veya üreten.
|
srcs
|
Etiket listesi; varsayılan .java veya .srcjar dosyalarının listesi.
|
assets
|
Etiketler listesi; varsayılan değer assets dizini altındaki tüm dosyalar için glob değerindedir. Ayrıca, tüm bu dosyalar ilgili pakette assets_dir dizini altında olduğu sürece, başka kurallara (dosya oluşturan tüm kurallar) başvurabilir ya da diğer paketlerdeki dosyaları dışa aktarabilirsiniz.
|
assets_dir
|
Dize; varsayılan değer assets klasöründeki dosyaların yolunu veren dize.
assets ve assets_dir çifti, paketlenmiş öğeleri tanımlar ve her iki özellik de sağlanmalı veya hiçbiri sağlanmamalıdır.
|
custom_package
|
Dize; varsayılan değer |
enable_data_binding
|
Boole; varsayılan değer Veri bağlama ile Android uygulaması oluşturmak için aşağıdakileri de yapmanız gerekir:
|
exported_plugins
|
Etiket listesi; varsayılan java_plugin 'lerin (ör. ek açıklama işlemcileri) listesi.
Belirtilen |
exports
|
Etiketler listesi; varsayılan değer exports özellikleri aracılığıyla erişilen tüm kuralların kapatılması, exports ile hedefe doğrudan bağlı olan herhangi bir kuralın doğrudan bağımlılığı 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 yol, bu kitaplığa bağlı boşl kaynakları işlenirken içe aktarma kökü olarak kullanılır.
Örnekleri inceleyin. |
idl_parcelables
|
Etiket listesi; varsayılan android_library hedefi için içe aktarma olarak kullanıma sunulur ancak Java'ya çevrilmez veya derlenmez.
Yalnızca 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
|
Etiketler listesi; varsayılan değer android_library hedefi için içe aktarma olarak kullanıma sunulur ancak Java'ya çevrilmez veya derlenmez.
Yalnızca bu kitaplıktaki |
idl_srcs
|
Etiket listesi; varsayılan srcs içeriğiyle birlikte derlenir.
Bu dosyalar, bu kitaplığa bağlı olan herhangi bir 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 özelliğinin açıklamasına bakın. |
javacopts
|
Dize listesi; varsayılan değer: Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya iletilir. |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanmışsa tanımlanmalıdır.
|
neverlink
|
Boole; varsayılan değer 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
|
Etiket listesi; varsayılan java_plugin , bu hedef oluşturulduğunda çalışır. Eklenti tarafından oluşturulan kaynaklar, hedefin sonuç jar'ına dahil edilir.
|
proguard_specs
|
Etiketler listesi; varsayılan değer android_binary hedefine eklenir.
Buraya dahil edilen dosyalarda yalnızca idempotent kurallar (ör. -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar) bulunmalıdır. Diğer seçenekler, totoolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary proGuard_specs içinde görünebilir.
|
resource_files
|
Etiketler listesi; varsayılan değer res dizini altındaki tüm dosyalar için glob değerindedir.
Oluşturulan dosyalara (genrules'tan) buradaki Etiket aracılığıyla da referans verilebilir. Tek kısıtlama, oluşturulan çıkışların, dahil edilen diğer tüm kaynak dosyalarıyla aynı " res " dizininde olmasıdır.
|
android_instrumentation_test
Kural kaynağını gösterandroid_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. Bir emülatörü başlatır, test edilen uygulamayı, test uygulamasını ve diğer gerekli uygulamaları yükler, test paketinde tanımlanan testleri çalıştırır.
test_app özelliği, testi içeren android_binary
değerini belirtir. Bu android_binary
, instruments özelliği aracılığıyla test edilen android_binary
uygulamasını belirtir.
Örnek
# java/com/samples/hello_world/BUILD android_library( name = "hello_world_lib", srcs = ["Lib.java"], manifest = "LibraryManifest.xml", resource_files = glob(["res/**"]), ) # The app under test android_binary( name = "hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_lib"], )
# javatests/com/samples/hello_world/BUILD android_library( name = "hello_world_test_lib", srcs = ["Tests.java"], deps = [ "//java/com/samples/hello_world:hello_world_lib", ... # test dependencies such as Espresso and Mockito ], ) # The test app android_binary( name = "hello_world_test_app", instruments = "//java/com/samples/hello_world:hello_world_app", manifest = "AndroidManifest.xml", deps = [":hello_world_test_lib"], ) android_instrumentation_test( name = "hello_world_uiinstrumentation_tests", target_device = ":some_target_device", test_app = ":hello_world_test_app", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
support_apks
|
Etiketler listesi; varsayılan değer |
target_device
|
Etiket; zorunlu Testin çalıştırılması gereken android_device. Testi, çalışan bir emülatörde veya fiziksel bir cihazda çalıştırmak için şu bağımsız değişkenleri kullanın:
|
test_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ı yerel olarak (cihazda değil) test etmek içindir.
Android Robolectric test çerçevesiyle çalışır.
Robolectric testleri yazmayla ilgili ayrıntılar için Android Robolectric sitesine bakın.
Örtülü çıkış hedefleri
name.jar
: Testin Java arşivi.name-src.jar
: Kaynakları içeren bir arşiv ("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
'a bağlı olmalıdır. Aşağıdaki örneğe bakın.
android_local_test( name = "SampleTest", srcs = [ "SampleTest.java", ], manifest = "LibManifest.xml", deps = [ ":sample_test_lib", "@robolectric//bazel:android-all", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer
|
srcs
|
Etiketler listesi; varsayılan değer
Yukarıda açıklanan dosya türünde en az bir dosya bulunduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde bir hata meydana gelir.
|
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; varsayılan değer |
javacopts
|
Dize listesi; varsayılan değer: Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya iletilir. |
jvm_flags
|
Dize listesi; varsayılan değer Java ikili dosyası için sarmalayıcı komut dosyası, CLASSPATH tanımı (tüm bağımlı jar dosyalarını bulmak için) içerir ve doğru Java yorumlayıcısını çağırır.
Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından Bu özelliğin |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml olur).
resource_files veya assets tanımlanmışsa ya da test edilen kütüphanelerdeki manifest dosyalarından herhangi birinde minSdkVersion etiketi varsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> Dize; varsayılan değer applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion ve
maxSdkVersion , manifest ve uses-sdk etiketlerinin ilgili özelliklerini de geçersiz kılar. packageName yoksayılır ve belirtilirse applicationId veya manifestteki paketten ayarlanır.
manifest_values parametresini kullanmak için kuralda bir manifest dosyasının bulunması gerekmez.
|
nocompress_extensions
|
Dize listesi; varsayılan değer |
plugins
|
Etiket listesi; varsayılan java_plugin , bu kural derlendiğinde ç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 ortaya çıkan jar dosyasına dahil edilir.
|
resource_configuration_filters
|
Dize listesi; varsayılan değer |
resource_jars
|
Etiketler listesi; varsayılan değer |
resource_strip_prefix
|
Dize; varsayılan değer
Belirtilirse bu yol ön eki, |
runtime_deps
|
Etiketler listesi; varsayılan değer deps gibi bu komutlar 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
Bağımlılıkları değişmediği sürece damgalı ikili programlar 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. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa adı, bu |
use_launcher
|
Boole; varsayılan değer Bu özellik false (yanlış) değerine ayarlanırsa Başlatıcı özelliği ve ilgili |
android_device
Kural kaynağını gösterandroid_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ı doğrudan yürütülerek başlatılabilir. Kendi kurallarınızı tanımlamak yerine mevcut android_device kurallarına bağlı kalmanız önerilir.
Bu kural, bazel testi ve blaze çalıştırma için --run_under işareti için uygun bir hedeftir. Bir emülatör başlatır, test edilen/çalıştırılan hedefi emülatöre kopyalar ve uygun şekilde test eder veya çalıştırır.
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.
Dolaylı çıkış hedefleri
name_images/userdata.dat
: Resim dosyalarını ve emülatörü başlatacak anlık görüntüleri içerirname_images/emulator-meta-data.pb
: Yeniden başlatmak için emülatöre iletilmesi gereken serileştirilmiş bilgileri içerir.
Örnekler
Aşağıdaki örnekte android_device özelliğinin nasıl kullanılacağı gösterilmektedir.
//java/android/helloandroid/BUILD
şunu içerir:
android_device( name = "nexus_s", cache = 32, default_properties = "nexus_s.properties", horizontal_resolution = 480, ram = 512, screen_density = 233, system_image = ":emulator_images_android_16_x86", vertical_resolution = 800, vm_heap = 32, ) filegroup( name = "emulator_images_android_16_x86", srcs = glob(["androidsdk/system-images/android-16/**"]), )
//java/android/helloandroid/nexus_s.properties
şunu içerir:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
Bu kural, resimler ve bir başlangıç komut dosyası oluşturur. bazel run :nexus_s -- --action=start komutunu çalıştırarak emülatörü yerel olarak başlatabilirsiniz. Komut dosyası aşağıdaki işaretleri gösterir:
- --adb_port: adb'nin kullanılacağı bağlantı noktası. Emülatöre adb komutları yayınlamak istiyorsanız bu bağlantı noktası adb'nin bağlanacağı bağlantı noktasıdır.
- --emulator_port: Emülatör 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 olarak false).
- --action: start veya kill.
- --apks_to_install: Emülatöre yüklenecek apk'lerin listesi.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli 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 Taklit edilecek piksel cinsinden yatay ekran çözünürlüğü. Minimum değer 240'tür. |
platform_apks
|
Etiket listesi; varsayılan |
ram
|
Tam sayı; zorunlu Cihaz için taklit edilecek RAM miktarı (megabayt cinsinden). Bu durum, yalnızca cihazda yüklü belirli bir uygulama için değil, cihazın tamamı için geçerlidir. Minimum değer 64 megabayttır. |
screen_density
|
Tam sayı; zorunlu Emülasyonlu ekranın inç başına piksel cinsinden yoğunluğu. Bunun minimum değeri 30 ppi'dır. |
system_image
|
Etiket; zorunlu Aşağıdaki dosyaları içeren bir dosya grubu:
|
vertical_resolution
|
Tam sayı; zorunlu Taklit edilecek dikey ekran çözünürlüğü (piksel). Minimum değer 240'tır. |
vm_heap
|
Tam sayı; zorunlu Android'in her işlem için kullanacağı sanal makine yığınının megabayt cinsinden boyutu. Minimum değer 16 megabayttır. |
android_ndk_repository
Kural kaynağını gösterandroid_ndk_repository(name, api_level, path, repo_mapping)
Yerel kodla Android hedefleri oluşturmayı desteklemek için Bazel'i Android NDK kullanacak şekilde yapılandırır.
Bu android_ndk_repository
uygulamasının Starlark'taki bir uygulamayla değiştirildiğini unutmayın. Sürüm 25 ve sonraki sürümler dahil olmak üzere NDK'nın gelecekteki sürümleri için destek, android_ndk_repository
ürünü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 işleminin, WORKSPACE
dosyanızda bir android_sdk_repository
kuralı da gerektirdiğini unutmayın.
Daha fazla bilgi için Android NDK'yi Bazel ile kullanmayla ilgili tüm dokümanları okuyun.
Örnekler
android_ndk_repository( name = "androidndk", )
Yukarıdaki örnek, Android NDK'nızı $ANDROID_NDK_HOME
cihazında bulup desteklediği en yüksek API düzeyini algılar.
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
Yukarıdaki örnekte, ./android-ndk-r20
alanındaki çalışma alanınızda bulunan Android NDK kullanılır. JNI kodunuzu derlerken API düzey 24 kitaplıklarını kullanır.
cpufeatures
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, cpufeatures'in Bazel ile nasıl kullanılacağı gösterilmektedir.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
api_level
|
Tam sayı; yapılandırılmamış; varsayılan değer |
path
|
Dize; yapılandırılabilir değil; varsayılan değer $ANDROID_NDK_HOME ortam değişkeni ayarlanmalıdır.
Android NDK'yı Android geliştirici sitesinden indirebilirsiniz. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan Örneğin, |
android_sdk_repository
Kural kaynağını gösterandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
Android hedeflerini oluşturmayı desteklemek için Bazel'i yerel bir Android SDK'sı kullanacak şekilde yapılandırır.
Örnekler
Bazel için Android SDK oluşturmak üzere minimum değer,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 en yüksek Android API düzeyini kullanır ve
Android SDK'da yüklü araç araçlarını geliştirir.
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'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. sürüm kontrolünde işaretlenmişse) yararlıdır.
Destek Kitaplıkları
Destek kitaplıkları, Android SDK Yöneticisi'nde "Android Destek Deposu" olarak bulunur.
Bu, yerel bir Maven deposu olarak paketlenmiş, Support ve AppCompat kitaplıkları gibi yaygın Android kitaplıklarından oluşan sürümlü bir gruptur. android_sdk_repository
, bu kitaplıkların her biri için android_binary
ve android_library
hedeflerinin bağımlılıklarında kullanılabilecek Bazel hedefleri oluşturur.
Oluşturulan hedeflerin adları, Android Destek Deposu'ndaki @androidsdk//${group}:${artifact}-${version}
olarak biçimlendirilmiş kitaplıkların Maven koordinatlarından türetilir.
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
|
Tam sayı; yapılandırılabilir değil; varsayılan 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ı 30.0.0 veya sonraki bir sürüm gereklidir. |
path
|
Dize; yapılandırılamaz; varsayılan değer $ANDROID_HOME ortam değişkeni ayarlanmalıdır.
Android SDK'yı Android geliştirici sitesinden indirebilirsiniz. |
repo_mapping
|
Sözlük: Dize -> Dize; varsayılan değer Örneğin, |