├── .bazelci └── presubmit.yml ├── .bazelignore ├── .bazelrc ├── .bazelversion ├── .bcr ├── config.yml ├── metadata.template.json ├── presubmit.yml └── source.template.json ├── .github └── workflows │ ├── ci.bazelrc │ ├── release.yml │ ├── release_prep.sh │ └── stardoc.yml ├── .gitignore ├── AUTHORS ├── BUILD ├── CONTRIBUTING.md ├── CONTRIBUTORS ├── LICENSE ├── MODULE.bazel ├── README.md ├── ROADMAP.md ├── WORKSPACE ├── WORKSPACE.bzlmod ├── android ├── BUILD └── rules.bzl ├── android_sdk_supplemental_repository.bzl ├── bzlmod_extensions ├── BUILD ├── android_extensions.bzl ├── apksig.BUILD ├── apksig.bzl ├── com_android_dex.BUILD └── com_android_dex.bzl ├── defs.bzl ├── defs_dev.bzl ├── examples └── basicapp │ ├── .bazelrc │ ├── .gitignore │ ├── BUILD │ ├── MODULE.bazel │ ├── README.md │ ├── WORKSPACE │ ├── WORKSPACE.bzlmod │ └── java │ └── com │ └── basicapp │ ├── AndroidManifest.xml │ ├── BUILD │ ├── BasicActivity.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── layout │ └── basic_activity.xml │ ├── menu │ └── menu.xml │ └── values │ ├── dimens.xml │ └── strings.xml ├── go.mod ├── go.sum ├── groups ├── kokoro └── presubmit │ ├── kokoro_presubmit.sh │ ├── presubmit.cfg │ └── presubmit_main.sh ├── mobile_install ├── BUILD ├── adapters.bzl ├── adapters │ ├── BUILD │ ├── aar_import.bzl │ ├── android_binary.bzl │ ├── android_library.bzl │ ├── apk_import.bzl │ ├── base.bzl │ ├── default.bzl │ ├── desugar.bzl │ ├── java_import.bzl │ ├── java_library.bzl │ ├── java_lite_grpc_library.bzl │ ├── java_lite_proto_library.bzl │ ├── java_rpc_toolchain.bzl │ ├── proto_lang_toolchain.bzl │ └── proto_library.bzl ├── adapters_base.bzl ├── apks.bzl ├── constants.bzl ├── debug.bzl ├── dependency_map.bzl ├── deploy_info.bzl ├── launcher_direct.bzl ├── mi.bzl ├── native_libs.bzl ├── process.bzl ├── providers.bzl ├── r_java.bzl ├── resources.bzl ├── tools.bzl ├── tools_common.bzl ├── transform.bzl └── utils.bzl ├── prereqs.bzl ├── project.config ├── providers ├── BUILD └── providers.bzl ├── py_support └── BUILD ├── robolectric-bazel.patch ├── rules ├── BUILD ├── aapt.bzl ├── aar_import │ ├── BUILD │ ├── attrs.bzl │ ├── impl.bzl │ └── rule.bzl ├── acls.bzl ├── acls │ ├── BUILD │ ├── aar_import_deps_checker.bzl │ ├── aar_import_explicit_exports_manifest.bzl │ ├── aar_import_exports_r_java.bzl │ ├── allow_resource_conflicts.bzl │ ├── android_apk_to_bundle_features_lockdown.bzl │ ├── android_application_with_sandboxed_sdks_allowlist.bzl │ ├── android_archive_dogfood.bzl │ ├── android_archive_duplicate_class_allowlist.bzl │ ├── android_archive_excluded_deps_denylist.bzl │ ├── android_archive_exposed_package_allowlist.bzl │ ├── android_binary_min_sdk_version_attribute.bzl │ ├── android_binary_raw_access_to_resource_paths_allowlist.bzl │ ├── android_binary_resource_name_obfuscation_opt_out_allowlist.bzl │ ├── android_binary_resource_shrinking_in_optimizer_rollout.bzl │ ├── android_binary_with_sandboxed_sdks_allowlist.bzl │ ├── android_build_stamping_rollout.bzl │ ├── android_device_plugin_rollout.bzl │ ├── android_feature_splits_dogfood.bzl │ ├── android_instrumentation_derived_test_class_rollout.bzl │ ├── android_instrumentation_test_manifest_check_rollout.bzl │ ├── android_instrumentation_test_prebuilt_test_apk.bzl │ ├── android_library_resources_without_srcs.bzl │ ├── android_library_starlark_resource_outputs.bzl │ ├── android_library_use_aosp_aidl_compiler.bzl │ ├── android_lint_checks_rollout.bzl │ ├── android_lint_rollout.bzl │ ├── android_local_test_jdk_sts_rollout.bzl │ ├── android_test_lockdown.bzl │ ├── b122039567.bzl │ ├── baseline_profiles_optimizer_integration.bzl │ ├── baseline_profiles_rollout.bzl │ ├── d8_optimization_metadata.bzl │ ├── databinding.bzl │ ├── desugaring_runtime_jar_classpath.bzl │ ├── dex2oat_opts.bzl │ ├── disable_optimizing_dexer.bzl │ ├── fix_export_exporting_rollout.bzl │ ├── force_final_resources.bzl │ ├── host_dex2oat_rollout.bzl │ ├── install_apps_in_data.bzl │ ├── lint_registry_rollout.bzl │ ├── local_test_multi_proto.bzl │ ├── optimizer_execution_requirements.bzl │ ├── partial_jetification_targets.bzl │ ├── proguard_apply_mapping.bzl │ ├── r8.bzl │ ├── resource_translation_merging_rollout.bzl │ ├── shared_library_resource_linking.bzl │ ├── stamp_signing.bzl │ └── test_to_instrument_test_rollout.bzl ├── android_application │ ├── BUILD │ ├── android_application.bzl │ ├── android_application_rule.bzl │ ├── android_feature_module.bzl │ ├── android_feature_module_rule.bzl │ ├── android_feature_module_validation_aspect.bzl │ ├── attrs.bzl │ ├── bundle_deploy.sh_template │ ├── feature_module_validation.sh │ ├── gen_android_feature_manifest.sh │ ├── gen_priority_android_feature_manifest.sh │ └── merge_feature_manifests.py ├── android_binary │ ├── BUILD │ ├── attrs.bzl │ ├── impl.bzl │ ├── r8.bzl │ └── rule.bzl ├── android_common │ ├── BUILD │ └── reexport_android_common.bzl ├── android_library │ ├── BUILD │ ├── attrs.bzl │ ├── impl.bzl │ └── rule.bzl ├── android_local_test.bzl ├── android_local_test │ ├── BUILD │ ├── attrs.bzl │ ├── impl.bzl │ └── rule.bzl ├── android_neverlink_aspect.bzl ├── android_platforms_transition.bzl ├── android_revision.bzl ├── android_sandboxed_sdk │ ├── BUILD │ ├── android_binary_with_sandboxed_sdks_macro.bzl │ ├── android_sandboxed_sdk.bzl │ ├── android_sandboxed_sdk_bundle.bzl │ ├── android_sandboxed_sdk_macro.bzl │ └── asar_import.bzl ├── android_sdk.bzl ├── android_sdk_repository │ ├── BUILD │ ├── empty.template.bzl │ ├── helper.bzl │ ├── rule.bzl │ └── template.bzl ├── android_split_transition.bzl ├── android_tools_defaults_jar.bzl ├── apk_packaging.bzl ├── attrs.bzl ├── baseline_profiles.bzl ├── bundletool.bzl ├── busybox.bzl ├── common.bzl ├── data_binding.bzl ├── data_binding_annotation_template.txt ├── desugar.bzl ├── dex.bzl ├── dex_desugar_aspect.bzl ├── dex_toolchains.bzl ├── flags │ ├── BUILD │ ├── additional_flags.bzl │ ├── configurations.bzl │ ├── flag_defs.bzl │ └── flags.bzl ├── idl.bzl ├── instrumented_app_info_aspect.bzl ├── intellij.bzl ├── java.bzl ├── migration_tag_DONOTUSE.bzl ├── min_sdk_version.bzl ├── native_deps.bzl ├── path.bzl ├── processing_pipeline.bzl ├── proguard.bzl ├── res_v3_dummy_AndroidManifest.xml ├── res_v3_dummy_R.txt ├── resources.bzl ├── robolectric_properties_template.txt ├── rules.bzl ├── sandboxed_sdk_toolbox.bzl ├── utils.bzl └── visibility.bzl ├── rules_android_maven_install.json ├── src ├── common │ └── golang │ │ ├── BUILD │ │ ├── fileutils.go │ │ ├── flagfile.go │ │ ├── flagfile_test.go │ │ ├── flags.go │ │ ├── ini.go │ │ ├── ini_test.go │ │ ├── marshal.go │ │ ├── marshal_test.go │ │ ├── pprint.go │ │ ├── runfilelocation.go │ │ ├── runfilelocation_test.go │ │ ├── shard.go │ │ ├── shard_test.go │ │ ├── walk.go │ │ ├── zipshard_test.go │ │ └── ziputils.go ├── java │ └── com │ │ └── example │ │ └── sampleapp │ │ ├── AndroidManifest.xml │ │ ├── BUILD │ │ ├── SampleApp.java │ │ ├── SampleRecord.java │ │ ├── native.c │ │ └── res │ │ ├── layout │ │ └── basic_activity.xml │ │ └── values │ │ └── strings.xml ├── tools │ ├── ak │ │ ├── BUILD │ │ ├── ak.go │ │ ├── akcommands.go │ │ ├── akhelper.go │ │ ├── bucketize │ │ │ ├── BUILD │ │ │ ├── bucketize.go │ │ │ ├── bucketize_bin.go │ │ │ ├── bucketize_test.go │ │ │ ├── partitioner.go │ │ │ ├── partitioner_test.go │ │ │ ├── pipe.go │ │ │ └── pipe_test.go │ │ ├── compile │ │ │ ├── BUILD │ │ │ ├── compile.go │ │ │ ├── compile_bin.go │ │ │ └── compile_test.go │ │ ├── dex │ │ │ ├── BUILD │ │ │ ├── dex.go │ │ │ └── dex_bin.go │ │ ├── extractaar │ │ │ ├── BUILD │ │ │ ├── buildozer.go │ │ │ ├── extractaar.go │ │ │ ├── extractaar_bin.go │ │ │ ├── extractaar_test.go │ │ │ ├── validator.go │ │ │ └── validator_test.go │ │ ├── extractresources │ │ │ ├── BUILD │ │ │ ├── extractresources.go │ │ │ ├── extractresources_bin.go │ │ │ └── extractresources_test.go │ │ ├── finalrjar │ │ │ ├── BUILD │ │ │ ├── finalrjar.go │ │ │ ├── finalrjar_bin.go │ │ │ └── finalrjar_test.go │ │ ├── generatemanifest │ │ │ ├── BUILD │ │ │ ├── generatemanifest.go │ │ │ ├── generatemanifest_bin.go │ │ │ └── generatemanifest_test.go │ │ ├── link │ │ │ ├── BUILD │ │ │ ├── link.go │ │ │ └── link_bin.go │ │ ├── liteparse │ │ │ ├── BUILD │ │ │ ├── liteparse.go │ │ │ ├── liteparse_bin.go │ │ │ ├── liteparse_test.go │ │ │ ├── non_values_parse.go │ │ │ ├── non_values_parse_test.go │ │ │ ├── testdata │ │ │ │ ├── mini-1 │ │ │ │ │ └── res │ │ │ │ │ │ └── values │ │ │ │ │ │ └── strings.xml │ │ │ │ ├── mini-2 │ │ │ │ │ └── res │ │ │ │ │ │ └── xml │ │ │ │ │ │ └── foo.xml │ │ │ │ └── res │ │ │ │ │ ├── drawable-ldpi │ │ │ │ │ └── foo.9.png │ │ │ │ │ ├── menu │ │ │ │ │ └── simple.xml │ │ │ │ │ ├── raw │ │ │ │ │ └── garbage.xml │ │ │ │ │ ├── values-v19 │ │ │ │ │ └── strings.xml │ │ │ │ │ └── values │ │ │ │ │ ├── other.xml │ │ │ │ │ └── vals.xml │ │ │ ├── values_parse.go │ │ │ └── values_parse_test.go │ │ ├── manifest │ │ │ ├── BUILD │ │ │ ├── manifest.go │ │ │ └── manifest_bin.go │ │ ├── manifestutils.go │ │ ├── minsdkfloor │ │ │ ├── BUILD │ │ │ ├── minsdkfloor.go │ │ │ ├── minsdkfloor_bin.go │ │ │ └── minsdkfloor_test.go │ │ ├── nativelib │ │ │ ├── BUILD │ │ │ ├── nativelib.go │ │ │ ├── nativelib_bin.go │ │ │ ├── nativelib_test.go │ │ │ └── testdata │ │ │ │ └── BUILD │ │ ├── patch │ │ │ ├── BUILD │ │ │ ├── patch.go │ │ │ ├── patch_bin.go │ │ │ └── patch_test.go │ │ ├── proto │ │ │ ├── BUILD │ │ │ └── sync.proto │ │ ├── repack │ │ │ ├── BUILD │ │ │ ├── repack.go │ │ │ ├── repack_bin.go │ │ │ └── repack_test.go │ │ ├── res │ │ │ ├── BUILD │ │ │ ├── naming.go │ │ │ ├── naming_test.go │ │ │ ├── path.go │ │ │ ├── path_test.go │ │ │ ├── proto │ │ │ │ ├── BUILD │ │ │ │ ├── res_data.proto │ │ │ │ └── res_meta.proto │ │ │ ├── respipe │ │ │ │ ├── BUILD │ │ │ │ ├── errors.go │ │ │ │ ├── errors_test.go │ │ │ │ ├── path_emitter.go │ │ │ │ ├── path_emitter_test.go │ │ │ │ ├── res_io.go │ │ │ │ ├── res_io_test.go │ │ │ │ ├── streams.go │ │ │ │ └── streams_test.go │ │ │ ├── resxml │ │ │ │ ├── BUILD │ │ │ │ ├── xml_parser.go │ │ │ │ └── xml_parser_test.go │ │ │ ├── struct.go │ │ │ ├── struct_test.go │ │ │ └── xml.go │ │ ├── rjar │ │ │ ├── BUILD │ │ │ ├── rjar.go │ │ │ ├── rjar_bin.go │ │ │ ├── rjar_test.go │ │ │ └── testdata │ │ │ │ └── BUILD │ │ ├── testdata │ │ │ └── res │ │ │ │ └── drawable-ldpi │ │ │ │ └── foo.9.png │ │ └── types.go │ ├── bundletool_module_builder │ │ ├── BUILD │ │ └── bundletool_module_builder.go │ ├── deploy_info │ │ ├── BUILD │ │ ├── deploy_info.go │ │ └── proto │ │ │ ├── BUILD │ │ │ └── android_deploy_info.proto │ ├── extract_desugar_pgcfg_flags │ │ ├── BUILD │ │ ├── extract_desugar_pgcfg_flags.go │ │ └── extract_desugar_pgcfg_flags_test.sh │ ├── jar_to_module_info │ │ ├── BUILD │ │ └── jar_to_module_info.go │ ├── java │ │ └── com │ │ │ └── google │ │ │ └── devtools │ │ │ └── build │ │ │ └── android │ │ │ ├── Aapt2OptimizeAction.java │ │ │ ├── Aapt2ResourcePackagingAction.java │ │ │ ├── Aapt2ResourceShrinkingAction.java │ │ │ ├── AaptCommandBuilder.java │ │ │ ├── AarGeneratorAction.java │ │ │ ├── AbstractBusyBoxAction.java │ │ │ ├── AndroidAssetMergingAction.java │ │ │ ├── AndroidCompiledDataDeserializer.java │ │ │ ├── AndroidCompiledResourceMergingAction.java │ │ │ ├── AndroidDataBindingProcessingAction.java │ │ │ ├── AndroidDataBindingWrapper.java │ │ │ ├── AndroidDataDeserializer.java │ │ │ ├── AndroidDataMerger.java │ │ │ ├── AndroidDataPathWalker.java │ │ │ ├── AndroidDataSerializer.java │ │ │ ├── AndroidDataWriter.java │ │ │ ├── AndroidDataWritingVisitor.java │ │ │ ├── AndroidFrameworkAttrIdJar.java │ │ │ ├── AndroidFrameworkAttrIdProvider.java │ │ │ ├── AndroidManifest.java │ │ │ ├── AndroidManifestProcessor.java │ │ │ ├── AndroidOptionsUtils.java │ │ │ ├── AndroidParsedDataDeserializer.java │ │ │ ├── AndroidResourceClassWriter.java │ │ │ ├── AndroidResourceMerger.java │ │ │ ├── AndroidResourceOutputs.java │ │ │ ├── AndroidResourceParsingAction.java │ │ │ ├── AndroidResourceProcessor.java │ │ │ ├── AndroidResourceSymbolSink.java │ │ │ ├── BUILD │ │ │ ├── CommandHelper.java │ │ │ ├── CompatShellQuotedParamsFilePreProcessor.java │ │ │ ├── CompileLibraryResourcesAction.java │ │ │ ├── ConvertResourceZipToApkAction.java │ │ │ ├── Converters.java │ │ │ ├── DataAsset.java │ │ │ ├── DataKey.java │ │ │ ├── DataResource.java │ │ │ ├── DataResourceXml.java │ │ │ ├── DataSource.java │ │ │ ├── DataSourceTable.java │ │ │ ├── DataValue.java │ │ │ ├── DataValueFile.java │ │ │ ├── DataValueFileWithIds.java │ │ │ ├── DensityFilteredAndroidData.java │ │ │ ├── DensitySpecificManifestProcessor.java │ │ │ ├── DensitySpecificResourceFilter.java │ │ │ ├── DependencyAndroidData.java │ │ │ ├── DependencyInfo.java │ │ │ ├── DependencySymbolFileProvider.java │ │ │ ├── DeserializationException.java │ │ │ ├── DesugarDexShardingAction.java │ │ │ ├── ExecutorServiceCloser.java │ │ │ ├── FailedFutureAggregator.java │ │ │ ├── Fnv1a32bHash.java │ │ │ ├── FullyQualifiedName.java │ │ │ ├── GenerateDatabindingBaseClassesAction.java │ │ │ ├── InMemoryProfiler.java │ │ │ ├── KeyValueConsumers.java │ │ │ ├── LoggingProfiler.java │ │ │ ├── ManifestContainer.java │ │ │ ├── ManifestMergerAction.java │ │ │ ├── MergeConflict.java │ │ │ ├── MergeConflictExempter.java │ │ │ ├── MergedAndroidData.java │ │ │ ├── OptionsBaseWithResidue.java │ │ │ ├── ParsedAndroidData.java │ │ │ ├── PlaceholderIdFieldInitializerBuilder.java │ │ │ ├── PlaceholderRTxtWriter.java │ │ │ ├── ProcessXmlOptionsWrapper.java │ │ │ ├── Profiler.java │ │ │ ├── RClassGeneratorAction.java │ │ │ ├── README │ │ │ ├── RelativeAssetPath.java │ │ │ ├── ResourceName.java │ │ │ ├── ResourceProcessorBusyBox.java │ │ │ ├── ResourceProcessorCommonOptions.java │ │ │ ├── ResourceShrinkerAction.java │ │ │ ├── ResourcesZip.java │ │ │ ├── ScopedTemporaryDirectory.java │ │ │ ├── SerializedAndroidData.java │ │ │ ├── TriState.java │ │ │ ├── UnvalidatedAndroidData.java │ │ │ ├── UnvalidatedAndroidDirectories.java │ │ │ ├── UnwrittenMergedAndroidData.java │ │ │ ├── UserException.java │ │ │ ├── ValidateAndLinkResourcesAction.java │ │ │ ├── XmlResourceValue.java │ │ │ ├── XmlResourceValues.java │ │ │ ├── ZipFilterAction.java │ │ │ ├── ZipFilterEntryFilter.java │ │ │ ├── aapt2 │ │ │ ├── Aapt2ConfigOptions.java │ │ │ ├── Aapt2Exception.java │ │ │ ├── CompiledResources.java │ │ │ ├── PackagedResources.java │ │ │ ├── ProtoApk.java │ │ │ ├── ProtoResourceUsageAnalyzer.java │ │ │ ├── ResourceCompiler.java │ │ │ ├── ResourceLinker.java │ │ │ ├── ResourceUsageAnalyzer.java │ │ │ ├── SdkToolAttributeWriter.java │ │ │ └── StaticLibrary.java │ │ │ ├── desugar │ │ │ ├── BUILD │ │ │ ├── dependencies │ │ │ │ ├── BUILD │ │ │ │ └── MetadataCollector.java │ │ │ ├── io │ │ │ │ ├── BUILD │ │ │ │ ├── BitFlags.java │ │ │ │ ├── BootClassPathDigest.java │ │ │ │ ├── ClassFileBatchProvider.java │ │ │ │ ├── CoreLibraryRewriter.java │ │ │ │ ├── DirectoryInputFileProvider.java │ │ │ │ ├── DirectoryOutputFileProvider.java │ │ │ │ ├── FieldInfo.java │ │ │ │ ├── FileBasedTypeReferenceClosure.java │ │ │ │ ├── FileBasedTypeReferenceNode.java │ │ │ │ ├── FileContentProvider.java │ │ │ │ ├── HeaderClassLoader.java │ │ │ │ ├── IndexedInputs.java │ │ │ │ ├── InputFileProvider.java │ │ │ │ ├── JarDigest.java │ │ │ │ ├── JarItem.java │ │ │ │ ├── MapBasedClassFileProvider.java │ │ │ │ ├── OutputFileProvider.java │ │ │ │ ├── ResourceBasedClassFiles.java │ │ │ │ ├── ThrowingClassLoader.java │ │ │ │ ├── ZipInputFileProvider.java │ │ │ │ └── ZipOutputFileProvider.java │ │ │ ├── langmodel │ │ │ │ ├── BUILD │ │ │ │ ├── ClassAttributeRecord.java │ │ │ │ ├── ClassAttributes.java │ │ │ │ ├── ClassMemberKey.java │ │ │ │ ├── ClassMemberRecord.java │ │ │ │ ├── ClassMemberTrackReason.java │ │ │ │ ├── ClassMemberUse.java │ │ │ │ ├── ClassMemberUseCounter.java │ │ │ │ ├── ClassName.java │ │ │ │ ├── DependencyGraph.java │ │ │ │ ├── DesugarMethodAttribute.java │ │ │ │ ├── FieldInstrVisitor.java │ │ │ │ ├── FieldKey.java │ │ │ │ ├── LangModelConstants.java │ │ │ │ ├── LangModelHelper.java │ │ │ │ ├── MemberUseKind.java │ │ │ │ ├── MethodDeclInfo.java │ │ │ │ ├── MethodDeclVisitor.java │ │ │ │ ├── MethodInstrVisitor.java │ │ │ │ ├── MethodInvocationSite.java │ │ │ │ ├── MethodKey.java │ │ │ │ ├── SwitchableTypeMapper.java │ │ │ │ ├── TypeMappable.java │ │ │ │ ├── TypeMapper.java │ │ │ │ └── desugar_method_attr.proto │ │ │ └── scan │ │ │ │ ├── BUILD │ │ │ │ ├── KeepReference.java │ │ │ │ ├── KeepScanner.java │ │ │ │ └── PrefixReferenceScanner.java │ │ │ ├── dexer │ │ │ ├── AsyncZipOut.java │ │ │ ├── BUILD │ │ │ ├── DexFileSplitter.java │ │ │ ├── DexLimitTracker.java │ │ │ ├── NoAndroidSdkStub.java │ │ │ ├── ZipEntryComparator.java │ │ │ ├── ZipEntryContent.java │ │ │ └── ZipEntryPredicates.java │ │ │ ├── idlclass │ │ │ ├── BUILD │ │ │ ├── IdlClass.java │ │ │ └── IdlClassOptions.java │ │ │ ├── junctions │ │ │ ├── BUILD │ │ │ ├── JunctionCreator.java │ │ │ ├── NoopJunctionCreator.java │ │ │ └── WindowsJunctionCreator.java │ │ │ ├── proto │ │ │ ├── BUILD │ │ │ └── serialize_format.proto │ │ │ ├── r8 │ │ │ ├── BUILD │ │ │ ├── CompatDexBuilder.java │ │ │ ├── CompatDx.java │ │ │ ├── CompatDxCompilationError.java │ │ │ ├── CompatDxUnimplemented.java │ │ │ ├── CompatOptionsConverters.java │ │ │ ├── CoreLibraryDesugar.java │ │ │ ├── DependencyCollector.java │ │ │ ├── DescriptorUtils.java │ │ │ ├── Desugar.java │ │ │ ├── DesugarJvmFlags.java │ │ │ ├── DexFileMerger.java │ │ │ ├── FileUtils.java │ │ │ ├── NoAndroidSdkStub.java │ │ │ ├── NoWriteCollectors.java │ │ │ ├── R8Utils.java │ │ │ ├── ZipUtils.java │ │ │ └── desugar │ │ │ │ ├── OrderedClassFileResourceProvider.java │ │ │ │ └── OutputConsumer.java │ │ │ ├── resources │ │ │ ├── BUILD │ │ │ ├── FieldInitializer.java │ │ │ ├── FieldInitializers.java │ │ │ ├── IntArrayFieldInitializer.java │ │ │ ├── IntFieldInitializer.java │ │ │ ├── JavaIdentifierValidator.java │ │ │ ├── Provenance.java │ │ │ ├── RClassGenerator.java │ │ │ ├── RPackageId.java │ │ │ ├── RSourceGenerator.java │ │ │ ├── ResourceSymbols.java │ │ │ ├── ResourceTypeEnum.java │ │ │ └── Visibility.java │ │ │ ├── sandboxedsdktoolbox │ │ │ ├── BUILD │ │ │ ├── SandboxedSdkToolbox.java │ │ │ ├── apidescriptors │ │ │ │ ├── BUILD │ │ │ │ ├── ExtractApiDescriptorsCommand.java │ │ │ │ └── ExtractApiDescriptorsFromAsarCommand.java │ │ │ ├── clientsources │ │ │ │ ├── BUILD │ │ │ │ └── GenerateClientSourcesCommand.java │ │ │ ├── info │ │ │ │ ├── BUILD │ │ │ │ ├── SdkInfo.java │ │ │ │ └── SdkInfoReader.java │ │ │ ├── mixin │ │ │ │ ├── BUILD │ │ │ │ ├── CertificateDigestGenerator.java │ │ │ │ ├── DebugKeystoreCommandMixin.java │ │ │ │ ├── HostAppInfoMixin.java │ │ │ │ └── SdkDependenciesCommandMixin.java │ │ │ ├── proguardspecs │ │ │ │ ├── BUILD │ │ │ │ └── GenerateSdkProguardSpecsCommand.java │ │ │ ├── runtimeenabledsdkconfig │ │ │ │ ├── BUILD │ │ │ │ ├── GenerateRuntimeEnabledSdkConfigCommand.java │ │ │ │ ├── GenerateRuntimeEnabledSdkTableCommand.java │ │ │ │ └── ResourceIdGenerator.java │ │ │ ├── sdkdependenciesmanifest │ │ │ │ ├── AndroidManifestWriter.java │ │ │ │ ├── BUILD │ │ │ │ └── GenerateSdkDependenciesManifestCommand.java │ │ │ ├── sdksplitproperties │ │ │ │ ├── BUILD │ │ │ │ └── GenerateSdkSplitPropertiesCommand.java │ │ │ └── validatemodulesconfig │ │ │ │ ├── BUILD │ │ │ │ └── ValidateModulesConfigCommand.java │ │ │ ├── xml │ │ │ ├── ArrayXmlResourceValue.java │ │ │ ├── AttrXmlResourceValue.java │ │ │ ├── IdXmlResourceValue.java │ │ │ ├── MacroXmlResourceValue.java │ │ │ ├── Namespaces.java │ │ │ ├── PluralXmlResourceValue.java │ │ │ ├── ProtoXmlUtils.java │ │ │ ├── PublicXmlResourceValue.java │ │ │ ├── ResourcesAttribute.java │ │ │ ├── SimpleXmlResourceValue.java │ │ │ ├── StyleXmlResourceValue.java │ │ │ └── StyleableXmlResourceValue.java │ │ │ └── ziputils │ │ │ ├── BUILD │ │ │ ├── BufferedFile.java │ │ │ ├── CentralDirectory.java │ │ │ ├── DataDescriptor.java │ │ │ ├── DexMapper.java │ │ │ ├── DexReducer.java │ │ │ ├── DirectoryEntry.java │ │ │ ├── DosTime.java │ │ │ ├── EndOfCentralDirectory.java │ │ │ ├── EntryHandler.java │ │ │ ├── LocalFileHeader.java │ │ │ ├── README │ │ │ ├── ScanUtil.java │ │ │ ├── SplitZip.java │ │ │ ├── SplitZipFilters.java │ │ │ ├── Splitter.java │ │ │ ├── UnsignedShorts.java │ │ │ ├── View.java │ │ │ ├── ZipIn.java │ │ │ └── ZipOut.java │ ├── java_resource_extractor │ │ ├── BUILD │ │ └── resource_extractor.py │ ├── javatests │ │ └── com │ │ │ └── google │ │ │ └── devtools │ │ │ └── build │ │ │ └── android │ │ │ ├── AaptCommandBuilderTest.java │ │ │ ├── AarGeneratorActionTest.java │ │ │ ├── AndroidDataBindingProcessingActionTest.java │ │ │ ├── AndroidDataBuilder.java │ │ │ ├── AndroidDataMergerTest.java │ │ │ ├── AndroidDataSerializerAndDeserializerTest.java │ │ │ ├── AndroidDataWriterTest.java │ │ │ ├── AndroidManifestTest.java │ │ │ ├── AndroidOptionsUtilsTest.java │ │ │ ├── AndroidResourceClassWriterTest.java │ │ │ ├── AndroidResourceOutputsTest.java │ │ │ ├── AttributeResourcesAndroidDataMergerTest.java │ │ │ ├── ClassPathsSubject.java │ │ │ ├── ConvertersTest.java │ │ │ ├── DataResourceXmlTest.java │ │ │ ├── DataSourceTest.java │ │ │ ├── DataValueFileTest.java │ │ │ ├── DensitySpecificManifestProcessorTest.java │ │ │ ├── DensitySpecificResourceFilterTest.java │ │ │ ├── DependencyAndroidDataTest.java │ │ │ ├── DesugarDexShardingActionTest.java │ │ │ ├── ManifestMergerActionTest.java │ │ │ ├── ParsedAndroidDataBuilder.java │ │ │ ├── ParsedAndroidDataSubject.java │ │ │ ├── ParsedAndroidDataTest.java │ │ │ ├── PathsSubject.java │ │ │ ├── PlaceholderRTxtWriterTest.java │ │ │ ├── RClassGeneratorActionTest.java │ │ │ ├── SerializedAndroidDataTest.java │ │ │ ├── TestOptions.java │ │ │ ├── UnvalidatedAndroidDataTest.java │ │ │ ├── UnvalidatedAndroidDirectoriesTest.java │ │ │ ├── UnwrittenMergedAndroidDataSubject.java │ │ │ ├── ZipFilterActionTest.java │ │ │ ├── desugar │ │ │ └── dependencies │ │ │ │ └── MetadataCollectorTest.java │ │ │ ├── dexer │ │ │ ├── AllTests.java │ │ │ ├── DexFileSplitterTest.java │ │ │ ├── NoAndroidSdkStubTest.java │ │ │ ├── test_main_dex_list.txt │ │ │ ├── testdata │ │ │ │ ├── AnotherClass.java │ │ │ │ └── SomeClass.java │ │ │ └── testresource.txt │ │ │ ├── idlclass │ │ │ └── IdlClassTest.java │ │ │ ├── junctions │ │ │ ├── NoopJunctionCreatorTest.java │ │ │ └── WindowsJunctionCreatorTest.java │ │ │ ├── r8 │ │ │ ├── AllTests.java │ │ │ ├── CompatDexBuilderTest.java │ │ │ ├── CompatDxTest.java │ │ │ ├── DescriptorUtilsTest.java │ │ │ ├── DexingKeyR8Test.java │ │ │ ├── NoAndroidSdkStubTest.java │ │ │ ├── desugar │ │ │ │ ├── DesugarBasicTest.java │ │ │ │ ├── DesugarInfoCollector.java │ │ │ │ └── basic │ │ │ │ │ ├── A.java │ │ │ │ │ ├── B.java │ │ │ │ │ ├── C.java │ │ │ │ │ ├── I.java │ │ │ │ │ ├── J.java │ │ │ │ │ ├── K.java │ │ │ │ │ └── TestClass.java │ │ │ └── testdata │ │ │ │ ├── arithmetic │ │ │ │ └── Arithmetic.java │ │ │ │ ├── barray │ │ │ │ └── BArray.java │ │ │ │ ├── lambda │ │ │ │ └── Lambda.java │ │ │ │ ├── naming001 │ │ │ │ ├── A.java │ │ │ │ ├── B.java │ │ │ │ ├── C.java │ │ │ │ ├── D.java │ │ │ │ ├── E.java │ │ │ │ ├── F.java │ │ │ │ ├── G.java │ │ │ │ ├── H.java │ │ │ │ ├── I.java │ │ │ │ ├── J.java │ │ │ │ ├── K.java │ │ │ │ ├── L.java │ │ │ │ ├── Reflect.java │ │ │ │ └── Reflect2.java │ │ │ │ └── twosimpleclasses │ │ │ │ ├── Class1.java │ │ │ │ └── Class2.java │ │ │ ├── resources │ │ │ ├── RClassGeneratorTest.java │ │ │ └── android │ │ │ │ └── R.java │ │ │ ├── sandboxedsdktoolbox │ │ │ ├── apidescriptors │ │ │ │ ├── BUILD │ │ │ │ ├── ExtractApiDescriptorsCommandTest.java │ │ │ │ ├── ExtractApiDescriptorsFromAsarCommandTest.java │ │ │ │ └── testlibrary │ │ │ │ │ ├── AnnotatedClass.java │ │ │ │ │ ├── BUILD │ │ │ │ │ └── ClassThatShouldBeIgnored.java │ │ │ ├── proguardspecs │ │ │ │ ├── BUILD │ │ │ │ └── GenerateSdkProguardSpecsCommandTest.java │ │ │ ├── runtimeenabledsdkconfig │ │ │ │ ├── BUILD │ │ │ │ ├── GenerateRuntimeEnabledSdkConfigCommandTest.java │ │ │ │ ├── GenerateRuntimeEnabledSdkTableCommandTest.java │ │ │ │ └── testdata │ │ │ │ │ ├── com.example.sdkconfig.json │ │ │ │ │ └── test_key │ │ │ ├── sdkdependenciesmanifest │ │ │ │ ├── BUILD │ │ │ │ ├── GenerateSdkDependenciesManifestCommandTest.java │ │ │ │ └── testdata │ │ │ │ │ ├── com.example.archivedsdkmetadata.json │ │ │ │ │ ├── com.example.firstsdkconfig.json │ │ │ │ │ ├── com.example.secondsdkconfig.json │ │ │ │ │ ├── expected_manifest_multiple_sdks.xml │ │ │ │ │ ├── expected_manifest_single_sdk.xml │ │ │ │ │ ├── expected_manifest_with_archived_sdk.xml │ │ │ │ │ └── test_key │ │ │ ├── sdksplitproperties │ │ │ │ ├── BUILD │ │ │ │ ├── GenerateSdkSplitPropertiesCommandTest.java │ │ │ │ └── testdata │ │ │ │ │ ├── valid_xmltree_dump.txt │ │ │ │ │ └── xmltree_dump_with_duplicate_values.txt │ │ │ ├── utils │ │ │ │ ├── BUILD │ │ │ │ ├── CommandResult.java │ │ │ │ ├── Runner.java │ │ │ │ ├── TestData.java │ │ │ │ └── Zip.java │ │ │ └── validatemodulesconfig │ │ │ │ ├── BUILD │ │ │ │ └── ValidateModulesConfigCommandTest.java │ │ │ ├── testing │ │ │ ├── databinding │ │ │ │ ├── res │ │ │ │ │ └── layout │ │ │ │ │ │ └── lib1_layout.xml │ │ │ │ └── res2 │ │ │ │ │ └── layout │ │ │ │ │ └── lib2_layout.xml │ │ │ └── manifestmerge │ │ │ │ ├── brokenManifest │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── expected-merged-permissions │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── expected │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── mergeeOne │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── mergeeTwo │ │ │ │ └── AndroidManifest.xml │ │ │ │ └── merger │ │ │ │ └── AndroidManifest.xml │ │ │ ├── xml │ │ │ ├── IdXmlResourceValueTest.java │ │ │ ├── ProtoXmlUtilsTest.java │ │ │ └── SimpleXmlResourceValueTest.java │ │ │ └── ziputils │ │ │ ├── AllTests.java │ │ │ ├── BufferedFileTest.java │ │ │ ├── CentralDirectoryTest.java │ │ │ ├── DataDescriptorTest.java │ │ │ ├── EndOfCentralDirectoryTest.java │ │ │ ├── FakeFileSystem.java │ │ │ ├── FileSystem.java │ │ │ ├── LocalFileHeaderTest.java │ │ │ ├── ScanUtilTest.java │ │ │ ├── SplitZipFiltersTest.java │ │ │ ├── SplitZipTest.java │ │ │ ├── SplitterTest.java │ │ │ ├── ViewTest.java │ │ │ ├── ZipFileBuilder.java │ │ │ ├── ZipInTest.java │ │ │ └── ZipOutTest.java │ ├── jdeps │ │ ├── BUILD │ │ ├── jdeps.go │ │ ├── jdeps_test.sh │ │ ├── print_jdeps.go │ │ ├── proto │ │ │ └── BUILD │ │ └── testdata │ │ │ └── test_data.jdeps │ ├── mi │ │ └── deployment_oss │ │ │ ├── BUILD │ │ │ ├── deploy.go │ │ │ └── deploy_binary.go │ └── split_core_jar │ │ ├── BUILD │ │ └── split_core_jar.go └── validations │ ├── aar_import_checks │ └── BUILD │ └── validate_manifest │ ├── BUILD │ ├── validate_manifest.py │ └── validate_manifest_test.py ├── stardoc ├── BUILD ├── doc_rules.bzl ├── footer_template.vm ├── header_template.vm └── table_of_contents_template.vm ├── test ├── bashunit │ ├── BUILD │ ├── unittest.bash │ ├── unittest_test.py │ └── unittest_utils.sh ├── rules │ ├── android_binary │ │ ├── AndroidManifest.xml │ │ ├── BUILD │ │ ├── java │ │ │ └── com │ │ │ │ ├── binary │ │ │ │ └── AJavaClass.java │ │ │ │ └── foo │ │ │ │ ├── AJavaClass.java │ │ │ │ ├── AJavaClassRequiringDeps.java │ │ │ │ └── AnotherJavaClass.java │ │ ├── manifest_merge_order │ │ │ ├── BUILD │ │ │ ├── defs.bzl │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── basicapp │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ ├── AndroidManifestBar.xml │ │ │ │ │ ├── AndroidManifestBaz.xml │ │ │ │ │ ├── AndroidManifestFoo.xml │ │ │ │ │ └── BUILD │ │ │ └── manifest_merge_order_test.py │ │ ├── r8_integration │ │ │ ├── BUILD │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ ├── basicapp │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ ├── AndroidManifest_lib.xml │ │ │ │ │ ├── BUILD │ │ │ │ │ ├── BasicActivity.java │ │ │ │ │ ├── Lib2WithSpecsActivity.java │ │ │ │ │ ├── LibWithSpecsActivity.java │ │ │ │ │ ├── UnusedActivity.java │ │ │ │ │ ├── lib2_proguard.cfg │ │ │ │ │ ├── lib_proguard.cfg │ │ │ │ │ ├── proguard.cfg │ │ │ │ │ ├── res │ │ │ │ │ │ ├── layout │ │ │ │ │ │ │ └── basic_activity.xml │ │ │ │ │ │ └── values │ │ │ │ │ │ │ └── strings.xml │ │ │ │ │ └── res_lib │ │ │ │ │ │ ├── layout │ │ │ │ │ │ └── unused_activity.xml │ │ │ │ │ │ └── values │ │ │ │ │ │ └── strings.xml │ │ │ │ │ └── neverlink │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ ├── BUILD │ │ │ │ │ ├── BasicActivity.java │ │ │ │ │ ├── Neverlink1.java │ │ │ │ │ ├── Neverlink2.java │ │ │ │ │ └── proguard.cfg │ │ │ ├── r8_integration_test.py │ │ │ └── test.bzl │ │ ├── res │ │ │ ├── layout │ │ │ │ └── main.xml │ │ │ └── raw │ │ │ │ └── unused.txt │ │ └── test.bzl │ ├── android_library_extensibility │ │ ├── BUILD │ │ ├── custom_android_library.bzl │ │ └── test.bzl │ ├── android_local_test │ │ ├── BUILD │ │ ├── EmptyTest.java │ │ ├── integration_test_stub_script.sh │ │ ├── java │ │ │ └── com │ │ │ │ └── starlark_resources │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── BUILD │ │ │ │ ├── SampleTest.java │ │ │ │ ├── SampleTestMultipleDeps.java │ │ │ │ ├── SampleTestNeverlinkDep.java │ │ │ │ ├── SampleTestWithEnvSetting.java │ │ │ │ ├── another_res │ │ │ │ └── values │ │ │ │ │ └── strings.xml │ │ │ │ ├── assets │ │ │ │ ├── bar.txt │ │ │ │ └── foo.txt │ │ │ │ ├── env_location_data.txt │ │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ ├── java_launcher_integration_test.bzl │ │ ├── java_launcher_test.bzl │ │ ├── non_java │ │ │ ├── AndroidManifest.xml │ │ │ ├── BUILD │ │ │ ├── SampleTest.java │ │ │ ├── assets │ │ │ │ └── bar.txt │ │ │ └── res │ │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── test.bzl │ ├── android_revision │ │ ├── BUILD │ │ └── test.bzl │ ├── android_sdk_repository │ │ ├── BUILD │ │ ├── android_helper.sh │ │ └── android_sdk_repository_test.sh │ └── resources │ │ └── BUILD └── utils │ ├── BUILD │ ├── asserts.bzl │ ├── file.bzl │ ├── integration_demo │ ├── BUILD │ └── demo_test.sh │ ├── lib.bzl │ └── unittest.bzl ├── toolchains ├── android │ ├── BUILD │ ├── toolchain.bzl │ └── zip.sh └── android_sdk │ ├── BUILD │ └── rule.bzl └── tools ├── android ├── BUILD ├── aar_embedded_jars_extractor.py ├── aar_embedded_jars_extractor_test.py ├── aar_embedded_proguard_extractor.py ├── aar_embedded_proguard_extractor_test.py ├── aar_native_libs_zip_creator.py ├── aar_native_libs_zip_creator_test.py ├── aar_resources_extractor.py ├── aar_resources_extractor_test.py ├── bazel_debug.keystore ├── build_java8_legacy_dex.sh ├── d8_desugar.sh ├── defs.bzl ├── dex_list_obfuscator.sh ├── json_worker_wrapper.py ├── junction.py └── xslt │ ├── BUILD │ ├── add_g3itr.xslt │ └── xslt.sh └── jdk ├── BUILD ├── create_system.sh ├── jar_to_module_info_test.sh ├── java_stub_template.txt ├── system.bzl └── test_module_info_golden.txt /.bazelignore: -------------------------------------------------------------------------------- 1 | examples 2 | -------------------------------------------------------------------------------- /.bazelrc: -------------------------------------------------------------------------------- 1 | common --java_runtime_version=17 2 | -------------------------------------------------------------------------------- /.bazelversion: -------------------------------------------------------------------------------- 1 | 7.4.0 2 | -------------------------------------------------------------------------------- /.bcr/config.yml: -------------------------------------------------------------------------------- 1 | fixedReleaser: 2 | login: ahumesky 3 | email: ahumesky@google.com 4 | -------------------------------------------------------------------------------- /.bcr/metadata.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "homepage": "https://github.com/bazelbuild/rules_android", 3 | "maintainers": [ 4 | { 5 | "email": "ahumesky@google.com", 6 | "github": "ahumesky", 7 | "name": "ahumesky" 8 | }, 9 | { 10 | "email": "tedx@google.com", 11 | "github": "ted-xie", 12 | "name": "tedx" 13 | } 14 | ], 15 | "repository": [ 16 | "github:bazelbuild/rules_android" 17 | ], 18 | "versions": [], 19 | "yanked_versions": {} 20 | } 21 | -------------------------------------------------------------------------------- /.bcr/presubmit.yml: -------------------------------------------------------------------------------- 1 | bcr_test_module: 2 | module_path: examples/basicapp 3 | matrix: 4 | platform: ["ubuntu2004", "macos", "windows"] 5 | bazel: ["7.4.1", "8.0.0", "rolling"] 6 | tasks: 7 | run_test_module: 8 | name: "Verify build targets with bzlmod" 9 | platform: ${{ platform }} 10 | bazel: ${{ bazel }} 11 | build_targets: 12 | - "//java/com/basicapp:basic_app" 13 | -------------------------------------------------------------------------------- /.bcr/source.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "integrity": "", 3 | "strip_prefix": "rules_android-{TAG}", 4 | "url": "https://github.com/bazelbuild/rules_android/archive/refs/tags/{TAG}.tar.gz" 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/ci.bazelrc: -------------------------------------------------------------------------------- 1 | # This file contains Bazel settings to apply on CI only. 2 | # It is referenced with a --bazelrc option in the call to bazel in ci.yaml 3 | 4 | # Debug where options came from 5 | build --announce_rc 6 | # This directory is configured in GitHub actions to be persisted between runs. 7 | # We do not enable the repository cache to cache downloaded external artifacts 8 | # as these are generally faster to download again than to fetch them from the 9 | # GitHub actions cache. 10 | build --disk_cache=~/.cache/bazel 11 | # Don't rely on test logs being easily accessible from the test runner, 12 | # though it makes the log noisier. 13 | test --test_output=errors 14 | # Allows tests to run bazelisk-in-bazel, since this is the cache folder used 15 | test --test_env=XDG_CACHE_HOME 16 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # Cut a release whenever a new tag is pushed to the repo. 2 | # You should use an annotated tag, like `git tag -a v1.2.3` 3 | # and put the release notes into the commit message for the tag. 4 | name: Release 5 | 6 | on: 7 | push: 8 | tags: 9 | - "v*.*.*" 10 | 11 | permissions: 12 | contents: write 13 | 14 | jobs: 15 | release: 16 | uses: bazel-contrib/.github/.github/workflows/release_ruleset.yaml@v6 17 | with: 18 | release_files: rules_android-*.tar.gz 19 | bazel_test_command: "cd examples/basicapp && bazel build java/com/basicapp:basic_app" 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bazel-* 2 | # Intellij Bazel Plugin 3 | .ijwb 4 | # Android Studio Bazel Plugin 5 | .aswb 6 | *.swp 7 | MODULE.bazel.lock 8 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # This the official list of authors for copyright purposes. 2 | # This file is distinct from the CONTRIBUTORS files. 3 | # See the latter for an explanation. 4 | 5 | # Names should be added to this file as: 6 | # Name or Organization 7 | # The email address is not required for organizations. 8 | 9 | Google LLC 10 | -------------------------------------------------------------------------------- /CONTRIBUTORS: -------------------------------------------------------------------------------- 1 | # People who have agreed to one of the CLAs and can contribute patches. 2 | # The AUTHORS file lists the copyright holders; this file 3 | # lists people. For example, Google employees are listed here 4 | # but not in AUTHORS, because Google holds the copyright. 5 | # 6 | # https://developers.google.com/open-source/cla/individual 7 | # https://developers.google.com/open-source/cla/corporate 8 | # 9 | # Names should be added to this file as: 10 | # Name 11 | Daniel Whang 12 | Mauricio Galindo 13 | Stefan Ramsauer 14 | Tim Peut 15 | Alex Humesky 16 | Jingwen Chen 17 | -------------------------------------------------------------------------------- /ROADMAP.md: -------------------------------------------------------------------------------- 1 | # Bazel Android Rules Roadmap 2 | 3 | See https://github.com/orgs/bazelbuild/projects/17 for the Starlark Android 4 | Rules roadmap. -------------------------------------------------------------------------------- /WORKSPACE.bzlmod: -------------------------------------------------------------------------------- 1 | workspace(name = "rules_android") 2 | -------------------------------------------------------------------------------- /android/BUILD: -------------------------------------------------------------------------------- 1 | # Copyright 2023 The Bazel Authors. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | 15 | """ 16 | Package used for redirecting Starlark rules from //android/rules.bzl to //rules/rules.bzl. 17 | Used for easier migration to a new branch due to directory differences. 18 | """ 19 | -------------------------------------------------------------------------------- /bzlmod_extensions/BUILD: -------------------------------------------------------------------------------- 1 | exports_files( 2 | [ 3 | "apksig.BUILD", 4 | "com_android_dex.BUILD", 5 | ], 6 | ) 7 | -------------------------------------------------------------------------------- /bzlmod_extensions/apksig.BUILD: -------------------------------------------------------------------------------- 1 | # Defines targets for the apksigner build tool. 2 | load("@rules_java//java:defs.bzl", "java_binary", "java_library", "java_test") 3 | 4 | java_binary( 5 | name = "apksigner", 6 | srcs = glob( 7 | ["**/*.java"], 8 | exclude = [ 9 | "**/test/**", 10 | "**/*Test.java", 11 | ], 12 | ), 13 | main_class = "com.android.apksigner.ApkSignerTool", 14 | visibility = ["//visibility:public"], 15 | deps = [ 16 | "@rules_android_maven//:org_bouncycastle_bcprov_jdk18on", 17 | "@rules_android_maven//:org_conscrypt_conscrypt_openjdk_uber", 18 | ], 19 | ) 20 | -------------------------------------------------------------------------------- /bzlmod_extensions/com_android_dex.BUILD: -------------------------------------------------------------------------------- 1 | # Defines targets for the com_android_dex utility library. 2 | load("@rules_java//java:java_library.bzl", "java_library") 3 | 4 | java_library( 5 | name = "dex", 6 | srcs = glob(["dx/src/com/android/dex/**"]), 7 | visibility = ["//visibility:public"], 8 | ) -------------------------------------------------------------------------------- /examples/basicapp/.bazelrc: -------------------------------------------------------------------------------- 1 | # Config for library desugaring 2 | common:core_library_desugaring --desugar_java8_libs 3 | 4 | # Flags to enable mobile-install v3 5 | mobile-install --mode=skylark --mobile_install_aspect=@rules_android//mobile_install:mi.bzl --mobile_install_supported_rules=android_binary 6 | # Required to invoke the Studio deployer jar 7 | common --tool_java_runtime_version=17 8 | -------------------------------------------------------------------------------- /examples/basicapp/.gitignore: -------------------------------------------------------------------------------- 1 | *.lock 2 | -------------------------------------------------------------------------------- /examples/basicapp/BUILD: -------------------------------------------------------------------------------- 1 | # Empty build file to satisfy gazelle for rules_go. -------------------------------------------------------------------------------- /examples/basicapp/MODULE.bazel: -------------------------------------------------------------------------------- 1 | module( 2 | name = "basicapp", 3 | ) 4 | 5 | bazel_dep(name = "rules_java", version = "7.12.2") 6 | bazel_dep(name = "bazel_skylib", version = "1.3.0") 7 | 8 | bazel_dep( 9 | name = "rules_android", 10 | version = "0.6.4", 11 | ) 12 | 13 | 14 | # Local override to enable this app to be used for rules_android presubmit 15 | # integration testing. If you're basing your app's MODULE file on this 16 | # example, you do *not* need the following override. 17 | local_path_override( 18 | module_name = "rules_android", 19 | path = "../../", 20 | ) 21 | 22 | remote_android_extensions = use_extension( 23 | "@rules_android//bzlmod_extensions:android_extensions.bzl", 24 | "remote_android_tools_extensions") 25 | use_repo(remote_android_extensions, "android_gmaven_r8", "android_tools") 26 | 27 | android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension") 28 | use_repo(android_sdk_repository_extension, "androidsdk") 29 | 30 | register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all") 31 | 32 | -------------------------------------------------------------------------------- /examples/basicapp/README.md: -------------------------------------------------------------------------------- 1 | To build, ensure that the `ANDROID_HOME` environment variable is set to the path 2 | to an Android SDK, and run: 3 | 4 | ``` 5 | bazel build java/com/basicapp:basic_app 6 | ``` 7 | 8 | See the `.bazelrc` file for flags needed to build the app. -------------------------------------------------------------------------------- /examples/basicapp/WORKSPACE.bzlmod: -------------------------------------------------------------------------------- 1 | workspace(name = "basicapp") 2 | -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/BUILD: -------------------------------------------------------------------------------- 1 | load("@rules_android//android:rules.bzl", "android_binary", "android_library") 2 | 3 | android_binary( 4 | name = "basic_app", 5 | manifest = "AndroidManifest.xml", 6 | deps = [":basic_lib"], 7 | ) 8 | 9 | android_library( 10 | name = "basic_lib", 11 | srcs = ["BasicActivity.java"], 12 | javacopts = ["-source 11 -target 11"], 13 | manifest = "AndroidManifest.xml", 14 | resource_files = glob(["res/**"]), 15 | ) 16 | -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bazelbuild/rules_android/68ac1a0f8266de4c23dc2c00b03c1aabda1a43f5/examples/basicapp/java/com/basicapp/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bazelbuild/rules_android/68ac1a0f8266de4c23dc2c00b03c1aabda1a43f5/examples/basicapp/java/com/basicapp/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bazelbuild/rules_android/68ac1a0f8266de4c23dc2c00b03c1aabda1a43f5/examples/basicapp/java/com/basicapp/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bazelbuild/rules_android/68ac1a0f8266de4c23dc2c00b03c1aabda1a43f5/examples/basicapp/java/com/basicapp/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/basicapp/java/com/basicapp/res/layout/basic_activity.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 |