Add libstats_jni to linkerconfig/namespace
As part of statsd becoming a Mainline module, moving libstats_jni to the
apex requires adding it to the linker namespace here.
Bug: 145922701
Test: m -j
Change-Id: Ifcbea47cc36604e4a86df9af711d678b23012724
diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp
index 8e9b6ea..9c658d7 100644
--- a/libnativeloader/library_namespaces.cpp
+++ b/libnativeloader/library_namespaces.cpp
@@ -45,6 +45,7 @@
constexpr const char* kArtNamespaceName = "com.android.art";
constexpr const char* kNeuralNetworksNamespaceName = "com.android.neuralnetworks";
constexpr const char* kCronetNamespaceName = "com.android.cronet";
+constexpr const char* kStatsdNamespaceName = "com.android.os.statsd";
// classloader-namespace is a linker namespace that is created for the loaded
// app. To be specific, it is created for the app classloader. When
@@ -295,6 +296,16 @@
}
}
+ // Give access to StatsdAPI libraries
+ auto statsd_ns =
+ NativeLoaderNamespace::GetExportedNamespace(kStatsdNamespaceName, is_bridged);
+ if (statsd_ns.ok()) {
+ linked = app_ns->Link(*statsd_ns, statsd_public_libraries());
+ if (!linked.ok()) {
+ 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 system namespace
diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp
index 7064c16..75cbc60 100644
--- a/libnativeloader/native_loader_test.cpp
+++ b/libnativeloader/native_loader_test.cpp
@@ -99,6 +99,7 @@
{"vndk", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("vndk"))},
{"com.android.neuralnetworks", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.neuralnetworks"))},
{"com.android.cronet", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.cronet"))},
+ {"com.android.os.statsd", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.os.statsd"))},
};
// The actual gmock object
@@ -356,6 +357,7 @@
bool expected_link_with_default_ns = false;
bool expected_link_with_neuralnetworks_ns = true;
bool expected_link_with_cronet_ns = true;
+ bool expected_link_with_statsd_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();
@@ -363,6 +365,7 @@
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();
+ std::string expected_shared_libs_to_statsd_ns = statsd_public_libraries();
void SetExpectations() {
NativeLoaderTest::SetExpectations();
@@ -412,6 +415,11 @@
StrEq(expected_shared_libs_to_cronet_ns)))
.WillOnce(Return(true));
}
+ if (expected_link_with_statsd_ns) {
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com.android.os.statsd"),
+ StrEq(expected_shared_libs_to_statsd_ns)))
+ .WillOnce(Return(true));
+ }
}
void RunTest() {
diff --git a/libnativeloader/public_libraries.cpp b/libnativeloader/public_libraries.cpp
index 34f0a3d..35ef488 100644
--- a/libnativeloader/public_libraries.cpp
+++ b/libnativeloader/public_libraries.cpp
@@ -38,10 +38,11 @@
namespace android::nativeloader {
-using namespace internal;
-using namespace ::std::string_literals;
using android::base::ErrnoError;
using android::base::Result;
+using internal::ConfigEntry;
+using internal::ParseConfig;
+using std::literals::string_literals::operator""s;
namespace {
@@ -63,6 +64,8 @@
// 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";
+constexpr const char* kStatsdApexPublicLibrary = "libstats_jni.so";
+
// TODO(b/130388701): do we need this?
std::string root_dir() {
static const char* android_root_env = getenv("ANDROID_ROOT");
@@ -218,7 +221,7 @@
}
static std::string InitArtPublicLibraries() {
- CHECK(sizeof(kArtApexPublicLibraries) > 0);
+ CHECK_GT((int)sizeof(kArtApexPublicLibraries), 0);
std::string list = android::base::Join(kArtApexPublicLibraries, ":");
std::string additional_libs = additional_public_libraries();
@@ -293,6 +296,10 @@
return kCronetApexPublicLibrary;
}
+static std::string InitStatsdPublicLibraries() {
+ return kStatsdApexPublicLibrary;
+}
+
} // namespace
const std::string& preloadable_public_libraries() {
@@ -330,6 +337,11 @@
return list;
}
+const std::string& statsd_public_libraries() {
+ static std::string list = InitStatsdPublicLibraries();
+ return list;
+}
+
const std::string& llndk_libraries_product() {
static std::string list = InitLlndkLibrariesProduct();
return list;
diff --git a/libnativeloader/public_libraries.h b/libnativeloader/public_libraries.h
index 97be7e5..5fffb86 100644
--- a/libnativeloader/public_libraries.h
+++ b/libnativeloader/public_libraries.h
@@ -33,6 +33,7 @@
const std::string& default_public_libraries();
const std::string& art_public_libraries();
const std::string& cronet_public_libraries();
+const std::string& statsd_public_libraries();
const std::string& vendor_public_libraries();
const std::string& extended_public_libraries();
const std::string& neuralnetworks_public_libraries();