diff options
| author | 2019-12-04 13:53:07 -0800 | |
|---|---|---|
| committer | 2019-12-04 13:54:57 -0800 | |
| commit | 747d3da30eb0c756b45e4976c96196c95c0bc4a9 (patch) | |
| tree | 2ed030177fec59ab40f1b2b86ba87ad092ce1474 | |
| parent | 4ca4a3639a5ef9e99542afd45a4b75c5f44d26ac (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.cpp | 17 |
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)); } |