您的位置:首页 > 移动开发 > Android开发

android 中 c++调用java代码(3)

2013-12-23 14:47 537 查看
基于前两篇文章,自己做了一个测试demo。

android 程序中代码

package com.example.jniccalljava;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.Context;

import android.os.Bundle;

import android.view.Menu;

public class MainActivity extends Activity {

String contentString;

public static Context mContext;

static {

System.loadLibrary("test");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext = this.getApplicationContext();

callShowMessage();

}

public void showMessage()

{

contentString = getStringFromC();

AlertDialog.Builder builder = new Builder(this);

builder.setTitle(contentString);

builder.setMessage("这是一个C++调用Android的例子");

builder.show();

}

public native String callShowMessage();

public native String getStringFromC();

}

JNI 文件

/*

* test.cpp

*

* Created on: 2013/12/23

* Author: xxxx

*/

#include<string.h>

#include<jni.h>

/*

* Class: com_example_jniccalljava_MainActivity

* Method: callShowMessage

* Signature: ()Ljava/lang/String;

*/

extern "C" {

JNIEXPORT jstring JNICALL Java_com_example_jniccalljava_MainActivity_callShowMessage(

JNIEnv *env, jobject thiz) {

jmethodID notification_method = env->GetMethodID(env->GetObjectClass(thiz),

"showMessage", "()V");

env->CallVoidMethod(thiz, notification_method);

return 0;

}

/*

* Class: com_example_jniccalljava_MainActivity

* Method: getStringFromC

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_example_jniccalljava_MainActivity_getStringFromC(

JNIEnv *env, jobject thiz) {

return env->NewStringUTF("callCMessageBox");

}

}

Android.mk 文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := test

LOCAL_SRC_FILES := ./test.cpp

include $(BUILD_SHARED_LIBRARY)

运行效果如下:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: