aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Humesky <ahumesky@google.com>2021-12-01 11:26:34 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-12-01 11:26:34 +0000
commit7f7740c9ea674bf465c2afe0496065f7a6a0449e (patch)
tree852e73e45af48623c78a152bdd5dc38f8a4986ab
parent24a4b6f293a39cb107a77f381bf2f8a2d638f36f (diff)
parent5b733a7beeba61f5c69e647e717cb6018b5c7226 (diff)
downloadbazelbuild-rules_android-android13-qpr3-s11-release.tar.gz
Merge remote-tracking branch 'aosp/upstream-pre-alpha' into update-rules_android am: 219e8b42b9 am: dbcbbb2c9a am: 78dafa3af2 am: 5b733a7beet_frc_odp_330442040t_frc_odp_330442000t_frc_con_330443020t_frc_cbr_330443000t_frc_ase_330444010t_frc_art_330443060t_frc_adb_330444000android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r57android-13.0.0_r56android-13.0.0_r55android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android-13.0.0_r30android-13.0.0_r29android-13.0.0_r28android-13.0.0_r27android-13.0.0_r24android-13.0.0_r23android-13.0.0_r22android-13.0.0_r21android-13.0.0_r20android-13.0.0_r19android-13.0.0_r18android-13.0.0_r17android-13.0.0_r16aml_uwb_331910010aml_uwb_331820070aml_uwb_331613010aml_uwb_331611010aml_uwb_331410010aml_uwb_331310030aml_uwb_331115000aml_uwb_331015040aml_uwb_330810010aml_tz4_332714070aml_tz4_332714050aml_tz4_332714010aml_tz4_331910000aml_tz4_331314030aml_tz4_331314020aml_tz4_331314010aml_tz4_331012050aml_tz4_331012040aml_tz4_331012000aml_go_wif_330911000aml_go_uwb_330912000aml_go_tz4_330912000aml_go_tet_330914010aml_go_swc_330913000aml_go_sta_330911000aml_go_sdk_330810000aml_go_sch_330911000aml_go_res_330912000aml_go_per_330912000aml_go_odp_330913000aml_go_odp_330912000aml_go_neu_330912000aml_go_net_330913000aml_go_mpr_330912000aml_go_ase_330913000aml_go_ads_330915100aml_go_ads_330915000aml_go_ads_330913000aml_go_adb_330913000aml_ase_331311020aml_ase_331112000aml_ase_331011020aml_ads_331920180aml_ads_331814200aml_ads_331710270aml_ads_331611190aml_ads_331511020aml_ads_331418080aml_ads_331131000android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-qpr1-s8-releaseandroid13-qpr1-s7-releaseandroid13-qpr1-s6-releaseandroid13-qpr1-s5-releaseandroid13-qpr1-s4-releaseandroid13-qpr1-s3-releaseandroid13-qpr1-s2-releaseandroid13-qpr1-s1-releaseandroid13-qpr1-releaseandroid13-mainline-uwb-releaseandroid13-mainline-tzdata4-releaseandroid13-mainline-go-wifi-releaseandroid13-mainline-go-uwb-releaseandroid13-mainline-go-tzdata4-releaseandroid13-mainline-go-tethering-releaseandroid13-mainline-go-sdkext-releaseandroid13-mainline-go-scheduling-releaseandroid13-mainline-go-resolv-releaseandroid13-mainline-go-permission-releaseandroid13-mainline-go-os-statsd-releaseandroid13-mainline-go-odp-releaseandroid13-mainline-go-neuralnetworks-releaseandroid13-mainline-go-networking-releaseandroid13-mainline-go-mediaprovider-releaseandroid13-mainline-go-media-swcodec-releaseandroid13-mainline-go-appsearch-releaseandroid13-mainline-go-adservices-releaseandroid13-mainline-go-adbd-releaseandroid13-mainline-appsearch-releaseandroid13-mainline-adservices-releaseandroid13-frc-odp-releaseandroid13-frc-conscrypt-releaseandroid13-frc-cellbroadcast-releaseandroid13-frc-art-releaseandroid13-frc-adbd-releaseandroid13-devandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-releaseandroid13-d3-s1-releaseandroid13-d2-releaseaml_tz4_332714010
Original change: https://android-review.googlesource.com/c/platform/external/bazelbuild-rules_android/+/1907391 Change-Id: I96f3664a63711574baa695f0a24a9bde5966a80e
-rw-r--r--README.md24
-rw-r--r--defs.bzl29
-rw-r--r--rules/BUILD2
-rw-r--r--rules/aar_import/impl.bzl5
-rw-r--r--rules/acls.bzl37
-rw-r--r--rules/acls/android_instrumentation_derived_test_class_rollout.bzl23
-rw-r--r--rules/acls/android_instrumentation_test_manifest_check_rollout.bzl (renamed from rules/acls/fix_application_id.bzl)11
-rw-r--r--rules/acls/android_library_starlark_resource_outputs.bzl26
-rw-r--r--rules/acls/lint_registry_rollout.bzl21
-rw-r--r--rules/android_application/android_feature_module_rule.bzl4
-rw-r--r--rules/android_library/attrs.bzl1
-rw-r--r--rules/android_library/rule.bzl21
-rw-r--r--rules/bundletool.bzl75
-rw-r--r--rules/busybox.bzl23
-rw-r--r--rules/data_binding.bzl26
-rw-r--r--rules/flags/flag_defs.bzl4
-rw-r--r--rules/java.bzl49
-rw-r--r--rules/resources.bzl20
-rw-r--r--rules/rules.bzl4
-rw-r--r--rules/utils.bzl9
-rw-r--r--src/validations/aar_import_checks/BUILD21
-rw-r--r--toolchains/android/toolchain.bzl50
-rw-r--r--tools/android/BUILD14
23 files changed, 338 insertions, 161 deletions
diff --git a/README.md b/README.md
index 6cba04f..1d3ffbf 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
NOTE: This branch contains a development preview of the Starlark implementation of Android rules for Bazel. This code is incomplete and may not function as-is.
-Bazel 4.0.0 or newer and the following flags are necessary to use these rules:
+A version of Bazel built at or near head and the following flags are necessary to use these rules:
```
--experimental_enable_android_migration_apis
--experimental_google_legacy_api
@@ -13,15 +13,6 @@ Bazel 4.0.0 or newer and the following flags are necessary to use these rules:
--experimental_android_databinding_v2
```
-Also, register the Android toolchains in the `WORKSPACE` file with:
-```
-register_toolchains(
- "@build_bazel_rules_android//toolchains/android:android_default_toolchain",
- "@build_bazel_rules_android//toolchains/android_sdk:android_sdk_tools",
-)
-```
-(Assuming that the Android rules repository in the `WORKSPACE` file is named `build_bazel_rules_android`.)
-
## Overview
This repository contains the Starlark implementation of Android rules in Bazel.
@@ -38,10 +29,17 @@ To use the new Bazel Android rules, add the following to your WORKSPACE file:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "build_bazel_rules_android",
- urls = ["https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"],
- sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806",
- strip_prefix = "rules_android-0.1.1",
+ urls = ["https://github.com/bazelbuild/rules_android/archive/refs/heads/pre-alpha.zip"],
+ strip_prefix = "rules_android-pre-alpha",
)
+ load("@build_bazel_rules_android//:defs.bzl", "rules_android_workspace")
+ rules_android_workspace()
+
+ register_toolchains(
+ "@build_bazel_rules_android//toolchains/android:android_default_toolchain",
+ "@build_bazel_rules_android//toolchains/android_sdk:android_sdk_tools",
+ )
+
Then, in your BUILD files, import and use the rules:
diff --git a/defs.bzl b/defs.bzl
index 4ac34cc..4d08708 100644
--- a/defs.bzl
+++ b/defs.bzl
@@ -16,21 +16,16 @@
load("@rules_jvm_external//:defs.bzl", "maven_install")
-def rules_android_workspace(name):
- """ Sets up workspace dependencies for rules_android."""
+def rules_android_workspace():
+ """ Sets up workspace dependencies for rules_android."""
- native.register_toolchains(
- "@rules_android//toolchains/android:android_default_toolchain",
- "@rules_android//toolchains/android_sdk:android_sdk_tools",
- )
-
- maven_install(
- name = "rules_android_maven",
- artifacts = [
- "com.android.tools.build:bundletool:1.6.1",
- ],
- repositories = [
- "https://maven.google.com",
- "https://repo1.maven.org/maven2",
- ],
- )
+ maven_install(
+ name = "rules_android_maven",
+ artifacts = [
+ "com.android.tools.build:bundletool:1.6.1",
+ ],
+ repositories = [
+ "https://maven.google.com",
+ "https://repo1.maven.org/maven2",
+ ],
+ )
diff --git a/rules/BUILD b/rules/BUILD
index d4c8d88..ac89362 100644
--- a/rules/BUILD
+++ b/rules/BUILD
@@ -8,5 +8,5 @@ exports_files([
alias(
name = "ResourceProcessorBusyBox",
actual = "@bazel_tools//tools/android:busybox",
- visibility = ["//visibility:public"],
+ visibility = ["//visibility:public"],
)
diff --git a/rules/aar_import/impl.bzl b/rules/aar_import/impl.bzl
index cec5a84..280060e 100644
--- a/rules/aar_import/impl.bzl
+++ b/rules/aar_import/impl.bzl
@@ -248,7 +248,10 @@ def _create_import_deps_check(
args = ctx.actions.args()
args.add_all(jars_to_check, before_each = "--input")
args.add_all(declared_deps, before_each = "--directdep")
- args.add_all(transitive_deps, before_each = "--classpath_entry")
+ args.add_all(
+ depset(order = "preorder", transitive = [declared_deps, transitive_deps]),
+ before_each = "--classpath_entry",
+ )
args.add_all(bootclasspath, before_each = "--bootclasspath_entry")
args.add("--checking_mode=error")
args.add("--jdeps_output", jdeps_output)
diff --git a/rules/acls.bzl b/rules/acls.bzl
index ea5032d..ffa1377 100644
--- a/rules/acls.bzl
+++ b/rules/acls.bzl
@@ -15,7 +15,7 @@
"""Access Control Lists.
To create a new list:
- 1. Create new .bzl file in this directory with a list of targets.
+ 1. Create new .bzl file in the acls directory with a list of targets.
2. Create matching method in this file.
3. Add matching method to struct.
@@ -42,13 +42,14 @@ load("@rules_android//rules/acls:android_instrumentation_binary_starlark_resourc
load("@rules_android//rules/acls:android_feature_splits_dogfood.bzl", "ANDROID_FEATURE_SPLITS_DOGFOOD")
load("@rules_android//rules/acls:android_library_implicit_exports.bzl", "ANDROID_LIBRARY_IMPLICIT_EXPORTS", "ANDROID_LIBRARY_IMPLICIT_EXPORTS_GENERATOR_FUNCTIONS")
load("@rules_android//rules/acls:android_library_resources_without_srcs.bzl", "ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS", "ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS_GENERATOR_FUNCTIONS")
+load("@rules_android//rules/acls:android_library_starlark_resource_outputs.bzl", "ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_FALLBACK", "ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_ROLLOUT")
load("@rules_android//rules/acls:android_lint_checks_rollout.bzl", "ANDROID_LINT_CHECKS_FALLBACK", "ANDROID_LINT_CHECKS_ROLLOUT")
load("@rules_android//rules/acls:android_lint_rollout.bzl", "ANDROID_LINT_FALLBACK", "ANDROID_LINT_ROLLOUT")
+load("@rules_android//rules/acls:lint_registry_rollout.bzl", "LINT_REGISTRY_FALLBACK", "LINT_REGISTRY_ROLLOUT")
load("@rules_android//rules/acls:android_build_stamping_rollout.bzl", "ANDROID_BUILD_STAMPING_FALLBACK", "ANDROID_BUILD_STAMPING_ROLLOUT")
load("@rules_android//rules/acls:b122039567.bzl", "B122039567")
load("@rules_android//rules/acls:b123854163.bzl", "B123854163")
load("@rules_android//rules/acls:dex2oat_opts.bzl", "CAN_USE_DEX2OAT_OPTIONS")
-load("@rules_android//rules/acls:fix_application_id.bzl", "FIX_APPLICATION_ID_FALLBACK", "FIX_APPLICATION_ID_ROLLOUT")
load("@rules_android//rules/acls:fix_export_exporting_rollout.bzl", "FIX_EXPORT_EXPORTING_FALLBACK", "FIX_EXPORT_EXPORTING_ROLLOUT")
load("@rules_android//rules/acls:fix_resource_transitivity_rollout.bzl", "FIX_RESOURCE_TRANSITIVITY_FALLBACK", "FIX_RESOURCE_TRANSITIVITY_ROLLOUT")
load("@rules_android//rules/acls:host_dex2oat_rollout.bzl", "AIT_USE_HOST_DEX2OAT_ROLLOUT", "AIT_USE_HOST_DEX2OAT_ROLLOUT_FALLBACK")
@@ -65,6 +66,8 @@ load(
"PARTIAL_JETIFICATION_TARGETS_ROLLOUT",
)
load("@rules_android//rules/acls:kt_android_library_rollout.bzl", "KT_ANDROID_LIBRARY_FALLBACK", "KT_ANDROID_LIBRARY_ROLLOUT")
+load("@rules_android//rules/acls:android_instrumentation_test_manifest_check_rollout.bzl", "ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_FALLBACK", "ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_ROLLOUT")
+load("@rules_android//rules/acls:android_instrumentation_derived_test_class_rollout.bzl", "ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_FALLBACK", "ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_ROLLOUT")
def _in_aar_import_deps_checker(fqn):
return not _matches(fqn, AAR_IMPORT_DEPS_CHECKER_FALLBACK_DICT) and _matches(fqn, AAR_IMPORT_DEPS_CHECKER_ROLLOUT_DICT)
@@ -102,6 +105,9 @@ def _in_android_lint_checks_rollout(fqn):
def _in_android_lint_rollout(fqn):
return not _matches(fqn, ANDROID_LINT_FALLBACK_DICT) and _matches(fqn, ANDROID_LINT_ROLLOUT_DICT)
+def _in_lint_registry_rollout(fqn):
+ return not _matches(fqn, LINT_REGISTRY_FALLBACK_DICT) and _matches(fqn, LINT_REGISTRY_ROLLOUT_DICT)
+
def _in_android_build_stamping_rollout(fqn):
return not _matches(fqn, ANDROID_BUILD_STAMPING_FALLBACK_DICT) and _matches(fqn, ANDROID_BUILD_STAMPING_ROLLOUT_DICT)
@@ -128,15 +134,15 @@ def _in_android_library_resources_without_srcs(fqn):
def _in_android_library_resources_without_srcs_generator_functions(gfn):
return gfn in ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS_GENERATOR_FUNCTIONS_DICT
+def _in_android_library_starlark_resource_outputs_rollout(fqn):
+ return not _matches(fqn, ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_FALLBACK_DICT) and _matches(fqn, ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_ROLLOUT_DICT)
+
def _in_app_installation_snapshot(fqn):
return not _matches(fqn, APP_INSTALLATION_SNAPSHOT_FALLBACK_DICT) and _matches(fqn, APP_INSTALLATION_SNAPSHOT_DICT)
def _in_dex2oat_opts(fqn):
return _matches(fqn, CAN_USE_DEX2OAT_OPTIONS_DICT)
-def _in_fix_application_id(fqn):
- return not _matches(fqn, FIX_APPLICATION_ID_FALLBACK_DICT) and _matches(fqn, FIX_APPLICATION_ID_ROLLOUT_DICT)
-
def _in_fix_export_exporting_rollout(fqn):
return not _matches(fqn, FIX_EXPORT_EXPORTING_FALLBACK_DICT) and _matches(fqn, FIX_EXPORT_EXPORTING_ROLLOUT_DICT)
@@ -176,6 +182,12 @@ def _in_partial_jetification_targets(fqn):
def _in_kt_android_library_rollout(fqn):
return not _matches(fqn, KT_ANDROID_LIBRARY_FALLBACK_DICT) and _matches(fqn, KT_ANDROID_LIBRARY_ROLLOUT_DICT)
+def _in_android_instrumentation_test_manifest_check_rollout(fqn):
+ return not _matches(fqn, ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_FALLBACK_DICT) and _matches(fqn, ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_ROLLOUT_DICT)
+
+def _in_android_instrumentation_test_derived_test_class_rollout(fqn):
+ return not _matches(fqn, ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_FALLBACK_DICT) and _matches(fqn, ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_ROLLOUT_DICT)
+
def _make_dict(lst):
"""Do not use this method outside of this file."""
return {t: True for t in lst}
@@ -199,10 +211,14 @@ ANDROID_LIBRARY_IMPLICIT_EXPORTS_DICT = _make_dict(ANDROID_LIBRARY_IMPLICIT_EXPO
ANDROID_LIBRARY_IMPLICIT_EXPORTS_GENERATOR_FUNCTIONS_DICT = _make_dict(ANDROID_LIBRARY_IMPLICIT_EXPORTS_GENERATOR_FUNCTIONS)
ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS_DICT = _make_dict(ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS)
ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS_GENERATOR_FUNCTIONS_DICT = _make_dict(ANDROID_LIBRARY_RESOURCES_WITHOUT_SRCS_GENERATOR_FUNCTIONS)
+ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_FALLBACK_DICT = _make_dict(ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_FALLBACK)
+ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_ROLLOUT_DICT = _make_dict(ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_ROLLOUT)
ANDROID_LINT_CHECKS_FALLBACK_DICT = _make_dict(ANDROID_LINT_CHECKS_FALLBACK)
ANDROID_LINT_CHECKS_ROLLOUT_DICT = _make_dict(ANDROID_LINT_CHECKS_ROLLOUT)
ANDROID_LINT_FALLBACK_DICT = _make_dict(ANDROID_LINT_FALLBACK)
ANDROID_LINT_ROLLOUT_DICT = _make_dict(ANDROID_LINT_ROLLOUT)
+LINT_REGISTRY_FALLBACK_DICT = _make_dict(LINT_REGISTRY_FALLBACK)
+LINT_REGISTRY_ROLLOUT_DICT = _make_dict(LINT_REGISTRY_ROLLOUT)
ANDROID_BUILD_STAMPING_ROLLOUT_DICT = _make_dict(ANDROID_BUILD_STAMPING_ROLLOUT)
ANDROID_BUILD_STAMPING_FALLBACK_DICT = _make_dict(ANDROID_BUILD_STAMPING_FALLBACK)
ANDROID_TEST_LOCKDOWN_GENERATOR_FUNCTIONS_DICT = _make_dict(ANDROID_TEST_LOCKDOWN_GENERATOR_FUNCTIONS)
@@ -212,8 +228,6 @@ APP_INSTALLATION_SNAPSHOT_FALLBACK_DICT = _make_dict(APP_INSTALLATION_SNAPSHOT_F
B122039567_DICT = _make_dict(B122039567)
B123854163_DICT = _make_dict(B123854163)
CAN_USE_DEX2OAT_OPTIONS_DICT = _make_dict(CAN_USE_DEX2OAT_OPTIONS)
-FIX_APPLICATION_ID_FALLBACK_DICT = _make_dict(FIX_APPLICATION_ID_FALLBACK)
-FIX_APPLICATION_ID_ROLLOUT_DICT = _make_dict(FIX_APPLICATION_ID_ROLLOUT)
FIX_RESOURCE_TRANSIVITY_FALLBACK_DICT = _make_dict(FIX_RESOURCE_TRANSITIVITY_FALLBACK)
FIX_RESOURCE_TRANSIVITY_ROLLOUT_DICT = _make_dict(FIX_RESOURCE_TRANSITIVITY_ROLLOUT)
FIX_EXPORT_EXPORTING_FALLBACK_DICT = _make_dict(FIX_EXPORT_EXPORTING_FALLBACK)
@@ -237,6 +251,10 @@ PARTIAL_JETIFICATION_TARGETS_ROLLOUT_DICT = _make_dict(PARTIAL_JETIFICATION_TARG
PARTIAL_JETIFICATION_TARGETS_FALLBACK_DICT = _make_dict(PARTIAL_JETIFICATION_TARGETS_FALLBACK)
KT_ANDROID_LIBRARY_ROLLOUT_DICT = _make_dict(KT_ANDROID_LIBRARY_ROLLOUT)
KT_ANDROID_LIBRARY_FALLBACK_DICT = _make_dict(KT_ANDROID_LIBRARY_FALLBACK)
+ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_ROLLOUT_DICT = _make_dict(ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_ROLLOUT)
+ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_FALLBACK_DICT = _make_dict(ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_FALLBACK)
+ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_ROLLOUT_DICT = _make_dict(ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_ROLLOUT)
+ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_FALLBACK_DICT = _make_dict(ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_FALLBACK)
def _matches(fqn, dct):
# Labels with workspace names ("@workspace//pkg:target") are not supported.
@@ -288,15 +306,16 @@ acls = struct(
in_android_feature_splits_dogfood = _in_android_feature_splits_dogfood,
in_android_library_implicit_exports = _in_android_library_implicit_exports,
in_android_library_implicit_exports_generator_functions = _in_android_library_implicit_exports_generator_functions,
+ in_android_library_starlark_resource_outputs_rollout = _in_android_library_starlark_resource_outputs_rollout,
in_android_library_resources_without_srcs = _in_android_library_resources_without_srcs,
in_android_library_resources_without_srcs_generator_functions = _in_android_library_resources_without_srcs_generator_functions,
in_android_lint_checks_rollout = _in_android_lint_checks_rollout,
in_android_lint_rollout = _in_android_lint_rollout,
+ in_lint_registry_rollout = _in_lint_registry_rollout,
in_android_build_stamping_rollout = _in_android_build_stamping_rollout,
in_android_test_lockdown_allowlist = _in_android_test_lockdown_allowlist,
in_app_installation_snapshot = _in_app_installation_snapshot,
in_dex2oat_opts = _in_dex2oat_opts,
- in_fix_application_id = _in_fix_application_id,
in_fix_export_exporting_rollout = _in_fix_export_exporting_rollout,
in_fix_resource_transivity_rollout = _in_fix_resource_transivity_rollout,
in_host_dex2oat_rollout = _in_host_dex2oat_rollout,
@@ -310,6 +329,8 @@ acls = struct(
in_allow_resource_conflicts = _in_allow_resource_conflicts,
in_partial_jetification_targets = _in_partial_jetification_targets,
in_kt_android_library_rollout = _in_kt_android_library_rollout,
+ in_android_instrumentation_test_manifest_check_rollout = _in_android_instrumentation_test_manifest_check_rollout,
+ in_android_instrumentation_test_derived_test_class_rollout = _in_android_instrumentation_test_derived_test_class_rollout,
)
# Visible for testing
diff --git a/rules/acls/android_instrumentation_derived_test_class_rollout.bzl b/rules/acls/android_instrumentation_derived_test_class_rollout.bzl
new file mode 100644
index 0000000..782beb8
--- /dev/null
+++ b/rules/acls/android_instrumentation_derived_test_class_rollout.bzl
@@ -0,0 +1,23 @@
+# Copyright 2021 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Rollout list for enabling test class derivation in android_instrumentation_test,"""
+
+ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_ROLLOUT = [
+ "//:__subpackages__",
+]
+
+ANDROID_INSTRUMENTATION_TEST_DERIVED_TEST_CLASS_FALLBACK = [
+ "//javatests/notinacl:__subpackages__",
+]
diff --git a/rules/acls/fix_application_id.bzl b/rules/acls/android_instrumentation_test_manifest_check_rollout.bzl
index 41c18b7..154f6bb 100644
--- a/rules/acls/fix_application_id.bzl
+++ b/rules/acls/android_instrumentation_test_manifest_check_rollout.bzl
@@ -12,16 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Allowlist for fixing the implicit application ID in manifest processing.
+"""Rollout list for enabling manifest validation in android_instrumentation_test."""
-See b/111923269 for context.
-"""
-
-# keep sorted
-FIX_APPLICATION_ID_ROLLOUT = [
+ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_ROLLOUT = [
"//:__subpackages__",
]
-# keep sorted
-FIX_APPLICATION_ID_FALLBACK = [
+ANDROID_INSTRUMENTATION_TEST_MANIFEST_CHECK_FALLBACK = [
]
diff --git a/rules/acls/android_library_starlark_resource_outputs.bzl b/rules/acls/android_library_starlark_resource_outputs.bzl
new file mode 100644
index 0000000..b798fa3
--- /dev/null
+++ b/rules/acls/android_library_starlark_resource_outputs.bzl
@@ -0,0 +1,26 @@
+# Copyright 2021 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Allow list for setting the resource outputs (.srcjar, R.txt, and _resources.jar) of android_library to
+those files generated by the Starlark resource processing pipeline and not the native resource
+processing pipeline. These resource-related predeclared outputs need to be re-pointed to the corresponding
+artifacts in the Starlark pipeline. See b/177261846."""
+
+# keep sorted
+ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_ROLLOUT = [
+ "//:__subpackages__",
+]
+
+ANDROID_LIBRARY_STARLARK_RESOURCE_OUTPUTS_FALLBACK = [
+]
diff --git a/rules/acls/lint_registry_rollout.bzl b/rules/acls/lint_registry_rollout.bzl
new file mode 100644
index 0000000..3138f94
--- /dev/null
+++ b/rules/acls/lint_registry_rollout.bzl
@@ -0,0 +1,21 @@
+# Copyright 2021 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Allow list for the Android Lint Registry target."""
+
+# keep sorted
+LINT_REGISTRY_ROLLOUT = [
+]
+
+LINT_REGISTRY_FALLBACK = []
diff --git a/rules/android_application/android_feature_module_rule.bzl b/rules/android_application/android_feature_module_rule.bzl
index 87c57b5..3041656 100644
--- a/rules/android_application/android_feature_module_rule.bzl
+++ b/rules/android_application/android_feature_module_rule.bzl
@@ -121,6 +121,7 @@ def android_feature_module_macro(_android_binary, _android_library, **attrs):
tags = getattr(attrs, "tags", [])
transitive_configs = getattr(attrs, "transitive_configs", [])
visibility = getattr(attrs, "visibility", None)
+ testonly = getattr(attrs, "testonly", None)
# Create strings.xml containing split title
title_id = "split_" + str(hash(fqn)).replace("-", "N")
@@ -164,6 +165,7 @@ EOF
tags = tags,
transitive_configs = transitive_configs,
visibility = visibility,
+ testonly = testonly,
)
# Wrap any deps in an android_binary. Will be validated to ensure does not contain any dexes
@@ -178,6 +180,7 @@ EOF
"visibility": visibility,
"feature_flags": getattr(attrs, "feature_flags", None),
"$enable_manifest_merging": False,
+ "testonly": testonly,
}
_android_binary(**binary_attrs)
@@ -193,4 +196,5 @@ EOF
tags = tags,
transitive_configs = transitive_configs,
visibility = visibility,
+ testonly = testonly,
)
diff --git a/rules/android_library/attrs.bzl b/rules/android_library/attrs.bzl
index b71b466..8e38b01 100644
--- a/rules/android_library/attrs.bzl
+++ b/rules/android_library/attrs.bzl
@@ -66,6 +66,7 @@ ATTRS = _attrs.add(
_flags = attr.label(
default = "@rules_android//rules/flags",
),
+ _package_name = attr.string(), # for sending the package name to the outputs callback
),
_attrs.COMPILATION,
_attrs.DATA_CONTEXT,
diff --git a/rules/android_library/rule.bzl b/rules/android_library/rule.bzl
index f267b37..02cc1fc 100644
--- a/rules/android_library/rule.bzl
+++ b/rules/android_library/rule.bzl
@@ -14,6 +14,7 @@
"""android_library rule."""
+load("@rules_android//rules:acls.bzl", "acls")
load(":attrs.bzl", _ATTRS = "ATTRS")
load(":impl.bzl", _impl = "impl")
load(
@@ -21,7 +22,7 @@ load(
_attrs = "attrs",
)
-def _outputs(_defined_local_resources):
+def _outputs(name, _package_name, _defined_local_resources):
outputs = dict(
lib_jar = "lib%{name}.jar",
lib_src_jar = "lib%{name}-src.jar",
@@ -31,11 +32,16 @@ def _outputs(_defined_local_resources):
if _defined_local_resources:
# TODO(b/177261846): resource-related predeclared outputs need to be re-pointed at the
# corresponding artifacts in the Starlark pipeline.
+ label = "//" + _package_name + ":" + name
+ if acls.in_android_library_starlark_resource_outputs_rollout(label):
+ path_prefix = "_migrated/"
+ else:
+ path_prefix = ""
outputs.update(
dict(
- resources_src_jar = "_migrated/%{name}.srcjar",
- resources_txt = "_migrated/%{name}_symbols/R.txt",
- resources_jar = "_migrated/%{name}_resources.jar",
+ resources_src_jar = path_prefix + "%{name}.srcjar",
+ resources_txt = path_prefix + "%{name}_symbols/R.txt",
+ resources_jar = path_prefix + "%{name}_resources.jar",
),
)
@@ -51,6 +57,8 @@ def make_rule(
Args:
attrs: A dict. The attributes for the rule.
implementation: A function. The rule's implementation method.
+ outputs: A dict, function, or None. The rule's outputs.
+ additional_toolchains: A list. Additional toolchains passed to pass to rule(toolchains).
Returns:
A rule.
@@ -122,6 +130,11 @@ def attrs_metadata(attrs):
attrs["$defined_idl_import_root"] = _is_defined("idl_import_root", attrs)
attrs["$defined_idl_parcelables"] = _is_defined("idl_parcelables", attrs)
attrs["$defined_idl_srcs"] = _is_defined("idl_srcs", attrs)
+
+ # Required for ACLs check in _outputs(), since the callback can't access
+ # the native module.
+ attrs["$package_name"] = native.package_name()
+
return attrs
def android_library_macro(**attrs):
diff --git a/rules/bundletool.bzl b/rules/bundletool.bzl
index 07f5217..161882a 100644
--- a/rules/bundletool.bzl
+++ b/rules/bundletool.bzl
@@ -16,6 +16,16 @@
load(":java.bzl", _java = "java")
+_density_mapping = {
+ "ldpi": 120,
+ "mdpi": 160,
+ "hdpi": 240,
+ "xhdpi": 320,
+ "xxhdpi": 480,
+ "xxxhdpi": 640,
+ "tvdpi": 213,
+}
+
def _proto_apk_to_module(
ctx,
out = None,
@@ -72,7 +82,7 @@ if [ $UNKNOWN != 0 ]; then
fi
cd "${OUT_DIR}"
-"${CUR_PWD}/${ZIP}" "${CUR_PWD}/${OUTPUT}" -Drqq .
+"${CUR_PWD}/${ZIP}" "${CUR_PWD}/${OUTPUT}" -Drq0 .
""" % (
unzip.executable.path,
zip.executable.path,
@@ -182,8 +192,71 @@ echo "$contents" > %s
command = cmd,
)
+def _bundle_to_apks(
+ ctx,
+ out = None,
+ bundle = None,
+ universal = False,
+ device_spec = None,
+ keystore = None,
+ modules = None,
+ aapt2 = None,
+ bundletool = None,
+ host_javabase = None):
+ inputs = [bundle]
+ args = ctx.actions.args()
+ args.add("build-apks")
+ args.add("--output", out)
+ args.add("--bundle", bundle)
+ args.add("--aapt2", aapt2.executable.path)
+
+ if universal:
+ args.add("--mode=universal")
+
+ if keystore:
+ args.add("--ks", keystore.path)
+ args.add("--ks-pass", "pass:android")
+ args.add("--ks-key-alias", "AndroidDebugKey")
+ inputs.append(keystore)
+
+ if device_spec:
+ args.add("--device-spec", device_spec)
+ inputs.append(device_spec)
+
+ if modules:
+ args.add_joined("--modules", modules, join_with = ",")
+
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = bundletool,
+ arguments = [args],
+ inputs = inputs,
+ outputs = [out],
+ tools = [aapt2],
+ mnemonic = "BundleToApks",
+ progress_message = "Converting bundle to .apks: %s" % out.short_path,
+ )
+
+def _build_device_json(
+ ctx,
+ out,
+ abis,
+ locales,
+ density,
+ sdk_version):
+ json_content = json.encode(struct(
+ supportedAbis = abis,
+ supportedLocales = locales,
+ screenDensity = _density_mapping[density],
+ sdkVersion = int(sdk_version),
+ ))
+ ctx.actions.write(out, json_content)
+
bundletool = struct(
build = _build,
+ build_device_json = _build_device_json,
+ bundle_to_apks = _bundle_to_apks,
extract_config = _extract_config,
extract_manifest = _extract_manifest,
proto_apk_to_module = _proto_apk_to_module,
diff --git a/rules/busybox.bzl b/rules/busybox.bzl
index f0d78ac..a92fe68 100644
--- a/rules/busybox.bzl
+++ b/rules/busybox.bzl
@@ -191,6 +191,7 @@ def _package(
resource_configs = None,
densities = [],
application_id = None,
+ package_id = None,
direct_resources_nodes = [],
transitive_resources_nodes = [],
transitive_manifests = [],
@@ -233,6 +234,11 @@ def _package(
densities: A list of strings. The list of screen densities to filter for when
building the apk.
application_id: An optional string. The applicationId set in manifest values.
+ package_id: An optional integer in [2,255]. This is the prefix byte for
+ all generated resource IDs, defaults to 0x7F (127). 1 is reserved by the
+ framework, and some builds are known to crash when given IDs > 127.
+ Shared libraries are also assigned monotonically increasing IDs in
+ [2,126], so care should be taken that there is room at the lower end.
direct_resources_nodes: Depset of ResourcesNodeInfo providers. The set of
ResourcesNodeInfo from direct dependencies.
transitive_resources_nodes: Depset of ResourcesNodeInfo providers. The set
@@ -356,6 +362,8 @@ def _package(
args.add_joined("--densities", _extract_filters(densities), join_with = ",")
if application_id:
args.add("--applicationId", application_id)
+ if package_id:
+ args.add("--packageId", package_id)
if additional_apks_to_link_against:
args.add_joined(
"--additionalApksToLinkAgainst",
@@ -372,7 +380,8 @@ def _package(
args.add("--versionName", version_name)
if version_code:
args.add("--versionCode", version_code)
- args.add("--packageForR", java_package)
+ if java_package:
+ args.add("--packageForR", java_package)
_java.run(
ctx = ctx,
@@ -792,7 +801,7 @@ def _merge_manifests(
fail("Unexpected manifest merge type: " + merge_type)
outputs = [out_file]
- directs = [manifest]
+ directs = [manifest] if manifest else []
transitives = [mergee_manifests]
# Args for busybox
@@ -800,7 +809,8 @@ def _merge_manifests(
args.use_param_file("@%s", use_always = True)
args.add("--tool", "MERGE_MANIFEST")
args.add("--")
- args.add("--manifest", manifest)
+ if manifest:
+ args.add("--manifest", manifest)
args.add_all(
"--mergeeManifests",
[mergee_manifests],
@@ -812,7 +822,8 @@ def _merge_manifests(
",".join(["%s:%s" % (_escape_mv(k), _escape_mv(v)) for k, v in manifest_values.items()]),
)
args.add("--mergeType", merge_type)
- args.add("--customPackage", java_package)
+ if java_package:
+ args.add("--customPackage", java_package)
args.add("--manifestOutput", out_file)
if out_log_file:
args.add("--log", out_log_file)
@@ -919,7 +930,8 @@ def _generate_binary_r(
args.add("--")
args.add("--primaryRTxt", r_txt)
args.add("--primaryManifest", manifest)
- args.add("--packageForR", package_for_r)
+ if package_for_r:
+ args.add("--packageForR", package_for_r)
args.add_all(
resources_nodes,
map_each = _make_generate_binay_r_flags,
@@ -933,6 +945,7 @@ def _generate_binary_r(
# TODO(b/154003916): support transitive "--library transitive_r_txt_path,transitive_manifest_path" flags
args.add("--classJarOutput", out_class_jar)
args.add("--targetLabel", str(ctx.label))
+ args.use_param_file("@%s")
_java.run(
ctx = ctx,
diff --git a/rules/data_binding.bzl b/rules/data_binding.bzl
index 70df90f..9243673 100644
--- a/rules/data_binding.bzl
+++ b/rules/data_binding.bzl
@@ -66,15 +66,27 @@ def _gen_sources(ctx, output_dir, java_package, deps, layout_info, data_binding_
args.add("-zipSourceOutput", "true")
args.add("-useAndroidX", "false")
- class_infos = []
- for info in deps:
- class_infos.extend(info.class_infos)
+ if deps:
+ if type(deps[0].class_infos) == "depset":
+ class_infos = depset(transitive = [info.class_infos for info in deps])
+ inputs = depset(direct = [layout_info], transitive = [class_infos])
+ elif type(deps[0].class_infos) == "list":
+ class_infos = []
+ for info in deps:
+ class_infos.extend(info.class_infos)
+ inputs = class_infos + [layout_info]
+ else:
+ fail("Expected list or depset. Got %s" % type(deps[0].class_infos))
+ else:
+ class_infos = []
+ inputs = [layout_info]
+
args.add_all(class_infos, before_each = "-dependencyClassInfoList")
ctx.actions.run(
executable = data_binding_exec,
arguments = ["GEN_BASE_CLASSES", args],
- inputs = class_infos + [layout_info],
+ inputs = inputs,
outputs = [class_info, srcjar],
mnemonic = "GenerateDataBindingBaseClasses",
progress_message = (
@@ -91,8 +103,8 @@ def _setup_dependent_lib_artifacts(ctx, output_dir, deps):
for info in deps:
# Yes, DataBinding requires depsets iterations.
for artifact in (info.transitive_br_files.to_list() +
- info.setter_stores +
- info.class_infos):
+ _utils.list_or_depset_to_list(info.setter_stores) +
+ _utils.list_or_depset_to_list(info.class_infos)):
# short_path might contain a parent directory reference if the
# databinding artifact is from an external repository (e.g. an aar
# from Maven). If that's the case, just remove the parent directory
@@ -208,7 +220,7 @@ def _process(
]
return struct(**db_info)
- output_dir = "_migrated/databinding/%s/" % ctx.label.name
+ output_dir = "databinding/%s/" % ctx.label.name
db_info[_JAVA_SRCS].append(_copy_annotation_file(
ctx,
diff --git a/rules/flags/flag_defs.bzl b/rules/flags/flag_defs.bzl
index 7b9a8d8..08eee2d 100644
--- a/rules/flags/flag_defs.bzl
+++ b/rules/flags/flag_defs.bzl
@@ -31,7 +31,7 @@ def define_flags():
flags.DEFINE_int(
name = "num_dex_shards",
- default = 16,
+ default = 32,
description = "Number of dex shards to use for mobile-install.",
)
@@ -64,7 +64,7 @@ def define_flags():
flags.DEFINE_bool(
name = "enable_splits",
- default = False,
+ default = True,
description = "Build and install split apks if the device supports them.",
)
diff --git a/rules/java.bzl b/rules/java.bzl
index 42470f0..2e2fc58 100644
--- a/rules/java.bzl
+++ b/rules/java.bzl
@@ -14,7 +14,6 @@
"""Bazel Java APIs for the Android rules."""
-load(":acls.bzl", "acls")
load(":path.bzl", _path = "path")
load(":utils.bzl", "log")
@@ -89,8 +88,7 @@ def _resolve_package(path):
def _resolve_package_from_label(
label,
- custom_package = None,
- fallback = True):
+ custom_package = None):
"""Resolves the Java package from a Label.
When no legal Java package can be resolved from the label, None will be
@@ -111,15 +109,7 @@ def _resolve_package_from_label(
[label.package] +
_path.split(label.name)[:-1],
)
- java_package = _resolve_package(label_path)
-
- if java_package != None: # "" is a valid result.
- return java_package
-
- if fallback:
- return label.package.replace("/", ".")
-
- return None
+ return _resolve_package(label_path)
def _root(path):
"""Determines the Java root from the given path.
@@ -169,29 +159,6 @@ def _invalid_java_package(custom_package, java_package):
(not custom_package and _check_for_invalid_java_package(java_package))
)
-def _set_default_applicationid(fqn, attrs):
- """Sets the manifest value applicationId to the package.
-
- If applicationId is missing from the manifest_values, set it
- to the package as a default value to avoid using library packages
- when merging manifests.
- """
- if not acls.in_fix_application_id(fqn):
- return attrs
- new_attrs = {}
- new_attrs.update(attrs)
- package_string = _resolve_package_from_label(Label(fqn), None)
-
- # TODO(timpeut): handle select()s
- mv_attr = attrs.get("manifest_values", None) or {}
- if type(mv_attr) == "dict" and "applicationId" not in mv_attr:
- manifest_values = {}
- manifest_values.update(mv_attr)
- manifest_values.update({"__INTERNAL_PKG_DO_NOT_USE__": package_string})
- new_attrs["manifest_values"] = manifest_values
-
- return new_attrs
-
# The Android specific Java compile.
def _compile_android(
ctx,
@@ -227,8 +194,8 @@ def _compile_android(
r_java: JavaInfo. The R.jar dependency. Optional.
deps: sequence of JavaInfo providers. A list of dependencies. Optional.
exports: sequence of JavaInfo providers. A list of exports. Optional.
- plugins: sequence of JavaInfo providers. A list of plugins. Optional.
- exported_plugins: sequence of JavaInfo providers. A list of exported
+ plugins: sequence of JavaPluginInfo providers. A list of plugins. Optional.
+ exported_plugins: sequence of JavaPluginInfo providers. A list of exported
plugins. Optional.
annotation_processor_additional_outputs: sequence of Files. A list of
files produced by an annotation processor.
@@ -327,8 +294,8 @@ def _compile(
Optional.
deps: sequence of JavaInfo providers. A list of dependencies. Optional.
exports: sequence of JavaInfo providers. A list of exports. Optional.
- plugins: sequence of JavaInfo providers. A list of plugins. Optional.
- exported_plugins: sequence of JavaInfo providers. A list of exported
+ plugins: sequence of JavaPluginInfo providers. A list of plugins. Optional.
+ exported_plugins: sequence of JavaPluginInfo providers. A list of exported
plugins. Optional.
annotation_processor_additional_outputs: sequence of Files. A list of
files produced by an annotation processor.
@@ -406,6 +373,9 @@ def _singlejar(
args.add("--sources")
args.add_all(inputs)
+ args.use_param_file("@%s")
+ args.set_param_file_format("multiline")
+
ctx.actions.run(
executable = java_toolchain[java_common.JavaToolchainInfo].single_jar,
arguments = [args],
@@ -469,7 +439,6 @@ java = struct(
resolve_package = _resolve_package,
resolve_package_from_label = _resolve_package_from_label,
root = _root,
- set_default_applicationid = _set_default_applicationid,
invalid_java_package = _invalid_java_package,
run = _run,
singlejar = _singlejar,
diff --git a/rules/resources.bzl b/rules/resources.bzl
index 9bebb87..2ad89c6 100644
--- a/rules/resources.bzl
+++ b/rules/resources.bzl
@@ -60,11 +60,6 @@ _ASSET_DEFINITION_ERROR = (
"both empty or non-empty."
)
-_JAVA_PACKAGE_MISSING_ERROR = (
- "In target %s, a java package is required when stamping " +
- "the manifest."
-)
-
_INCORRECT_RESOURCE_LAYOUT_ERROR = (
"'%s' is not in the expected resource directory structure of " +
"<resource directory>/{%s}/<file>" % (",").join(_RESOURCE_FOLDER_TYPES)
@@ -139,7 +134,7 @@ def _generate_dummy_manifest(
min_sdk_version = None):
content = """<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="%s">""" % java_package
+ package="%s">""" % (java_package or "com.default")
if min_sdk_version:
content = content + """
@@ -316,6 +311,7 @@ def _fix_databinding_compiled_resources(
ctx: The context.
out_compiled_resources: File. The modified compiled_resources output.
compiled_resources: File. The compiled_resources zip.
+ zip_tool: FilesToRunProvider. The zip tool executable or FilesToRunProvider
"""
ctx.actions.run_shell(
outputs = [out_compiled_resources],
@@ -420,6 +416,7 @@ def _package(
resource_files = [],
nocompress_extensions = [],
java_package = None,
+ package_id = None,
compilation_mode = _compilation_mode.FASTBUILD,
shrink_resources = None,
use_android_resource_shrinking = None,
@@ -460,6 +457,11 @@ def _package(
java_package: String. Java package for which java sources will be
generated. By default the package is inferred from the directory where
the BUILD file containing the rule is.
+ package_id: An optional integer in [2,255]. This is the prefix byte for
+ all generated resource IDs, defaults to 0x7F (127). 1 is reserved by the
+ framework, and some builds are known to crash when given IDs > 127.
+ Shared libraries are also assigned monotonically increasing IDs in
+ [2,126], so care should be taken that there is room at the lower end.
compilation_mode: String. A string that represents compilation mode. The
list of expected values are as follows: dbg, fastbuild, opt.
shrink_resources: Tristate. Whether resource shrinking is enabled by the rule.
@@ -579,7 +581,7 @@ def _package(
processed_resources = resource_files
data_binding_layout_info = None
if enable_data_binding:
- data_binding_layout_info = ctx.actions.declare_file("_migrated/databinding/" + ctx.label.name + "/layout-info.zip")
+ data_binding_layout_info = ctx.actions.declare_file("_migrated/" + ctx.label.name + "/layout-info.zip")
processed_resources, resources_dirname = _make_databinding_outputs(
ctx,
resource_files,
@@ -620,6 +622,7 @@ def _package(
out_main_dex_proguard_cfg = main_dex_proguard_cfg,
out_resource_files_zip = resource_files_zip,
application_id = manifest_values.get("applicationId", None),
+ package_id = package_id,
manifest = merged_manifest,
assets = assets,
assets_dir = assets_dir,
@@ -1092,9 +1095,6 @@ def _process_starlark(
if resource_files and not manifest:
_log.error(_MANIFEST_MISSING_ERROR % ctx.label)
- if stamp_manifest and not java_package:
- _log.error(_JAVA_PACKAGE_MISSING_ERROR % ctx.label)
-
direct_resources_nodes = []
transitive_resources_nodes = []
transitive_assets = []
diff --git a/rules/rules.bzl b/rules/rules.bzl
index 2a0a585..315fd4f 100644
--- a/rules/rules.bzl
+++ b/rules/rules.bzl
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Skylark rules for building Android apps."""
+"""Starlark rules for building Android apps."""
load(
"//rules/aar_import:rule.bzl",
@@ -20,7 +20,7 @@ load(
)
load(
"//rules/android_application:android_application.bzl",
- _android_application = "android_application"
+ _android_application = "android_application",
)
load(
":android_binary.bzl",
diff --git a/rules/utils.bzl b/rules/utils.bzl
index 5bd764e..d796371 100644
--- a/rules/utils.bzl
+++ b/rules/utils.bzl
@@ -195,6 +195,14 @@ def _only(collection):
_error("Expected one element, has %s." % len(collection))
return _first(collection)
+def _list_or_depset_to_list(list_or_depset):
+ if type(list_or_depset) == "list":
+ return list_or_depset
+ elif type(list_or_depset) == "depset":
+ return list_or_depset.to_list()
+ else:
+ return _error("Expected a list or a depset. Got %s" % type(list_or_depset))
+
def _copy_file(ctx, src, dest):
if src.is_directory or dest.is_directory:
fail("Cannot use copy_file with directories")
@@ -444,6 +452,7 @@ utils = struct(
sanitize_string = _sanitize_string,
sanitize_java_package = _sanitize_java_package,
hex = _hex,
+ list_or_depset_to_list = _list_or_depset_to_list,
)
log = struct(
diff --git a/src/validations/aar_import_checks/BUILD b/src/validations/aar_import_checks/BUILD
index eb11bcf..8f7bb2a 100644
--- a/src/validations/aar_import_checks/BUILD
+++ b/src/validations/aar_import_checks/BUILD
@@ -7,20 +7,21 @@ licenses(["notice"])
genrule(
name = "gen_aar_import_checks",
outs = ["aar_import_checks"],
- executable = True,
cmd = """
-cat > $@ <<EOF
+cat > $@ <<"EOF"
#!/bin/bash
while [[ $$# -gt 0 ]]
do
-case $$1 in
- -output)
- out="$$2"
- shift # past argument
- shift # past value
- ;;
-esac
+ case $$1 in
+ -output)
+ out="$$2"
+ ;;
+ esac
+ shift # past argument
+ shift # past value
done
touch $$out
EOF
-""")
+""",
+ executable = True,
+)
diff --git a/toolchains/android/toolchain.bzl b/toolchains/android/toolchain.bzl
index a63fe63..42cdf9d 100644
--- a/toolchains/android/toolchain.bzl
+++ b/toolchains/android/toolchain.bzl
@@ -21,89 +21,89 @@ _ATTRS = dict(
),
aar_import_checks = attr.label(
allow_single_file = True,
- cfg = "host",
+ cfg = "exec",
default = "//src/validations/aar_import_checks",
executable = True,
),
aar_embedded_jars_extractor = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:aar_embedded_jars_extractor",
executable = True,
),
aar_embedded_proguard_extractor = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:aar_embedded_proguard_extractor",
executable = True,
),
aar_native_libs_zip_creator = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:aar_native_libs_zip_creator",
executable = True,
),
aar_resources_extractor = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:aar_resources_extractor",
executable = True,
),
adb = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@androidsdk//:platform-tools/adb",
executable = True,
),
add_g3itr_xslt = attr.label(
- cfg = "host",
+ cfg = "exec",
default = Label("//tools/android/xslt:add_g3itr.xslt"),
allow_files = True,
),
android_archive_jar_optimization_inputs_validator = attr.label(
allow_files = True,
default = "@androidsdk//:fail",
- cfg = "host",
+ cfg = "exec",
executable = True,
),
android_archive_manifest_package_validator = attr.label(
allow_files = True,
default = "@androidsdk//:fail",
- cfg = "host",
+ cfg = "exec",
executable = True,
),
android_archive_packages_validator = attr.label(
allow_files = True,
default = "@androidsdk//:fail",
- cfg = "host",
+ cfg = "exec",
executable = True,
),
android_kit = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@androidsdk//:fail", # TODO: "//src/tools/ak", needs Go
executable = True,
),
android_resources_busybox = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//src/tools/android/java/com/google/devtools/build/android:ResourceProcessorBusyBox_deploy.jar",
executable = True,
),
apk_to_bundle_tool = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@androidsdk//:fail",
executable = True,
),
bundletool = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "//tools/android:bundletool_deploy.jar",
executable = True,
),
data_binding_annotation_processor = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "@//tools/android:compiler_annotation_processor", # TODO: processor rules should be moved into rules_android
),
data_binding_annotation_template = attr.label(
@@ -111,25 +111,25 @@ _ATTRS = dict(
allow_files = True,
),
data_binding_exec = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:databinding_exec",
executable = True,
),
desugar_java8_extra_bootclasspath = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:desugar_java8_extra_bootclasspath",
executable = True,
),
idlclass = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/android:IdlClass", # _deploy.jar?
executable = True,
),
import_deps_checker = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
default = "@android_tools//:ImportDepsChecker_deploy.jar",
executable = True,
),
@@ -143,18 +143,18 @@ _ATTRS = dict(
),
jdeps_tool = attr.label(
allow_files = True,
- cfg = "host",
+ cfg = "exec",
# used in android_local_test
default = "@androidsdk//:fail", # TODO: "//src/tools/jdeps", needs Go
executable = True,
),
proguard_allowlister = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "@bazel_tools//tools/jdk:proguard_whitelister",
executable = True,
),
proto_map_generator = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "@androidsdk//:fail",
allow_files = True,
executable = True,
@@ -175,18 +175,18 @@ _ATTRS = dict(
default = "@androidsdk//:fail",
),
unzip_tool = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "//toolchains/android:unzip",
executable = True,
),
xsltproc_tool = attr.label(
- cfg = "host",
+ cfg = "exec",
default = Label("//tools/android/xslt:xslt"),
allow_files = True,
executable = True,
),
zip_tool = attr.label(
- cfg = "host",
+ cfg = "exec",
default = "//toolchains/android:zip",
executable = True,
),
diff --git a/tools/android/BUILD b/tools/android/BUILD
index 61ee16c..cb8148a 100644
--- a/tools/android/BUILD
+++ b/tools/android/BUILD
@@ -13,20 +13,20 @@ alias(
)
genrule(
- name = "gen_fail",
- outs = ["fail.sh"],
- cmd = "echo 'exit 1' > $@",
- executable = 1,
+ name = "gen_fail",
+ outs = ["fail.sh"],
+ cmd = "echo 'exit 1' > $@",
+ executable = 1,
)
sh_binary(
- name = "fail",
- srcs =[":fail.sh"],
+ name = "fail",
+ srcs = [":fail.sh"],
)
java_binary(
name = "bundletool",
main_class = "com.android.tools.build.bundletool.BundleToolMain",
- runtime_deps = ["@rules_android_maven//:com_android_tools_build_bundletool"],
visibility = ["//visibility:public"],
+ runtime_deps = ["@rules_android_maven//:com_android_tools_build_bundletool"],
)