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. android Menu 选项菜单示例
  2. Android签名文件生成
  3. android获取指定路径下目录文件
  4. Android程序示例
  5. android之PopUpWindow显示Listview(文件列表)
  6. Android 不能生成R文件,gen目录为空
  7. Android 播放音乐文件与视频文件
  8. Android中下载文件的使用

随机推荐

  1. 如何在Android真机上检测是否有Google Ma
  2. Android layout xml总结(2)
  3. 整理 酷炫 Android、Flutter 开源UI框架
  4. Android---Menu
  5. android 2D教程精华集合贴
  6. android各种广播简介
  7. 【转】每个Android开发者都应该了解的资
  8. android设置全屏以及解决设置全屏无效的
  9. android 权限配置和测试环境配置
  10. 【基于Android的ARM汇编语言系列】之六:NE