Commit 5cd0b7a5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Make linker_namespaces test run on a device without webview"

parents 8e776ad7 54fa61c5
......@@ -45,28 +45,6 @@ static const std::string kSystemLibraryPath = "/system/lib";
static const std::string kVendorLibraryPath = "/vendor/lib";
#endif
static std::unordered_set<std::string> kSystemPublicLibraries = {
"libandroid.so",
"libc.so",
"libdl.so",
"libEGL.so",
"libGLESv1_CM.so",
"libGLESv2.so",
"libGLESv3.so",
"libicui18n.so",
"libicuuc.so",
"libjnigraphics.so",
"liblog.so",
"libmediandk.so",
"libm.so",
"libOpenMAXAL.so",
"libOpenSLES.so",
"libRS.so",
"libstdc++.so",
"libwebviewchromium_plat_support.so",
"libz.so"
};
// This is not complete list - just a small subset
// of the libraries that should reside in /system/lib
// (in addition to kSystemPublicLibraries)
......@@ -200,13 +178,13 @@ static bool check_libs(const std::string& public_library_path,
return true;
}
static void load_vendor_libraries(JNIEnv* env,
jobjectArray java_vendor_public_libraries,
std::unordered_set<std::string>* libraries) {
size_t size = env->GetArrayLength(java_vendor_public_libraries);
static void jobject_array_to_set(JNIEnv* env,
jobjectArray java_libraries_array,
std::unordered_set<std::string>* libraries) {
size_t size = env->GetArrayLength(java_libraries_array);
for (size_t i = 0; i<size; ++i) {
ScopedLocalRef<jstring> java_soname(
env, (jstring) env->GetObjectArrayElement(java_vendor_public_libraries, i));
env, (jstring) env->GetObjectArrayElement(java_libraries_array, i));
ScopedUtfChars soname(env, java_soname.get());
libraries->insert(soname.c_str());
......@@ -217,14 +195,17 @@ extern "C" JNIEXPORT jstring JNICALL
Java_android_jni_cts_LinkerNamespacesHelper_runAccessibilityTestImpl(
JNIEnv* env,
jclass clazz __attribute__((unused)),
jobjectArray java_system_public_libraries,
jobjectArray java_vendor_public_libraries) {
std::string error;
std::unordered_set<std::string> vendor_public_libraries;
std::unordered_set<std::string> system_public_libraries;
std::unordered_set<std::string> empty_set;
load_vendor_libraries(env, java_vendor_public_libraries, &vendor_public_libraries);
jobject_array_to_set(env, java_vendor_public_libraries, &vendor_public_libraries);
jobject_array_to_set(env, java_system_public_libraries, &system_public_libraries);
if (!check_libs(kSystemLibraryPath, kSystemPublicLibraries, kSystemLibraries, &error) ||
if (!check_libs(kSystemLibraryPath, system_public_libraries, kSystemLibraries, &error) ||
!check_libs(kVendorLibraryPath, vendor_public_libraries, empty_set, &error)) {
return env->NewStringUTF(error.c_str());
}
......
......@@ -16,17 +16,45 @@
package android.jni.cts;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.test.InstrumentationRegistry;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class LinkerNamespacesHelper {
private final static String VENDOR_CONFIG_FILE = "/vendor/etc/public.libraries.txt";
private final static String[] PUBLIC_SYSTEM_LIBRARIES = {
"libandroid.so",
"libc.so",
"libdl.so",
"libEGL.so",
"libGLESv1_CM.so",
"libGLESv2.so",
"libGLESv3.so",
"libicui18n.so",
"libicuuc.so",
"libjnigraphics.so",
"liblog.so",
"libmediandk.so",
"libm.so",
"libOpenMAXAL.so",
"libOpenSLES.so",
"libRS.so",
"libstdc++.so",
"libz.so"
};
private final static String WEBVIEW_PLAT_SUPPORT_LIB = "libwebviewchromium_plat_support.so";
public static String runAccessibilityTest() throws IOException {
List<String> libs = new ArrayList<>();
List<String> vendorLibs = new ArrayList<>();
File file = new File(VENDOR_CONFIG_FILE);
if (file.exists()) {
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
......@@ -36,11 +64,23 @@ class LinkerNamespacesHelper {
if (line.isEmpty() || line.startsWith("#")) {
continue;
}
libs.add(line);
vendorLibs.add(line);
}
}
}
return runAccessibilityTestImpl(libs.toArray(new String[libs.size()]));
List<String> systemLibs = new ArrayList<>();
Collections.addAll(systemLibs, PUBLIC_SYSTEM_LIBRARIES);
if (InstrumentationRegistry.getContext().getPackageManager().
hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) {
systemLibs.add(WEBVIEW_PLAT_SUPPORT_LIB);
}
return runAccessibilityTestImpl(systemLibs.toArray(new String[systemLibs.size()]),
vendorLibs.toArray(new String[vendorLibs.size()]));
}
private static native String runAccessibilityTestImpl(String[] publicVendorLibs);
private static native String runAccessibilityTestImpl(String[] publicSystemLibs,
String[] publicVendorLibs);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment