Preloading public libraries on Runtime::Start()
instead of doing it in native_loader c-tor
ensures that the libraries are loaded only for
binaries that are using Android Runtime, and not
just linking against libandroid_runtime or libart.
Loading public libraries on Runtime::Start()
also helps some apps to save startup time and space
by ensuring that all NDK libraries are loaded
and ready to use.
Bug: http://b/
27245894
Change-Id: I15679a72450f3d18a7dd503d0ae977cebcfd7f52
(cherry picked from commit
7bca74e53d3665bcd243d4e0277f6561c0c80271)
#define ATRACE_TAG ATRACE_TAG_DALVIK
#include <cutils/trace.h>
+#include <nativeloader/native_loader.h>
#include <signal.h>
#include <sys/syscall.h>
#include "base/memory_tool.h"
}
#endif
+ // This line makes sure that all public native libraries
+ // are loaded prior to runtime start; saves app load times
+ // and memory.
+ android::PreloadPublicNativeLibraries();
+
// Restore main thread state to kNative as expected by native code.
Thread* self = Thread::Current();