调用AAssetManager_fromJava时崩溃:"JNI WARNING: instance fieldID 0x571819bc not valid"

Crash when calling AAssetManager_fromJava: "JNI WARNING: instance fieldID 0x571819bc not valid"

本文关键字:fieldID instance 0x571819bc not valid WARNING JNI fromJava 崩溃 AAssetManager 调用      更新时间:2023-10-16

这是完整的警告:

jni警告:实例fieldid 0x571819BC不适合课堂 ljava/lang/class;在 lcom/brokenteapot/lwtemplate/jni; .oncreate :( landroid/content/res/assetmanager;)v (getintfield)

和回溯:

#00  pc 00045dd0  /system/lib/libdvm.so (dvmAbort+75)
#01  pc 00039819  /system/lib/libdvm.so
#02  pc 0003e96b  /system/lib/libdvm.so
#03  pc 000089b9  /system/lib/libandroid.so (AAssetManager_fromJava+88)
#04  pc 00002f54  /data/data/com.brokenteapot.lwtemplate/lib/libLiveWallpaperTemplate.so (Java_com_brokenteapot_lwtemplate_JNI_onCreate+128)

这是引起它的代码:

java

public final class LiveWallpaperService extends WallpaperService 
{
    static AssetManager assetManager;
    @Override
    public void onCreate()
    {
        assetManager = getAssets();
        JNI.onCreate(assetManager);
    }
}

C

void Java_com_brokenteapot_lwtemplate_JNI_onCreate(JNIEnv* env, jobject assetManager)
{
    AAssetManager* pAssetManager = AAssetManager_fromJava(env, assetManager);
}

我真的不知道该警告意味着什么或为什么它崩溃了。我几乎完全按照NDK样本的示例进行了示例。是因为它是一项不同的服务吗?

ugh,我想知道,JNI函数中的方法签名是错误的:

void Java_com_brokenteapot_lwtemplate_JNI_onCreate(JNIEnv* env, jobject assetManager)

应该是

void Java_com_brokenteapot_lwtemplate_JNI_onCreate(JNIEnv* env, void* reserved, jobject assetManager)

我不太了解为什么有些JNI功能需要void*,而有些则不需要...