内容へ移動
ユーザ用ツール
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
現在位置:
home
»
wiki
»
Android
»
Tips
»
002 CからJavaの関数を実行する
トレース:
wiki:android:tips:002
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== 002 CからJavaの関数を実行する ====== ===== 概要 ===== Androidには、NDKを利用してC/C++コード側からJavaのコードを呼ぶ機能が備わっています。 CallVoidMethod()やCallIntMethod() などがそれに当たります。 ==== Javaのコード ==== <code java> package com.hoge.hoge; public class Sample { public void Hello() { Log.v( "Hoge", "call Hello" ); } public void SetParam( int _param ) { Log.v( "Hoge", "call SetParam _param =" + _param ); } public void SetParam2( int _param, int _param2 ) { Log.v( "Hoge", "call SetParam2 _param =" + _param + "_param2=" + _param2 ); } public int GetParam() { Log.v( "Hoge", "call GetParam" ); } public int GetParam2( int _param ) { Log.v( "Hoge", "call GetParam2 = " + _param ); } } </code> ==== Cのコード ==== <code c> JavaVM * g_JVM = NULL; extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env; if( vm->GetEnv( reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK ) { return -1; } g_JVM = vm; } void Func() { jclass clazz = env->FindClass("com.hoge.hoge.Sample"); jclass sampleClass = (jclass)env->NewGlobalRef( clazz ); if( sampleClass == 0 ) { return; } env->DeleteLocalRef( clazz ); JNIEnv *env = NULL; int status = g_JVM->GetEnv((void **)&env, JNI_VERSION_1_6); if(status < 0) { status = g_JVM->AttachCurrentThread(&env, NULL); if(status < 0) { printf( 0, "error Func.\n" ); return; } } // -------------------------------------- // public void Hello() // -------------------------------------- { jmethodID methodID = env->GetMethodID( sampleClass, "Hello", "()V" ); env->CallVoidMethod( g_androidApp->activity->clazz, methodID ); } // -------------------------------------- // public void SetParam( int _param ) // -------------------------------------- { int param = 100; jmethodID methodID = env->GetMethodID( sampleClass, "SetParam", "(I)V" ); env->CallVoidMethod( g_androidApp->activity->clazz, methodID, param ); } // -------------------------------------- // public void SetParam( int _param ) // -------------------------------------- { int param = 100; int param2 = 200; jmethodID methodID = env->GetMethodID( sampleClass, "SetParam2", "(II)V" ); env->CallVoidMethod( g_androidApp->activity->clazz, methodID, param, param2 ); } // -------------------------------------- // public int GetParam() // -------------------------------------- { jmethodID methodID = env->GetMethodID( sampleClass, "GetParam", "()I" ); int ret = env->CallIntMethod( g_androidApp->activity->clazz, methodID ); } // -------------------------------------- // public int GetParam2() // -------------------------------------- { int param = 100; jmethodID methodID = env->GetMethodID( sampleClass, "GetParam2", "(I)I" ); int ret = env->CallIntMethod( g_androidApp->activity->clazz, methodID, param ); } } </code>
Permalink
wiki/android/tips/002.txt
· 最終更新: 2014/11/06 08:34 (外部編集)
ページ用ツール
ログイン
文書の表示
文書の先頭へ
印刷
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
oeffentlich