規則
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
android_binary
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)
產生 Android 應用程式套件檔案 (.apk)。
隱含輸出目標
name.apk
:Android 應用程式 使用偵錯金鑰簽署的套件檔案 zipaligned 摘要,就能用來開發應用程式及偵錯。 如果您使用偵錯金鑰簽署,就無法發布應用程式。name_unsigned.apk
:該版本的未簽署版本 可以使用發布金鑰簽署,再發布至 我們會如何評估、確定範圍、建構及控管 Google Cloud 運用進階技術建立的產品name_deploy.jar
:包含 此目標的遞移性封閉。Deployment jar 中都包含所有可由 搜尋此目標執行階段類別路徑的類別載入器
name_proguard.jar
:一個 Java 封存檔,其中包含 在name_deploy.jar
。 這個輸出內容只會在 proguard_specs 屬性為 。name_proguard.map
:對應檔案結果: 在name_deploy.jar
上執行 ProGuard。 這個輸出內容只會在 proguard_specs 屬性為 已指定和 proguard_generate_mapping 或 shrink_resources 中設定。
範例
Android 規則範例位於examples/android
Bazel 來源樹狀結構。
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
android_library 、
有 android 限制條件的 java_library ,以及
cc_library 包裝或產生.so 原生程式庫
Android 目標平台。
|
srcs
|
|
assets
|
glob 所有檔案
assets 目錄內。您也可以參照其他規則 (
檔案),或在其他套件中匯出檔案 (前提是這些檔案在
assets_dir 目錄。
|
assets_dir
|
assets 中檔案的路徑。
assets 和 assets_dir 配對描述已封裝
資產及兩個屬性都應擇一提供,或完全不提供。
|
crunch_png
|
|
custom_package
|
|
debug_key
|
警告:請勿使用正式版金鑰, 受到嚴格保障,不會保存在原始碼樹狀結構中。 |
debug_signing_keys
|
警告:請勿使用正式版金鑰, 受到嚴格保障,不會保存在原始碼樹狀結構中。 |
debug_signing_lineage_file
|
警告:請勿使用正式版金鑰, 受到嚴格保障,不會保存在原始碼樹狀結構中。 |
densities
|
|
dex_shards
|
請注意,每個資料分割在最終應用程式中會產生至少一個 dex。因此 不建議為發布二進位檔將此值設為超過 1。 |
dexopts
|
|
enable_data_binding
|
如要建構包含資料繫結的 Android 應用程式,您也必須執行下列步驟:
|
incremental_dexing
|
|
instruments
|
要檢測的 如果設定此屬性,系統會將此 |
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
key_rotation_min_sdk
|
|
main_dex_list
|
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" 搭配使用。
|
main_dex_list_opts
|
|
main_dex_proguard_specs
|
multidex 屬性設為 legacy 時才能使用。
|
manifest
|
AndroidManifest.xml 。
如果已定義 resource_files 或資產,就必須定義。
|
manifest_values
|
|
multidex
|
可能的值包括:
|
nocompress_extensions
|
|
package_id
|
詳情請參閱 AAPT2 的 |
plugins
|
java_plugin :
plugins 屬性
建立這個目標資源產生來源:
外掛程式會納入
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping 產生的對應檔案,目的是
再次將相同的對應關係套用至新的版本。
|
proguard_generate_mapping
|
proguard_specs 為
。這個檔案會列出原始和
混淆類別、方法和欄位名稱。
警告:如果使用這個屬性,Proguard
規格不得包含 |
proguard_specs
|
|
resource_configuration_filters
|
en_XA 和/或 ar_XB 虛擬語言代碼。
|
resource_files
|
glob 所有檔案
res 目錄內。
可以參照由 Genrules 產生的檔案 請一併在這裡加上標籤唯一的限制是 產生的輸出內容必須位於相同的「 res 」與任何其他網站一樣
附加的資源檔案
|
shrink_resources
|
manifest 和 resource_files 屬性),並且需要 ProGuard。
其運作方式與 Gradle 資源縮減器大致相同
(https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
重要差異:
name_files/resource_shrinker.log
系統也會產生這些模型,並詳細說明分析和執行刪除的作業。
可能的值包括:
|
aar_import
aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)
這項規則允許使用 .aar
檔案做為
「android_library
」和
android_binary
規則。
範例
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"], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
aar
|
.aar 檔案。
|
exports
|
|
srcjar
|
|
android_library
android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)
這項規則會將來源編譯並封存至 .jar
檔案中。
以隱含方式將 Android 執行階段程式庫 android.jar
放入
編譯類別路徑
隱含輸出目標
libname.jar
:Java 封存檔。libname-src.jar
:包含 來源 (「來源 jar」)。name.aar
:Android「aar」包含 Java 封存檔的套件 和資源不包含遞移封閉。
範例
Android 規則範例位於examples/android
Bazel 來源樹狀結構。
以下範例顯示
如何設定 idl_import_root
。
讓 //java/bazel/helloandroid/BUILD
包含:
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"], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
android_library 、
有 android 限制條件的 java_library ,以及
cc_library 包裝或產生 .so 原生資料庫
Android 目標平台
|
srcs
|
.java 或 .srcjar 檔案清單:
來建立目標
如果省略 |
assets
|
glob 所有檔案
assets 目錄內。您也可以參照其他規則 (
檔案),或在其他套件中匯出檔案 (前提是這些檔案在
assets_dir 目錄。
|
assets_dir
|
assets 中檔案的路徑。
assets 和 assets_dir 配對描述已封裝
資產及兩個屬性都應擇一提供,或完全不提供。
|
custom_package
|
|
enable_data_binding
|
如要建構包含資料繫結的 Android 應用程式,您也必須執行下列步驟:
|
exported_plugins
|
java_plugin 的清單 (例如註解)
處理器),將資料匯出至直接依附於此程式庫的程式庫。
|
exports
|
exports 屬性達成的所有規則
就是直接依附於
獲得 exports 的目標。
|
exports_manifest
|
android_binary 目標
依附此目標uses-permissions 屬性一律不會匯出。
|
idl_import_root
|
這個路徑將用來做為匯入根目錄, 需要這個程式庫 如果指定 詳情請參閱 範例。 |
idl_parcelables
|
android_library 目標直接依附這個程式庫
或經由遞移性關閉,但不會轉譯為 Java 語言
執行特定工作
只有 請務必妥善放置這些檔案,輔助編譯器才能找到。 請參閱 idl_import_root 的說明 深入瞭解這代表什麼。 |
idl_preprocessed
|
android_library 目標直接依附這個程式庫
或經由遞移性關閉,但不會轉譯為 Java 語言
執行特定工作
只預先處理對應至直接對應的 |
idl_srcs
|
srcs 。
這些檔案將成為
請務必妥善放置這些檔案,輔助編譯器才能找到。 請參閱 idl_import_root 的說明 深入瞭解這代表什麼。 |
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
manifest
|
AndroidManifest.xml 。
如果已定義 resource_files 或資產,就必須定義。
|
neverlink
|
neverlink 」的規則輸出內容不會用於
建立「.apk 」。如果 SDK 提供程式庫,就相當實用
執行階段環境。
|
plugins
|
java_plugin :
plugins 屬性
建立這個目標資源產生來源:
外掛程式會納入
|
proguard_specs
|
android_binary 目標。
這裡包含的檔案只能包含冪等規則,例如 -dontnote、-dontwarn、
以及以 -keep 開頭的規則。其他選項只能在
android_binary 的 proguard_specs 確保非自動合併。
|
resource_files
|
glob 所有檔案
res 目錄內。
可以參照由 Genrules 產生的檔案 請一併在這裡加上標籤唯一的限制是 產生的輸出內容必須位於相同的「 res 」與任何其他網站一樣
附加的資源檔案
|
android_instrumentation_test
android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)
android_instrumentation_test
規則會執行 Android 檢測設備測試。這會導致
啟動模擬器、安裝要測試的應用程式、測試應用程式,
執行其他必要的應用程式,並執行測試套件中定義的測試。
test_app 屬性會指定
android_binary
,其中包含測試。這部android_binary
會指定要測試的 android_binary
應用程式
instruments 屬性
範例
# 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", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
support_apks
|
|
target_device
|
應執行測試的 android_device。 如要在已開始執行的模擬器或實體裝置上執行測試,請使用
這些引數:
|
test_app
|
android_binary 目標必須指定要透過哪個目標進行測試
其 instruments 屬性。
|
android_local_test
android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)
這項規則適用於在本機對 android_library
規則進行單元測試
而非裝置。
此版本可與 Android Robolectric 測試架構搭配使用。
詳情請參閱 Android Robolectric 網站:
以及編寫 Robolectric 測試
隱含輸出目標
name.jar
:測試的 Java 封存檔。name-src.jar
:包含來源的封存檔 (「來源 jar」)。name_deploy.jar
:適合的 Java 部署封存檔 以便進行部署 (只有在明確要求時才會建構)。
範例
如要搭配 android_local_test
使用 Robolectric,請新增
Robolectric
將存放區複製到 WORKSPACE
檔案:
http_archive( name = "robolectric", urls = ["https://github.com/robolectric/robolectric/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()
maven_jar
規則。
因此每項 android_local_test
規則都應該依附
@robolectric//bazel:robolectric
。請參閱以下範例。
android_local_test( name = "SampleTest", srcs = [ "SampleTest.java", ], manifest = "LibManifest.xml", deps = [ ":sample_test_lib", "@robolectric//bazel:robolectric", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
|
srcs
|
只要 至少有一個檔案類型包含上述的檔案類型。否則, 錯誤。
|
custom_package
|
test_class 。
|
densities
|
|
enable_data_binding
|
|
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
jvm_flags
|
Java 二進位檔的包裝函式指令碼包含 CLASSPATH 定義
(找出所有相依的 jar 檔案) 並叫用正確的 Java 解譯器。
包裝函式指令碼產生的指令列包含
主要類別後面加上 請注意,這項屬性對 |
manifest
|
AndroidManifest.xml 。
如已定義 resource_files 或資產,或其中任何資訊清單的
受測試的程式庫中都含有 minSdkVersion 標記。
|
manifest_values
|
applicationId 、versionCode 、versionName 、
minSdkVersion 、targetSdkVersion 和
maxSdkVersion 也會覆寫相應的屬性
資訊清單
use-sdk 標記。系統將忽略 packageName ,並從以下兩者中擇一進行設定
如果符合條件,則設為 applicationId
或是在資訊清單中指定套件
您不必為規則設定資訊清單,也能使用 manifest_values。
|
nocompress_extensions
|
|
plugins
|
java_plugin 。
建構應用程式程式庫可能也會從使用以下依附元件的依附元件繼承外掛程式
exported_plugins 。資源
外掛程式產生的 jar 檔案會納入這項規則的結果 jar 中
|
resource_configuration_filters
|
|
resource_jars
|
|
resource_strip_prefix
|
如果有指定,系統會從 |
runtime_deps
|
deps 相同,這些項目會顯示在執行階段的類別路徑中,但與一般的 deps 不同
而非編譯時間類別路徑應該只有執行階段所需的依附元件
這裡列出的條件依附元件分析工具應忽略同時顯示在兩者中的目標
《runtime_deps 》和《deps 》。
|
stamp
|
除非其依附元件變更,否則系統「不會」重新建構加上時間戳記的二進位檔。 |
test_class
|
這個屬性會指定要執行的 Java 類別名稱
測試。這項設定很少需要設定。如果省略這個引數,Java 類別就會生效
其名稱對應至此項目的 |
use_launcher
|
如果此屬性設為 false,
launcher 屬性和相關的
|
android_device
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)
這項規則會使用指定的 規格。您可以透過 bazel Run 啟動這個模擬器 或直接執行產生的指令碼建議根據 而不必自行定義 android_device 規則
此規則是 --run_under 標記用於 bazel 測試和 Blaze 的適當目標 此程序的第一步 是將程式碼簽入執行所有單元測試的存放區中系統會啟動模擬器、將要測試/執行的目標複製到模擬器, 然後加以測試或視需求執行
如果基礎映像檔,android_device
支援建立 KVM 映像檔
system_image 以 X86 為基礎且
已針對 I686 CPU 架構進行最佳化如要使用 KVM,請
tags = ['requires-kvm']
附加到 android_device
規則。
隱含輸出目標
name_images/userdata.dat
: 包含用來啟動模擬器的圖片檔和快照name_images/emulator-meta-data.pb
: 包含傳遞至模擬器所需的序列化資訊 重新啟動。
範例
以下範例說明瞭如何使用 android_device。
//java/android/helloandroid/BUILD
包含
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
包含:
ro.product.brand=google ro.product.device=crespo ro.product.manufacturer=samsung ro.product.model=Nexus S ro.product.name=soju
這項規則會產生圖片和一個開機指令碼。您可以啟動 執行 bazel run :nexus_s -- --action=start。指令碼會顯示 下列標記:
- --adb_port:用來公開 ADB 的通訊埠。如果需要向 ADB 發出 以便透過這個通訊埠向模擬器發出指令 。
- --emulator_port:公開模擬器 telnet 管理作業的通訊埠 控制台。
- --enable_display:以螢幕啟動模擬器 (如果為 true (預設值) 設為 false)。
- --action:開始或終止。
- --apks_to_install:要在模擬器上安裝的 APK 清單。
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
cache
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
設定 Bazel 以使用 Android NDK,以便支援透過原生功能建構 Android 目標 再也不是件繁重乏味的工作
請注意,在 Android 上進行建構時也需要 android_sdk_repository
規則的
WORKSPACE
檔案。
如需詳細資訊,請參閱 完整說明文件,瞭解如何搭配使用 Android NDK 與 Bazel。
範例
android_ndk_repository( name = "androidndk", )
上述範例會從 $ANDROID_NDK_HOME
找出 Android NDK 並偵測
支援的最高 API 級別
android_ndk_repository( name = "androidndk", path = "./android-ndk-r20", api_level = 24, )
上述範例將使用位於以下工作區的 Android NDK:
./android-ndk-r20
。編譯 JNI 時會使用 API 級別 24 的程式庫
再也不是件繁重乏味的工作
CPU 功能
Android NDK 中包含了 cpufeatures 程式庫 可在執行階段偵測裝置的 CPU下列範例說明如何使用 搭配使用 Bazel 和 cpufeatures。
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
api_level
|
|
path
|
$ANDROID_NDK_HOME 環境變數。
您可以從以下位置下載 Android NDK: Android 開發人員網站 。 |
repo_mapping
|
舉例來說,項目 |
android_sdk_repository
android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
設定 Bazel 使用本機 Android SDK 支援建構 Android 目標。
範例
為 Bazel 設定 Android SDK 至少需要加入android_sdk_repository
規則
「androidsdk」並在 WORKSPACE
檔案中設定 $ANDROID_HOME
將環境變數設為 Android SDK 的路徑Bazel 將使用最高的 Android API 級別
並開啟 Android SDK 中安裝的建構工具版本。
android_sdk_repository( name = "androidsdk", )
為確保能重現的版本,path
、api_level
和
build_tools_version
屬性可設為特定值。如果發生以下情況,建構作業將會失敗
Android SDK 並未安裝指定的 API 級別或建構工具版本。
android_sdk_repository( name = "androidsdk", path = "./sdk", api_level = 19, build_tools_version = "25.0.0", )
以上範例也示範如何使用與 Android SDK 的工作區相關路徑。這是 如果 Android SDK 屬於 Bazel 工作區的一部分 (例如已簽入版本),就會有所幫助 控制組)。
支援資料庫
Android SDK Manager 中的支援資料庫為「Android 支援存放區」。
這是一組通用的 Android 程式庫,例如 Support 和 AppCompat 程式庫
封裝為本機 Maven 存放區android_sdk_repository
會產生 Bazel
能為每個程式庫套用目標
android_binary
和android_library
目標。
產生的目標名稱衍生自
Android 支援存放區,格式為 @androidsdk//${group}:${artifact}-${version}
。
以下範例說明 android_library
如何依附 25.0.0 版的
v7 appcompat 程式庫。
android_library( name = "lib", srcs = glob(["*.java"]), manifest = "AndroidManifest.xml", resource_files = glob(["res/**"]), deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
api_level
|
如要查看 |
build_tools_version
|
Bazel 需要建構工具 30.0.0 以上版本。 |
path
|
$ANDROID_HOME 環境變數。
Android SDK 可以在下列位置下載: 前往 Android 開發人員網站。 |
repo_mapping
|
舉例來說,項目 |