summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson <chiuwinson@google.com> 2019-12-04 13:53:07 -0800
committer Winson <chiuwinson@google.com> 2019-12-04 13:54:57 -0800
commit747d3da30eb0c756b45e4976c96196c95c0bc4a9 (patch)
tree2ed030177fec59ab40f1b2b86ba87ad092ce1474
parent4ca4a3639a5ef9e99542afd45a4b75c5f44d26ac (diff)
Fix OverlayableInfo native construction
With the removal of the policy field and the regen of the constructor, the native code is failing. Fixed and moved it to static initialization, following the same pattern as the other files, so that it's caught during boot. Test: manual getOverlayableInfo call at startup boots successfully Change-Id: I6a04a1b314ad851dd9ecba78e3b52b0564d79df6
-rw-r--r--core/jni/android_content_res_ApkAssets.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/core/jni/android_content_res_ApkAssets.cpp b/core/jni/android_content_res_ApkAssets.cpp
index f3a626e1e193..5d13cf82141b 100644
--- a/core/jni/android_content_res_ApkAssets.cpp
+++ b/core/jni/android_content_res_ApkAssets.cpp
@@ -32,6 +32,11 @@ using ::android::base::unique_fd;
namespace android {
+static struct overlayableinfo_offsets_t {
+ jclass classObject;
+ jmethodID constructor;
+} gOverlayableInfoOffsets;
+
static jlong NativeLoad(JNIEnv* env, jclass /*clazz*/, jstring java_path, jboolean system,
jboolean force_shared_lib, jboolean overlay, jboolean for_loader) {
ScopedUtfChars path(env, java_path);
@@ -222,12 +227,9 @@ static jobject NativeGetOverlayableInfo(JNIEnv* env, jclass /*clazz*/, jlong ptr
return 0;
}
- jclass overlayable_class = env->FindClass("android/content/om/OverlayableInfo");
- jmethodID overlayable_constructor = env->GetMethodID(overlayable_class, "<init>",
- "(Ljava/lang/String;Ljava/lang/String;I)V");
return env->NewObject(
- overlayable_class,
- overlayable_constructor,
+ gOverlayableInfoOffsets.classObject,
+ gOverlayableInfoOffsets.constructor,
overlayable_name,
actor_string
);
@@ -267,6 +269,11 @@ static const JNINativeMethod gApkAssetsMethods[] = {
};
int register_android_content_res_ApkAssets(JNIEnv* env) {
+ jclass overlayableInfoClass = FindClassOrDie(env, "android/content/om/OverlayableInfo");
+ gOverlayableInfoOffsets.classObject = MakeGlobalRefOrDie(env, overlayableInfoClass);
+ gOverlayableInfoOffsets.constructor = GetMethodIDOrDie(env, gOverlayableInfoOffsets.classObject,
+ "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
+
return RegisterMethodsOrDie(env, "android/content/res/ApkAssets", gApkAssetsMethods,
arraysize(gApkAssetsMethods));
}