diff options
author | Dmitriy Ivanov <dimitry@google.com> | 2015-06-05 13:01:52 -0700 |
---|---|---|
committer | Dmitriy Ivanov <dimitry@google.com> | 2015-06-09 10:43:14 -0700 |
commit | 8117250a0bb57bf2aa6b1ab0c7d4d4a7dd402c08 (patch) | |
tree | 4c7e804f5a2fbef8b9aa0cb79b7ef70dda78b923 | |
parent | 21cb657159b3e93cc888685ade83f8fc519290be (diff) | |
download | art-8117250a0bb57bf2aa6b1ab0c7d4d4a7dd402c08.zip art-8117250a0bb57bf2aa6b1ab0c7d4d4a7dd402c08.tar.gz art-8117250a0bb57bf2aa6b1ab0c7d4d4a7dd402c08.tar.bz2 |
Let classloader provide correct LD_LIBRARY_PATH
Rely on BaseDexClassLoader to provide correct LD_LIBRARY_PATH
Bug: http://b/21647354
Bug: http://b/21667767
Bug: http://b/8076853
Change-Id: I8c690a2578d5de43be9da964fa5a4c0246aa6eec
-rw-r--r-- | runtime/native/java_lang_Runtime.cc | 39 | ||||
-rw-r--r-- | runtime/well_known_classes.cc | 2 |
2 files changed, 9 insertions, 32 deletions
diff --git a/runtime/native/java_lang_Runtime.cc b/runtime/native/java_lang_Runtime.cc index bd043a8..abac815 100644 --- a/runtime/native/java_lang_Runtime.cc +++ b/runtime/native/java_lang_Runtime.cc @@ -52,52 +52,29 @@ NO_RETURN static void Runtime_nativeExit(JNIEnv*, jclass, jint status) { exit(status); } -static void SetLdLibraryPath(JNIEnv* env, jstring javaLdLibraryPathJstr, jstring javaDexPathJstr) { +static void SetLdLibraryPath(JNIEnv* env, jstring javaLdLibraryPathJstr) { #ifdef HAVE_ANDROID_OS - std::stringstream ss; if (javaLdLibraryPathJstr != nullptr) { - ScopedUtfChars javaLdLibraryPath(env, javaLdLibraryPathJstr); - if (javaLdLibraryPath.c_str() != nullptr) { - ss << javaLdLibraryPath.c_str(); + ScopedUtfChars ldLibraryPath(env, javaLdLibraryPathJstr); + if (ldLibraryPath.c_str() != nullptr) { + android_update_LD_LIBRARY_PATH(ldLibraryPath.c_str()); } } - if (javaDexPathJstr != nullptr) { - ScopedUtfChars javaDexPath(env, javaDexPathJstr); - if (javaDexPath.c_str() != nullptr) { - std::vector<std::string> dexPathVector; - Split(javaDexPath.c_str(), ':', &dexPathVector); - - for (auto abi : art::Runtime::Current()->GetCpuAbilist()) { - for (auto zip_path : dexPathVector) { - // Native libraries live under lib/<abi>/ inside .apk file. - ss << ":" << zip_path << "!" << "lib/" << abi; - } - } - } - } - - std::string ldLibraryPathStr = ss.str(); - const char* ldLibraryPath = ldLibraryPathStr.c_str(); - if (*ldLibraryPath == ':') { - ++ldLibraryPath; - } - - android_update_LD_LIBRARY_PATH(ldLibraryPath); #else LOG(WARNING) << "android_update_LD_LIBRARY_PATH not found; .so dependencies will not work!"; - UNUSED(javaLdLibraryPathJstr, javaDexPathJstr, env); + UNUSED(javaLdLibraryPathJstr, env); #endif } static jstring Runtime_nativeLoad(JNIEnv* env, jclass, jstring javaFilename, jobject javaLoader, - jstring javaLdLibraryPathJstr, jstring javaDexPathJstr) { + jstring javaLdLibraryPathJstr) { ScopedUtfChars filename(env, javaFilename); if (filename.c_str() == nullptr) { return nullptr; } - SetLdLibraryPath(env, javaLdLibraryPathJstr, javaDexPathJstr); + SetLdLibraryPath(env, javaLdLibraryPathJstr); std::string error_msg; { @@ -130,7 +107,7 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(Runtime, gc, "()V"), NATIVE_METHOD(Runtime, maxMemory, "!()J"), NATIVE_METHOD(Runtime, nativeExit, "(I)V"), - NATIVE_METHOD(Runtime, nativeLoad, "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"), + NATIVE_METHOD(Runtime, nativeLoad, "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/String;"), NATIVE_METHOD(Runtime, totalMemory, "!()J"), }; diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc index e7857a0..0c7cce9 100644 --- a/runtime/well_known_classes.cc +++ b/runtime/well_known_classes.cc @@ -369,7 +369,7 @@ void WellKnownClasses::Init(JNIEnv* env) { void WellKnownClasses::LateInit(JNIEnv* env) { ScopedLocalRef<jclass> java_lang_Runtime(env, env->FindClass("java/lang/Runtime")); - java_lang_Runtime_nativeLoad = CacheMethod(env, java_lang_Runtime.get(), true, "nativeLoad", "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"); + java_lang_Runtime_nativeLoad = CacheMethod(env, java_lang_Runtime.get(), true, "nativeLoad", "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/String;"); } mirror::Class* WellKnownClasses::ToClass(jclass global_jclass) { |