MainActivity

package com.example.hello2;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {   private Button btn;   static{   System.loadLibrary("hello2");   }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn=(Button) findViewById(R.id.btn);        btn.setOnClickListener(this);    }    public native void add(int a,int b);    public native DiskInfo getStruct(DiskInfo disk_info);@Overridepublic void onClick(View arg0) {DiskInfo disk_info=new DiskInfo(1,"ZKK");getStruct(disk_info);Log.i("zhouke", "::"+disk_info.name+"::"+disk_info.serial);}    }



package com.example.hello2;public class DiskInfo {public String name; // public int serial; //public DiskInfo(int num, String myname) {serial = num;name = myname;}}



.h 文件

/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_example_hello2_MainActivity */#ifndef _Included_com_example_hello2_MainActivity#define _Included_com_example_hello2_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_hello2_MainActivity * Method:    add * Signature: (II)V */JNIEXPORT void JNICALL Java_com_example_hello2_MainActivity_add  (JNIEnv *, jobject, jint, jint);/* * Class:     com_example_hello2_MainActivity * Method:    getStruct * Signature: (Lcom/example/hello2/DiskInfo;)Lcom/example/hello2/DiskInfo; */JNIEXPORT jobject JNICALL Java_com_example_hello2_MainActivity_getStruct  (JNIEnv *, jobject, jobject);#ifdef __cplusplus}#endif#endif


c文件

#include "com_example_hello2_MainActivity.h"#include #include #include #define LOG_TAG "cTag"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)struct{   char name[256];   int serial;};JNIEXPORT void JNICALL Java_com_example_hello2_MainActivity_add  (JNIEnv * env, jobject  obj, jint x, jint y){int result = x + y;LOGD("result=%d", result);}JNIEXPORT jobject JNICALL Java_com_example_hello2_MainActivity_getStruct  (JNIEnv * env, jobject obj, jobject diskobj){jclass objectClass = (*env)->FindClass(env, "com/example/hello2/DiskInfo");jfieldID name = (*env)->GetFieldID(env, objectClass,"name","Ljava/lang/String;");jfieldID serial=(*env)->GetFieldID(env,objectClass,"serial","I");(*env)->SetObjectField(env,diskobj,name, (*env)->NewStringUTF(env, "hello world"));(*env)->SetIntField(env,diskobj,serial,10);//(*env)->setInreturn diskobj;}



示例2

MainActiviy

package com.example.hello2;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private Button btn;static {System.loadLibrary("hello2");}public class Foo {public int len;public String name;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);}public native void add(int a, int b);public native DiskInfo getStruct(DiskInfo disk_info);private static native int foo(Foo fooObj);@Overridepublic void onClick(View arg0) {/* * DiskInfo disk_info=new DiskInfo(1,"ZKK"); getStruct(disk_info); * Log.i("zhouke", "::"+disk_info.name+"::"+disk_info.serial); */Foo foo = new Foo();        foo(foo);        Log.i("zhouke", foo.name);        Log.i("zhouke", foo.len+"");}}


hello2.c

#include "com_example_hello2_MainActivity.h"#include #include #include #define LOG_TAG "cTag"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)struct {char name[256];int serial;};typedef struct Foo {int len;char name[100];} Foo_t;JNIEXPORT void JNICALL Java_com_example_hello2_MainActivity_add(JNIEnv * env,jobject obj, jint x, jint y) {int result = x + y;LOGD("result=%d", result);}JNIEXPORT jobject JNICALL Java_com_example_hello2_MainActivity_getStruct(JNIEnv * env, jobject obj, jobject diskobj) {jclass objectClass = (*env)->FindClass(env, "com/example/hello2/DiskInfo");jfieldID name = (*env)->GetFieldID(env, objectClass, "name","Ljava/lang/String;");jfieldID serial = (*env)->GetFieldID(env, objectClass, "serial", "I");(*env)->SetObjectField(env, diskobj, name,(*env)->NewStringUTF(env, "hello world"));(*env)->SetIntField(env, diskobj, serial, 10);//(*env)->setInreturn diskobj;}JNIEXPORT jint JNICALL Java_com_example_hello2_MainActivity_foo(JNIEnv *env,jobject obj, jobject fooObj) {Foo_t * bar = malloc(sizeof(Foo_t));jclass clazz;jfieldID fid;//init the bar data of Cstrcpy(bar->name, "Yachun Miao");bar->len = strlen(bar->name);// mapping bar of C to fooclazz = (*env)->GetObjectClass(env, fooObj);if (0 == clazz) {LOGD("0==clazz");return (-1);}fid = (*env)->GetFieldID(env, clazz, "len", "I");//(*env)->SetLongField(env, fooObj, fid, bar->len);(*env)->SetIntField(env,fooObj,fid,bar->len);fid = (*env)->GetFieldID(env, clazz, "name", "Ljava/lang/String;");jstring name = (*env)->NewStringUTF(env, bar->name);(*env)->SetObjectField(env, fooObj, fid, name);free(bar);return 0;}


h 文件

/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_example_hello2_MainActivity */#ifndef _Included_com_example_hello2_MainActivity#define _Included_com_example_hello2_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_hello2_MainActivity * Method:    add * Signature: (II)V */JNIEXPORT void JNICALL Java_com_example_hello2_MainActivity_add  (JNIEnv *, jobject, jint, jint);/* * Class:     com_example_hello2_MainActivity * Method:    getStruct * Signature: (Lcom/example/hello2/DiskInfo;)Lcom/example/hello2/DiskInfo; */JNIEXPORT jobject JNICALL Java_com_example_hello2_MainActivity_getStruct  (JNIEnv *, jobject, jobject);JNIEXPORT jint JNICALL Java_com_example_hello2_MainActivity_foo  (JNIEnv *, jclass, jobject);#ifdef __cplusplus}#endif#endif



.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello2LOCAL_SRC_FILES := hello2.cLOCAL_LDLIBS :=-llog include $(BUILD_SHARED_LIBRARY)







更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)播放音乐文件与视频文件
  4. android ViewPager 使用方法
  5. android eclipse 项目相互引用设置
  6. android Menu 选项菜单示例
  7. Android(安卓)Contacts(一)—— 读取联系人
  8. android 混淆
  9. Android中下载文件的使用

随机推荐

  1. golang中的错误处理方法
  2. golang中的int占几个字节
  3. golang中的bee是指什么
  4. golang反射重要吗
  5. golang查找文件是否存在的方法
  6. golang读锁有什么用
  7. 关于golang中的错误处理机制的详细介绍
  8. golang的优势是什么
  9. 详解golang中的不定参数
  10. golang常量和变量的区别