NDK 入门(二):C 与 JAVA 互相调用 demo

来源:互联网 发布:python getopt usage 编辑:程序博客网 时间:2024/05/16 02:04

编译方法参见前一篇博文。

这里主要写给个demo 展示 C与Java 互相调用的方法,  功能比较没有意义,就是Java 调用 C, C 里面的函数再反过来调用Java。

Java 工程:

package com.ndk;import java.security.PublicKey;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class NdkAdvanceActivity extends Activity {    private TextView mTextView;    private StringBuilder mStringBuilder;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mTextView = (TextView) findViewById(R.id.text);        mStringBuilder = new StringBuilder();        setTestView();            }        public void setTestView() {        mStringBuilder.append(JavaCallC()).append("\n");        mTextView.setText(mStringBuilder.toString());    }            public void cCallJava() {        mStringBuilder.append("C Call Java Success!").append("\n");    }        public native String JavaCallC();    static {        System.loadLibrary("ndk-advance");    }    }


C 代码 :

#include <string.h>#include <jni.h>jstring JNICALL Java_com_ndk_NdkAdvanceActivity_JavaCallC  (JNIEnv *env, jobject obj){    jclass cls;    jmethodID mid;    cls = (*env)->GetObjectClass(env, obj);    mid = (*env)->GetMethodID(env, cls, "cCallJava", "()V");    (*env)->CallVoidMethod(env, obj, mid);    return (*env)->NewStringUTF(env, "Java Call C success!");}

Android.mk :
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := ndk-advanceLOCAL_SRC_FILES := ndk-advance.cinclude $(BUILD_SHARED_LIBRARY)



原创粉丝点击