zoukankan      html  css  js  c++  java
  • JNI基础

    1,JNI基本使用,

      (1)新建一个java类(com.example.jniparsedata.ParseData),专门用于和c进行交互

      (2)在java类中声明方法 public native String StringHellowFromC();

      (3)进入该类所在目录(../src),使用javah 指令,编译该类javah com.example.jniparsedata.ParseData,在Android工程中新建目录jni,将生成的com_example_jniparsedata_ParseData.h文件拷贝到jni目录下

      (4)在jni目录下新建一个hello.c文件,在hello.c中将文件头加上#include <stdio.h>    #include "com_example_jniparsedata_ParseData.h"

      (5)去com_example_jniparsedata_ParseData.h文件把下列方法名拷贝到hello.c文件中,要在该方法中加上参数

          JNIEXPORT jstring JNICALL Java_com_example_jniparsedata_ParseData_StringHellowFromC
              (JNIEnv * env, jobject jobject){
              //方法实现,返回一个字符串给java

            return (*env)->NewStringUTF(env,"hellofromc");
          }

      (6)在jni目录下创建Android.mk文件,内容如下

           LOCAL_PATH := $(call my-dir)

             include $(CLEAR_VARS)
              #文件被编译后对应的类库名称
             LOCAL_MODULE    := hello
             #要编译的文件
             LOCAL_SRC_FILES := hello.c

             include $(BUILD_SHARED_LIBRARY)

      (7)进入到jni 目录下,使用cygwin编译,使用指令ndk-build

      (8)在调用c方法的类中加入静态语句块,引入类库

            static{
                    System.loadLibrary("hello");//在mk文件中写的
                }

      (8)刷新项目,项目目录下多出一个obj目录,可以运行程序了

  • 相关阅读:
    Linux服务器因为Nginx日志access.log文件过大项目无法访问的问题
    【译】StackExchange.Redis 中文文档(二)配置
    【译】StackExchange.Redis 中文文档(一)基础
    Redis应用(一)实时在线用户
    [.NET]Thread与Task的区别
    并查集(UnionFind)技巧总结
    [LeetCode题解]377. 组合总和 Ⅳ
    [LeetCode题解]216. 组合总和 III
    [LeetCode题解]39. 组合总和
    [LeetCode题解]40. 组合总和 II
  • 原文地址:https://www.cnblogs.com/bxf123/p/5020628.html
Copyright © 2011-2022 走看看