2011-08-30 74 views
4

我有一個純粹的本機應用程序,因爲我用的是android_native_app_glue和入口點到我的應用程序是findClass的找不到定製的Java類

android_main(..) 

我也有一個Java助手類類型:

package abc.def.ghi 
public class MyJavaClass extends Activity 
{ 
     public void callback() 
     { 
      Log.v(TAG, "In MyJavaClass"); 
     } 
} 

我想從本地調用「回調」方法。我這樣做:

jclass myClass = env->FindClass("abc/def/ghi/MyJavaClass"); 
if(myClass == NULL) 
    LOGI("myClass null"); 
jmethodID mid = m_pEnv->GetMethodID(myClass, "callback", "()V"); 
if(mid == NULL) 
    LOGI("MID null"); 
m_pEnv->CallVoidMethod(myClass, mid); 

但是,這會導致myClass爲空的消息。我的'env'指針應該沒問題,因爲當我在FindClass中傳遞「android/os/build」時,它會找到它,但找不到我的自定義類。

在LOGCAT中,我看到: 「JNI警告:無法調用Labc/def/ghi;對Ljava/Lang/Class實例進行回調;」

我認爲這意味着我的CallVoidMethod的第一個參數有問題。 我注意到,大多數人與被JAVAH生成的簽名函數內履行CallVoidMethod其他例子,它們使用obj參數在他們CallVoidMethod

JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s) 

不過我,因爲我的應用程序的不能使用此入口點是本地的。

回答

0

但是,這會產生myClass爲空的消息。我的'env'指針應該沒問題,因爲當我在FindClass中傳遞「android/os/build」時,它會找到它,但找不到我的自定義類。

這會建議您的自定義類不在類路徑中。

請注意,當您創建VM時,您可以傳遞選項,包括設置類路徑以包含當前目錄(或任何您喜歡的地方)。