diff --git a/rules/aar_import/impl.bzl b/rules/aar_import/impl.bzl index d17c3ad01..527c5a587 100644 --- a/rules/aar_import/impl.bzl +++ b/rules/aar_import/impl.bzl @@ -192,6 +192,7 @@ def _extract_jars( args = ctx.actions.args() args.add("--input_aar", aar) args.add("--output_dir", out_jars_tree_artifact.path) + args.add("--build_target", ctx.label) args.add("--output_singlejar_param_file", out_jars_params_file) ctx.actions.run( executable = aar_embedded_jars_extractor_tool, diff --git a/tools/android/aar_embedded_jars_extractor.py b/tools/android/aar_embedded_jars_extractor.py index 855254c4f..668127be9 100644 --- a/tools/android/aar_embedded_jars_extractor.py +++ b/tools/android/aar_embedded_jars_extractor.py @@ -35,6 +35,8 @@ flags.mark_flag_as_required("input_aar") flags.DEFINE_string("output_singlejar_param_file", None, "Output parameter file for singlejar") +flags.DEFINE_string("build_target", None, + "Build target label to pass to singlejar") flags.mark_flag_as_required("output_singlejar_param_file") flags.DEFINE_string("output_dir", None, "Output directory to extract jars in") flags.mark_flag_as_required("output_dir") @@ -43,6 +45,7 @@ def ExtractEmbeddedJars(aar, singlejar_param_file, output_dir, + build_target=None, output_dir_orig=None): """Extracts all embedded jars from an AAR. @@ -56,6 +59,9 @@ def ExtractEmbeddedJars(aar, output_dir_orig = output_dir jar_pattern = re.compile("^(classes|libs/.+)\\.jar$") singlejar_param_file.write(b"--exclude_build_data\n") + if build_target: + singlejar_param_file.write(b"--build_target\n") + singlejar_param_file.write(f"{build_target}\n".encode("utf-8")) for name in aar.namelist(): if jar_pattern.match(name): singlejar_param_file.write(b"--sources\n") @@ -69,12 +75,13 @@ def ExtractEmbeddedJars(aar, def _Main(input_aar, output_singlejar_param_file, output_dir, + build_target=None, output_dir_orig=None): if not output_dir_orig: output_dir_orig = output_dir with zipfile.ZipFile(input_aar, "r") as aar: with open(output_singlejar_param_file, "wb") as singlejar_param_file: - ExtractEmbeddedJars(aar, singlejar_param_file, output_dir, + ExtractEmbeddedJars(aar, singlejar_param_file, output_dir, build_target, output_dir_orig) @@ -93,9 +100,9 @@ def main(unused_argv): os.path.join(aar_junc, os.path.basename(aar_long)), os.path.join(params_junc, os.path.basename(params_long)), os.path.join(out_junc, os.path.basename(out_long)), - FLAGS.output_dir) + FLAGS.output_dir, FLAGS.build_target) else: - _Main(FLAGS.input_aar, FLAGS.output_singlejar_param_file, FLAGS.output_dir) + _Main(FLAGS.input_aar, FLAGS.output_singlejar_param_file, FLAGS.output_dir, FLAGS.build_target) if __name__ == "__main__": diff --git a/tools/android/aar_embedded_jars_extractor_test.py b/tools/android/aar_embedded_jars_extractor_test.py index 6b63520d6..8063c6a8a 100644 --- a/tools/android/aar_embedded_jars_extractor_test.py +++ b/tools/android/aar_embedded_jars_extractor_test.py @@ -54,12 +54,14 @@ def testClassesJarAndLibsJars(self): aar.writestr("libs/b.jar", "") param_file = io.BytesIO() os.makedirs("out_dir") - aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir") + aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir", "//foo:bar") self.assertCountEqual(["classes.jar", "libs"], os.listdir("out_dir")) self.assertCountEqual(["a.jar", "b.jar"], os.listdir("out_dir/libs")) param_file.seek(0) self.assertEqual( [b"--exclude_build_data\n", + b"--build_target\n", + b"//foo:bar\n", b"--sources\n", b"out_dir/classes.jar\n", b"--sources\n", @@ -73,11 +75,13 @@ def testOnlyClassesJar(self): aar.writestr("classes.jar", "") param_file = io.BytesIO() os.makedirs("out_dir") - aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir") + aar_embedded_jars_extractor.ExtractEmbeddedJars(aar, param_file, "out_dir", "//foo:bar") self.assertEqual(["classes.jar"], os.listdir("out_dir")) param_file.seek(0) self.assertEqual( [b"--exclude_build_data\n", + b"--build_target\n", + b"//foo:bar\n", b"--sources\n", b"out_dir/classes.jar\n"], param_file.readlines())