这是完整的警告:
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)
以下是导致它的代码:
public final class LiveWallpaperService extends WallpaperService
{
static AssetManager assetManager;
@Override
public void onCreate()
{
assetManager = getAssets();
JNI.onCreate(assetManager);
}
}
void Java_com_brokenteapot_lwtemplate_JNI_onCreate(JNIEnv* env, jobject assetManager)
{
AAssetManager* pAssetManager = AAssetManager_fromJava(env, assetManager);
}
我真的不知道这些警告意味着什么或者它为什么会崩溃。我几乎完全按照NDK样本的例子。是因为它是一种不同的服务吗?
答案 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 *而有些函数不需要...