【发布时间】:2014-06-25 03:35:47
【问题描述】:
我有一个 MainActivity 定义如下:
public class MainActivity extends Activity
{
public static ContextActivity g_ContextActivity;
在我的 JNI OnLoad() 中,我成功获得了对 MainActivity 类的引用,但我无法获得对 g_ContextActivity 静态成员的引用。我得到错误:
java.lang.NoSuchFieldError: 类 Lcom/example/gt/MainActivity 中没有 name='g_ContextActivity' signature='com/example/gt/ContextActivity' 的静态字段;
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *javaVm, void *reserved)
{
g_JavaVM = javaVm;
JNIEnv *pEnv = NULL;
if( g_JavaVM->GetEnv( (void **)&pEnv, JNI_VERSION_1_6) != JNI_OK )
{
return -1;
}
jclass clsMainActivity = pEnv->FindClass( "com/example/gt/MainActivity" );
LogDebugf( "PDS> (ONLOAD) clsMainActivity: %08lx\n", (long) clsMainActivity );
if( JNIException( pEnv ) )
return -1;
if( g_MainActivityClass )
pEnv->DeleteGlobalRef( g_MainActivityClass );
g_MainActivityClass = (jclass) pEnv->NewGlobalRef( clsMainActivity );
jfieldID fidContextActivity = pEnv->GetStaticFieldID( g_MainActivityClass, "g_ContextActivity", "com/example/gt/ContextActivity" );
if( JNIException( pEnv ) )
return -1;
LogDebugf( "PDS> (ONLOAD) g_ContextActivity ID: %08lx\n", (long) fidContextActivity );
我做错了什么?
编辑:如果我向 MainActivity 添加一个“静态 int”,那么我可以发现它没有问题。所以问题似乎出在签名上??
【问题讨论】:
标签: android android-ndk java-native-interface static-members