ネイティブ コードから Java メソッドを呼び出す簡単な例を作成しました。いくつかのオブジェクトの Java メソッドを呼び出していますが、コンストラクターは呼び出されません。
私のJavaクラス:
public class MyJavaNumber
{
private int num;
public MyJavaNumber()
{
num = 7;
Log.d("MyJavaNumber" , "con");
}
public int getNum() {
Log.d("getNum" , "num = " + num);
return num;
}
}
cpp コード :
extern "C"
{
JNIEXPORT jint JNICALL
Java_nativeex_com_example_nativeex_MainActivity_getIntA(JNIEnv *env, jobject obj);
};
JNIEXPORT jint JNICALL
Java_nativeex_com_example_nativeex_MainActivity_getIntA(JNIEnv *env, jobject obj)
{
jclass localClass = env->FindClass("nativeex/com/example/nativeex/MyJavaNumber");
javaClassRef = (jclass) env->NewGlobalRef(localClass);
javaMethodRef = env->GetMethodID(javaClassRef, "getNum", "()I");
jobject javaObjectRef = env->NewObject(javaClassRef, javaMethodRef);
return env->CallIntMethod(javaObjectRef, javaMethodRef);
}
主な活動 :
public class MainActivity extends AppCompatActivity {
public native int getIntA();
static
{
System.loadLibrary("ndktest");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("onCreate", "" + getIntA());
}
}
ログ出力は次のとおりです。
07-13 14:00:01.049 6797-6797/nativeex.com.example.nativeex D/getNum: num = 0
07-13 14:00:01.049 6797-6797/nativeex.com.example.nativeex D/getNum: num = 0
07-13 14:00:01.049 6797-6797/nativeex.com.example.nativeex D/onCreate: 0
オブジェクトのメソッドを呼び出しているのに、コンストラクターが呼び出されないのはどうしてですか?