ndk 调用 java_android ndk 开发,C++ 调用Java的方法

展开全部

Android.mk文件:

LOCAL_SRC_FILES参数用空e68a84e8a2ad62616964757a686964616f31333337626230格隔开

[c-sharp] view plaincopyprint?

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=native

LOCAL_SRC_FILES:=geolo.cpp my_jni.h

include $(BUILD_SHARED_LIBRARY)

2. geolo.cpp

先用FindClass方法找到java类,有点类似java的反射用LoadClass

再用CallObjectMethod方法调用Java类的函数。

[c-sharp] view plaincopyprint?

#include "my_jni.h"

jobject getInstance(JNIEnv* env, jclass obj_class){

jmethodID construction_id = env->GetMethodID(obj_class, "", "()V");

jobject obj = env->NewObject(obj_class, construction_id);

return obj;

}

JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv* env, jobject thiz){

jstring str;

jclass java_class = env->FindClass("com/easepal/geolo/CForCall");

if (java_class == 0){

return env->NewStringUTF("not find class!");

}

jobject java_obj = getInstance(env, java_class);

if (java_obj == 0){

return env->NewStringUTF("not find java OBJ!");

}

jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;");

if(java_method == 0){

return env->NewStringUTF("not find java method!");

}

str = (jstring)env->CallObjectMethod(java_obj, java_method);

return str;

}

3. my_jni.h

[c-sharp] view plaincopyprint?

/* DO NOT EDIT THIS FILE - it is machine generated */

#include 

/* Header for class com_easepal_geolo_CActivityMain */

#ifndef _Included_com_easepal_geolo_CActivityMain

#define _Included_com_easepal_geolo_CActivityMain

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:     com_easepal_geolo_CActivityMain

* Method:    stringFromJNI

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

4. CActivityMain.java

[c-sharp] view plaincopyprint?

package com.easepal.geolo;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class CActivityMain extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

TextView tv = new TextView(this);

tv.setText( stringFromJNI("hello") );

setContentView(tv);

}

static {

System.loadLibrary("native");

}

public native String stringFromJNI(String str);

}

5. CForCall.java

[c-sharp] view plaincopyprint?

package com.easepal.geolo;

public class CForCall{

public CForCall(){};

//public ~CForCall(){};

public String GetJavaString(){

String str;

str = "123456";

return str;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值