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

本文展示如何在Android程序中使用JNI技术调用C++代码,并通过一个测试demo进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


基于前两篇文章,自己做了一个测试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)


运行效果如下:









 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值