Add public lib of Cronet apex mainline
This is a workaround since apex module library path is not
supported in jni
Bug: 139397529
Bug: 145474221
Test: Build
Test: manual test with Cronet
Test: atest CtsJniTestCases
Test: atest libnativeloader_test
Change-Id: Ifd8aa85bd78e95131b2ce3eab0ad32c2bb19cee2
diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp
index 03e0814..c01f804 100644
--- a/libnativeloader/library_namespaces.cpp
+++ b/libnativeloader/library_namespaces.cpp
@@ -44,6 +44,7 @@
constexpr const char* kVndkNamespaceName = "vndk";
constexpr const char* kArtNamespaceName = "art";
constexpr const char* kNeuralNetworksNamespaceName = "neuralnetworks";
+constexpr const char* kCronetNamespaceName = "cronet";
// classloader-namespace is a linker namespace that is created for the loaded
// app. To be specific, it is created for the app classloader. When
@@ -279,6 +280,16 @@
}
}
+ // TODO(b/143733063): Remove it after library path of apex module is supported.
+ auto cronet_ns =
+ NativeLoaderNamespace::GetExportedNamespace(kCronetNamespaceName, is_bridged);
+ if (cronet_ns) {
+ linked = app_ns->Link(*cronet_ns, cronet_public_libraries());
+ if (!linked) {
+ return linked.error();
+ }
+ }
+
if (!vendor_public_libraries().empty()) {
auto vendor_ns = NativeLoaderNamespace::GetExportedNamespace(kVendorNamespaceName, is_bridged);
// when vendor_ns is not configured, link to the platform namespace
diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp
index 8a8193e..ae99b97 100644
--- a/libnativeloader/native_loader_test.cpp
+++ b/libnativeloader/native_loader_test.cpp
@@ -98,6 +98,7 @@
{"sphal", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("sphal"))},
{"vndk", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("vndk"))},
{"neuralnetworks", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("neuralnetworks"))},
+ {"cronet", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("cronet"))},
};
// The actual gmock object
@@ -354,12 +355,14 @@
bool expected_link_with_vndk_ns = false;
bool expected_link_with_default_ns = false;
bool expected_link_with_neuralnetworks_ns = true;
+ bool expected_link_with_cronet_ns = true;
std::string expected_shared_libs_to_platform_ns = default_public_libraries();
std::string expected_shared_libs_to_art_ns = art_public_libraries();
std::string expected_shared_libs_to_sphal_ns = vendor_public_libraries();
std::string expected_shared_libs_to_vndk_ns = vndksp_libraries();
std::string expected_shared_libs_to_default_ns = default_public_libraries();
std::string expected_shared_libs_to_neuralnetworks_ns = neuralnetworks_public_libraries();
+ std::string expected_shared_libs_to_cronet_ns = cronet_public_libraries();
void SetExpectations() {
NativeLoaderTest::SetExpectations();
@@ -404,6 +407,11 @@
StrEq(expected_shared_libs_to_neuralnetworks_ns)))
.WillOnce(Return(true));
}
+ if (expected_link_with_cronet_ns) {
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("cronet"),
+ StrEq(expected_shared_libs_to_cronet_ns)))
+ .WillOnce(Return(true));
+ }
}
void RunTest() {
diff --git a/libnativeloader/public_libraries.cpp b/libnativeloader/public_libraries.cpp
index 1ab9a30..d58b4ea 100644
--- a/libnativeloader/public_libraries.cpp
+++ b/libnativeloader/public_libraries.cpp
@@ -57,6 +57,8 @@
constexpr const char* kArtApexLibPath = "/apex/com.android.art/" LIB;
constexpr const char* kNeuralNetworksApexPublicLibrary = "libneuralnetworks.so";
+// STOPSHIP(b/146420818): Figure out how to use stub or non-specific lib name for libcronet.
+constexpr const char* kCronetApexPublicLibrary = "libcronet.80.0.3986.0.so";
// TODO(b/130388701): do we need this?
std::string root_dir() {
@@ -271,6 +273,10 @@
return kNeuralNetworksApexPublicLibrary;
}
+static std::string InitCronetPublicLibraries() {
+ return kCronetApexPublicLibrary;
+}
+
} // namespace
const std::string& preloadable_public_libraries() {
@@ -303,6 +309,11 @@
return list;
}
+const std::string& cronet_public_libraries() {
+ static std::string list = InitCronetPublicLibraries();
+ return list;
+}
+
const std::string& llndk_libraries() {
static std::string list = InitLlndkLibraries();
return list;
diff --git a/libnativeloader/public_libraries.h b/libnativeloader/public_libraries.h
index a342baa..5dfaec3 100644
--- a/libnativeloader/public_libraries.h
+++ b/libnativeloader/public_libraries.h
@@ -32,6 +32,7 @@
const std::string& preloadable_public_libraries();
const std::string& default_public_libraries();
const std::string& art_public_libraries();
+const std::string& cronet_public_libraries();
const std::string& vendor_public_libraries();
const std::string& extended_public_libraries();
const std::string& neuralnetworks_public_libraries();