aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rules/apex/apex.bzl24
-rw-r--r--rules/apex/apex_test.bzl60
-rw-r--r--tests/apex/BUILD26
-rw-r--r--tests/apex/com.android.adbd_backing.txt.golden1
-rw-r--r--tests/apex/com.android.adbd_installed-files.txt.golden11
5 files changed, 119 insertions, 3 deletions
diff --git a/rules/apex/apex.bzl b/rules/apex/apex.bzl
index 40733adc..a71229bc 100644
--- a/rules/apex/apex.bzl
+++ b/rules/apex/apex.bzl
@@ -40,6 +40,7 @@ ApexInfo = provider(
"package_name": "APEX package name.",
"backing_libs": "File containing libraries used by the APEX.",
"symbols_used_by_apex": "Symbol list used by this APEX.",
+ "installed_files": "File containing all files installed by the APEX",
},
)
@@ -90,7 +91,8 @@ def _create_file_mapping(ctx):
backing_libs = []
for lib in file_mapping.values():
- backing_libs.append(lib.basename)
+ if lib.basename not in backing_libs:
+ backing_libs.append(lib.basename)
backing_libs = sorted(backing_libs)
# Handle prebuilts
@@ -274,10 +276,24 @@ def _generate_apex_backing_file(ctx, backing_libs):
backing_file = ctx.actions.declare_file(ctx.attr.name + "_backing.txt")
ctx.actions.write(
output = backing_file,
- content = " ".join(backing_libs),
+ content = " ".join(backing_libs) + "\n",
)
return backing_file
+# Generate installed-files.txt which lists all installed files by the APEX.
+def _generate_installed_files_list(ctx, file_mapping):
+ installed_files = ctx.actions.declare_file(ctx.attr.name + "-installed-files.txt")
+ command = []
+ for device_path, bazel_file in file_mapping.items():
+ command.append("echo $(stat -L -c %%s %s) ./%s" % (bazel_file.path, device_path))
+ ctx.actions.run_shell(
+ inputs = file_mapping.values(),
+ outputs = [installed_files],
+ mnemonic = "GenerateApexInstalledFileList",
+ command = "(" + "; ".join(command) + ") | sort -nr > " + installed_files.path,
+ )
+ return installed_files
+
# apexer - generate the APEX file.
def _run_apexer(ctx, apex_toolchain):
# Inputs
@@ -409,6 +425,7 @@ def _run_apexer(ctx, apex_toolchain):
provides_native_libs = provides_native_libs,
backing_libs = _generate_apex_backing_file(ctx, backing_libs),
symbols_used_by_apex = _generate_symbols_used_by_apex(ctx, apex_toolchain, staging_dir),
+ installed_files = _generate_installed_files_list(ctx, file_mapping),
)
# Sign a file with signapk.
@@ -521,9 +538,12 @@ def _apex_rule_impl(ctx):
package_name = ctx.attr.package_name,
backing_libs = apexer_outputs.backing_libs,
symbols_used_by_apex = apexer_outputs.symbols_used_by_apex,
+ installed_files = apexer_outputs.installed_files,
),
OutputGroupInfo(
coverage_files = [apexer_outputs.symbols_used_by_apex],
+ backing_libs = depset([apexer_outputs.backing_libs]),
+ installed_files = depset([apexer_outputs.installed_files]),
),
]
diff --git a/rules/apex/apex_test.bzl b/rules/apex/apex_test.bzl
index 33e25a59..4d22b7a9 100644
--- a/rules/apex/apex_test.bzl
+++ b/rules/apex/apex_test.bzl
@@ -1407,7 +1407,64 @@ def _test_apex_backing_file():
apex_backing_file_test(
name = test_name,
target_under_test = name,
- expected_content = "apex_backing_file_lib_cc.so libc++.so",
+ expected_content = "apex_backing_file_lib_cc.so libc++.so\n",
+ )
+
+ return test_name
+
+def _apex_installed_files_test(ctx):
+ env = analysistest.begin(ctx)
+ actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateApexInstalledFileList"]
+ asserts.true(
+ env,
+ len(actions) == 1,
+ "No GenerateApexInstalledFileList action found for creating <apex>-installed-files.txt file: %s" % actions,
+ )
+
+ asserts.equals(
+ env,
+ len(ctx.attr.expected_inputs),
+ len(actions[0].inputs.to_list()),
+ "Expected inputs length: %d, actual inputs length: %d" % (len(ctx.attr.expected_inputs), len(actions[0].inputs.to_list())),
+ )
+ for file in actions[0].inputs.to_list():
+ asserts.true(
+ env,
+ file.basename in ctx.attr.expected_inputs,
+ "Unexpected input: %s" % file.basename,
+ )
+ asserts.equals(env, ctx.attr.expected_output, actions[0].outputs.to_list()[0].basename)
+ return analysistest.end(env)
+
+apex_installed_files_test = analysistest.make(
+ _apex_installed_files_test,
+ attrs = {
+ "expected_inputs": attr.string_list(),
+ "expected_output": attr.string(),
+ },
+)
+
+def _test_apex_installed_files():
+ name = "apex_installed_files"
+ test_name = name + "_test"
+
+ cc_library_shared(
+ name = name + "_lib_cc",
+ srcs = [name + "_lib.cc"],
+ tags = ["manual"],
+ )
+
+ test_apex(
+ name = name,
+ native_shared_libs_32 = [name + "_lib_cc"],
+ android_manifest = "AndroidManifest.xml",
+ )
+
+ apex_installed_files_test(
+ name = test_name,
+ target_under_test = name,
+ expected_inputs = ["libc++.so", "apex_installed_files_lib_cc.so"],
+ expected_output = "apex_installed_files-installed-files.txt",
)
return test_name
@@ -1478,5 +1535,6 @@ def apex_test_suite(name):
_test_apex_testonly_without_manifest(),
_test_apex_backing_file(),
_test_apex_symbols_used_by_apex(),
+ _test_apex_installed_files(),
],
)
diff --git a/tests/apex/BUILD b/tests/apex/BUILD
index c31445d7..db4a9cd8 100644
--- a/tests/apex/BUILD
+++ b/tests/apex/BUILD
@@ -85,3 +85,29 @@ diff_test(
"//build/bazel/platforms/arch:arm64",
],
)
+
+filegroup(
+ name = "com.android.adbd_backing_libs",
+ srcs = ["//packages/modules/adb/apex:com.android.adbd"],
+ output_group = "backing_libs",
+)
+
+diff_test(
+ name = "com.android.adbd_backing_libs_diff_test",
+ file1 = ":com.android.adbd_backing_libs",
+ file2 = "com.android.adbd_backing.txt.golden",
+ target_compatible_with = ["//build/bazel/platforms/os:linux"],
+)
+
+filegroup(
+ name = "com.android.adbd_installed_files",
+ srcs = ["//packages/modules/adb/apex:com.android.adbd"],
+ output_group = "installed_files",
+)
+
+diff_test(
+ name = "com.android.adbd_installed_files_diff_test",
+ file1 = ":com.android.adbd_installed_files",
+ file2 = "com.android.adbd_installed-files.txt.golden",
+ target_compatible_with = ["//build/bazel/platforms/arch:arm"],
+)
diff --git a/tests/apex/com.android.adbd_backing.txt.golden b/tests/apex/com.android.adbd_backing.txt.golden
new file mode 100644
index 00000000..95212975
--- /dev/null
+++ b/tests/apex/com.android.adbd_backing.txt.golden
@@ -0,0 +1 @@
+libadb_pairing_auth.so libadb_pairing_connection.so libadb_pairing_server.so libadbconnection_client.so libbase.so libc++.so libcrypto.so libcrypto_utils.so libcutils.so
diff --git a/tests/apex/com.android.adbd_installed-files.txt.golden b/tests/apex/com.android.adbd_installed-files.txt.golden
new file mode 100644
index 00000000..63d86553
--- /dev/null
+++ b/tests/apex/com.android.adbd_installed-files.txt.golden
@@ -0,0 +1,11 @@
+1803948 ./bin/adbd
+772404 ./lib/libcrypto.so
+443480 ./lib/libc++.so
+291756 ./lib/libadb_pairing_connection.so
+174552 ./lib/libbase.so
+124604 ./lib/libadb_pairing_auth.so
+124220 ./lib/libadbconnection_client.so
+60712 ./lib/libcutils.so
+36688 ./lib/libadb_pairing_server.so
+3956 ./lib/libcrypto_utils.so
+181 ./etc/init.rc