From 180e1e70534d3db22571c428bdbaff16a4ed5db3 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Sun, 20 Jun 2021 17:54:38 +0900 Subject: Fix link apex for jni libs When library_path is ":" splitted list of .jar files, we should iterate over each .jar file path to link a proper APEX namespace for JNI lib. Bug: 169826971 Test: libnativeloader_test Test: move libicing to appsearch apex Change-Id: I3df47203d336036d0e015f9c5421b30a0377087f --- libnativeloader/library_namespaces.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'libnativeloader/library_namespaces.cpp') diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp index 2360819987..8b87338fba 100644 --- a/libnativeloader/library_namespaces.cpp +++ b/libnativeloader/library_namespaces.cpp @@ -344,15 +344,17 @@ Result LibraryNamespaces::Create(JNIEnv* env, uint32_t t } } - auto apex_ns_name = FindApexNamespaceName(dex_path); - if (apex_ns_name.ok()) { - const auto& jni_libs = apex_jni_libraries(*apex_ns_name); - if (jni_libs != "") { - auto apex_ns = NativeLoaderNamespace::GetExportedNamespace(*apex_ns_name, is_bridged); - if (apex_ns.ok()) { - linked = app_ns->Link(&apex_ns.value(), jni_libs); - if (!linked.ok()) { - return linked.error(); + for (const std::string& each_jar_path : android::base::Split(dex_path, ":")) { + auto apex_ns_name = FindApexNamespaceName(each_jar_path); + if (apex_ns_name.ok()) { + const auto& jni_libs = apex_jni_libraries(*apex_ns_name); + if (jni_libs != "") { + auto apex_ns = NativeLoaderNamespace::GetExportedNamespace(*apex_ns_name, is_bridged); + if (apex_ns.ok()) { + linked = app_ns->Link(&apex_ns.value(), jni_libs); + if (!linked.ok()) { + return linked.error(); + } } } } -- cgit v1.2.3-59-g8ed1b