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üleandroid_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 sonucuname_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 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
|
assets
|
Etiket listesi; varsayılan değer glob
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 |
custom_package
|
String; varsayılan değer |
debug_key
|
Etiket; varsayılan değer 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 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 UYARI: Üretim anahtarlarınızı kullanmayın, temin edilir ve kaynak ağacınızda tutulmaz. |
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. İşte bu nedenle Bunun 1'den fazlasına ayarlanması, yayın ikili programları için ö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
|
Tam sayı; nonconfig; varsayılan değer |
instruments
|
Etiket; varsayılan değer
Bu özellik ayarlanırsa |
javacopts
|
Dize listesi; varsayılan değer Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
key_rotation_min_sdk
|
String; 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 birlikte 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 ayarlanırsa izin verilir.
|
manifest
|
Etiket; zorunlu Android manifest dosyasının adı (normal olarakAndroidManifest.xml ).
resource_files veya assets tanımlanırsa tanımlanmalıdır.
|
manifest_values
|
Sözlük: Dize -> String; varsayılan değer
Manifest'teki tüm
|
multidex
|
String; 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
Eklentiler özelliği
bu hedef oluşturuldu. Kaynaklar:
eklenti,
yardımcı olur.
|
proguard_apply_dictionary
|
Etiket; varsayılan değer |
proguard_apply_mapping
|
Etiket; varsayılan değer proguard_generate_mapping tarafından oluşturulan
yeniden kullanılır.
|
proguard_generate_mapping
|
Boole; nonconfig; varsayılan değer 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 |
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 ayar.
|
resource_files
|
Etiket listesi; varsayılan değer glob
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 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:
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:
|
aar_import
Kural kaynağını görüntüleaar_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 |
srcjar
|
Etiket; varsayılan değer |
android_library
Kural kaynağını görüntüleandroid_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 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 .java veya .srcjar dosyalarının listesi:
işlenir.
|
assets
|
Etiket listesi; varsayılan değer glob
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 |
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 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 |
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_manifest
|
Tam sayı; varsayılan değer 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 Bu yol, bu kitaplığa bağımlı hale geleceksiniz.
Bkz. örnekler. |
idl_parcelables
|
Etiket listesi; varsayılan değer 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 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 android_library hedef
veya geçişli kapanma yoluyla gerçekleştirilir, ancak Java'ya çevrilmez.
veya derlenebilir.
Yalnızca |
idl_srcs
|
Etiket listesi; varsayılan değer srcs içeriğine sahip.
Bu dosyalar,
Doğrudan bu kitaplığa bağlı 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 derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir. |
manifest
|
Etiket; varsayılan değer AndroidManifest.xml ).
resource_files veya assets tanımlanırsa tanımlanmalıdır.
|
neverlink
|
Boole; varsayılan değer 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 java_plugin
Eklentiler özelliği
bu hedef oluşturuldu. Kaynaklar:
eklenti,
yardımcı olur.
|
proguard_specs
|
Etiket listesi; varsayılan değer 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 glob
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üleandroid_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 |
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_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üleandroid_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
|
srcs
|
Etiket listesi; varsayılan değer
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.
|
custom_package
|
String; varsayılan değer test_class öğesini de kullanmanız gerekecektir.
|
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'a iletilir. |
jvm_flags
|
Dize listesi; varsayılan değer 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 Bu özelliğin |
manifest
|
Etiket; varsayılan değer 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 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 |
plugins
|
Etiket listesi; varsayılan değer 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 |
resource_jars
|
Etiket listesi; varsayılan değer |
resource_strip_prefix
|
String; varsayılan değer
Belirtilirse bu yol öneki |
runtime_deps
|
Etiket listesi; varsayılan değer 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
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
test_class
|
String; varsayılan değer
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 |
use_launcher
|
Boole; varsayılan değer Bu özellik false (yanlış) değerine ayarlanırsa
Başlatıcı özelliğini ve ilgili
|
android_device
Kural kaynağını görüntüleandroid_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çerirname_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 |
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 |
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:
|
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üleandroid_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 |
path
|
String; nonconfig; varsayılan değer $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 Örneğin, |
android_sdk_repository
Kural kaynağını görüntüleandroid_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 azandroid_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 Belirli bir derleme için kullanılan API düzeyi,
|
build_tools_version
|
String; nonconfig; varsayılan değer Bazel için derleme araçları 30.0.0 veya sonraki sürümleri gerekir. |
path
|
String; nonconfig; varsayılan değer $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 Örneğin, |