Hide conscrypt package classes for app AOT compilation.
Since app AOT compilation is usually done without conscrypt
on the boot class path, classes defined by app class loader
in conscrypt packages could be resolved differently, i.e.
from conscrypt, at runtime. Reject such definitions during
AOT compilation to ensure correct runtime behavior.
Add a test that when compiling the conscrypt module as an
app, we cannot resolve any class defined in its dex files.
Test: module_exclusion_test
Bug: 122937705
Change-Id: I1fcb4c21937f59772206ee50b688a75053231bc0
diff --git a/libartbase/base/common_art_test.cc b/libartbase/base/common_art_test.cc
index 8e3e73f..242db42 100644
--- a/libartbase/base/common_art_test.cc
+++ b/libartbase/base/common_art_test.cc
@@ -338,11 +338,11 @@
return StringPrintf("%s/framework/%s%s.jar", path.c_str(), jar_prefix.c_str(), suffix.c_str());
}
-std::vector<std::string> CommonArtTestImpl::GetLibCoreDexFileNames() {
+std::vector<std::string> CommonArtTestImpl::GetLibCoreModuleNames() const {
// Note: This must start with the CORE_IMG_JARS in Android.common_path.mk
// because that's what we use for compiling the core.art image.
// It may contain additional modules from TEST_CORE_JARS.
- static const char* const kLibcoreModules[] = {
+ return {
// CORE_IMG_JARS modules.
"core-oj",
"core-libart",
@@ -352,17 +352,26 @@
// Additional modules.
"conscrypt",
};
+}
+std::vector<std::string> CommonArtTestImpl::GetLibCoreDexFileNames(
+ const std::vector<std::string>& modules) const {
std::vector<std::string> result;
- result.reserve(arraysize(kLibcoreModules));
- for (const char* module : kLibcoreModules) {
+ result.reserve(modules.size());
+ for (const std::string& module : modules) {
result.push_back(GetDexFileName(module, IsHost()));
}
return result;
}
-std::vector<std::string> CommonArtTestImpl::GetLibCoreDexLocations() {
- std::vector<std::string> result = GetLibCoreDexFileNames();
+std::vector<std::string> CommonArtTestImpl::GetLibCoreDexFileNames() const {
+ std::vector<std::string> modules = GetLibCoreModuleNames();
+ return GetLibCoreDexFileNames(modules);
+}
+
+std::vector<std::string> CommonArtTestImpl::GetLibCoreDexLocations(
+ const std::vector<std::string>& modules) const {
+ std::vector<std::string> result = GetLibCoreDexFileNames(modules);
if (IsHost()) {
// Strip the ANDROID_BUILD_TOP directory including the directory separator '/'.
const char* host_dir = getenv("ANDROID_BUILD_TOP");
@@ -381,6 +390,11 @@
return result;
}
+std::vector<std::string> CommonArtTestImpl::GetLibCoreDexLocations() const {
+ std::vector<std::string> modules = GetLibCoreModuleNames();
+ return GetLibCoreDexLocations(modules);
+}
+
std::string CommonArtTestImpl::GetClassPathOption(const char* option,
const std::vector<std::string>& class_path) {
return option + android::base::Join(class_path, ':');