JNI简单示例
2016-07-08 17:58
405 查看
Jni 普通java类,该类构造两个本地方法:
显示Jni调用结果的Activity
jni代码如下:
log构造:
Android.mk构造:
package com.jni.jni; public class Jni { public static native String stTst(); static{ System.loadLibrary("JNI"); } public native String tst(); }
显示Jni调用结果的Activity
package com.jni.jni; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { private TextView test; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); test = (TextView) findViewById(R.id.tst); String stTst = Jni.stTst(); Jni j = new Jni(); test.setText("静态方法:" + stTst + "\n非静态方法:" + j.tst()); } }
jni代码如下:
#include <jni.h> #include <stdio.h> #include <string.h> #include "mlog.h" // 定义c方法:对应java的 stTst(); //extern "C" void staticTst(JNIEnv* env, jobject thiz); extern "C" jstring statTst(JNIEnv* env, jobject thiz); extern "C" jstring tst(JNIEnv* env, jobject thiz); //(void*) 指针 JNINativeMethod metheds[] = { // java方法名,函数签名(参数列表)-返回值,java映射成C世界的方法 { "stTst", "()Ljava/lang/String;", (void*) statTst }, { "tst", "()Ljava/lang/String;", (void*) tst } }; jstring statTst(JNIEnv* env, jobject thiz) { return env->NewStringUTF("静态方法返回的string"); } jstring tst(JNIEnv* env, jobject thiz) { return env->NewStringUTF("非静态方法返回的string"); } jint JNI_OnLoad(JavaVM* vm, void* reserved) { jint result = JNI_ERR; JNIEnv* env = NULL; if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { LOGE("-------4---------"); return result; } jclass clazz = env->FindClass("com/jni/jni/Jni"); if (clazz == NULL) { LOGE("-------1---------"); return result; } if (env->RegisterNatives(clazz, metheds, sizeof(metheds) / sizeof(metheds[0])) < 0) { LOGE("-------2---------"); return result; } result = JNI_VERSION_1_4; LOGE("-------3=ok---------"); return result; }
log构造:
#ifndef _MYLOG_H #define _MYLOG_H #include <android/log.h> #define TAG "JULY" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , TAG, __VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN , TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , TAG, __VA_ARGS__) #endif
Android.mk构造:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -lm -llog -landroid // android log 添加该配置: LOCAL_MODULE := JNI LOCAL_SRC_FILES := JNI.cpp include $(BUILD_SHARED_LIBRARY)
相关文章推荐
- mysql学习1-修改提示符以及几个常用命令
- android 方向传感器Sensor或指南针罗盘研究
- python--无界面4*4拼图 游戏
- 静态代理与动态代理
- document的createDocumentFragment()方法
- 使用GitHub新建分支后,checkout 没有新建的分支解决办法
- 什么是淘宝店铺SKU
- 线程之间的通信(thread signal)
- 复习(数据结构):线性表 : c++_标准写法
- Msys2:windows下好用的unix模拟器
- (C语言实现)Unicode与UTF-8互转
- 【ITOO 2】使用ArrayList时的注意事项:去除多余的null值
- OpenCV2 图像旋转偏移问题
- ES6箭头函数(Arrow Functions)
- 前端显示本地图片,压缩上传等
- 多项式分布
- 安卓App禁止使用模拟器
- MyBatis参数传入集合之foreach动态sql
- 【ITOO 2】使用ArrayList时的注意事项:去除多余的null值
- LeetCode-179. Largest Number