码迷,mamicode.com
首页 > 其他好文 > 详细

JNI简单示例

时间:2016-07-08 19:35:44      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

Jni 普通java类,该类构造两个本地方法:

1 package com.jni.jni;
2 
3 public class Jni {
4     public static native String stTst();
5     static{
6         System.loadLibrary("JNI");
7     }
8     public native String tst();
9 }

显示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代码如下:

 1 #include <jni.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include "mlog.h"
 5 // 定义c方法:对应java的 stTst();
 6 //extern "C" void staticTst(JNIEnv* env, jobject thiz);
 7 extern "C" jstring statTst(JNIEnv* env, jobject thiz);
 8 extern "C" jstring tst(JNIEnv* env, jobject thiz);
 9 //(void*) 指针
10 JNINativeMethod metheds[] = {
11 // java方法名,函数签名(参数列表)-返回值,java映射成C世界的方法
12         { "stTst", "()Ljava/lang/String;", (void*) statTst }, { "tst",
13                 "()Ljava/lang/String;", (void*) tst } };
14 jstring statTst(JNIEnv* env, jobject thiz) {
15     return env->NewStringUTF("静态方法返回的string");
16 }
17 jstring tst(JNIEnv* env, jobject thiz) {
18     return env->NewStringUTF("非静态方法返回的string");
19 }
20 jint JNI_OnLoad(JavaVM* vm, void* reserved) {
21     jint result = JNI_ERR;
22     JNIEnv* env = NULL;
23     if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
24         LOGE("-------4---------");
25         return result;
26     }
27     jclass clazz = env->FindClass("com/jni/jni/Jni");
28     if (clazz == NULL) {
29         LOGE("-------1---------");
30         return result;
31     }
32     if (env->RegisterNatives(clazz, metheds,
33             sizeof(metheds) / sizeof(metheds[0])) < 0) {
34         LOGE("-------2---------");
35         return result;
36     }
37     result = JNI_VERSION_1_4;
38     LOGE("-------3=ok---------");
39     return result;
40 }

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构造:

1 LOCAL_PATH := $(call my-dir)
2 
3 include $(CLEAR_VARS)
4 LOCAL_LDLIBS    := -lm -llog -landroid // android log 添加该配置:
5 LOCAL_MODULE    := JNI
6 LOCAL_SRC_FILES := JNI.cpp
7 
8 include $(BUILD_SHARED_LIBRARY)

 

JNI简单示例

标签:

原文地址:http://www.cnblogs.com/july2015/p/5654225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!