调用AAssetManager_fromJava时崩溃:“JNI警告:实例fieldID 0x571819bc无效”

时间:2012-11-01 20:13:00

标签: android c++

这是完整的警告:

  

JNI警告:实例fieldID 0x571819bc对类无效   Ljava /郎/类;在   LCOM / brokenteapot / lwtemplate / JNI; .onCreate:(Landroid /内容/ 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样本的例子。是因为它是一种不同的服务吗?

1 个答案:

答案 0 :(得分:0)

呃,我明白了,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 *而有些函数不需要...