• Android 简单的JNI编程


    1、先是编写包含 native 方法的类库

    package com.miles.libs;
    
    public class Hello {
        
        // 加载本地库
        static {
            System.loadLibrary("Hello");
        }
    
        // 本地库中的方法
        public native String hello();
    }

    2、用javah生成 c/c++ 头文件

    javah -classpath 编译目录 类名

    javah -classpath ./bin/classes com.miles.libs.Hello

    生成的头文件:com_miles_libs_Hello.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_miles_libs_Hello */
    
    #ifndef _Included_com_miles_libs_Hello
    #define _Included_com_miles_libs_Hello
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_miles_libs_Hello
     * Method:    hello
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_miles_libs_Hello_hello
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    PS:此文件在你调用javah命令的目录里面

    3、新建jni文件目录 将头文件拷贝进去,在目录时面编写c/c++文件

    代码文件:com_miles_libs_Hello.c

    #include <jni.h>
    #include "com_miles_libs_HelloLibs.h"
    
    JNIEXPORT jstring JNICALL Java_com_miles_libs_Hello_hello(JNIEnv *env, jobject thiz)
    {
        return (*env)->NewStringUTF(env, "Hello JNI !");
    }

    4、编写 Android.mk文件

    LOCAL_PATH      := $(call my-dir)
    include         $(CLEAR_VARS)
    LOCAL_MODULE    := Hello
    LOCAL_SRC_FILES := com_miles_libs_Hello.c
    include         $(BUILD_SHARED_LIBRARY)

    关于mk文件的编写请自行查阅

    5、编译在配置好 ndk 的环境下进行编译

    我这里用的是  android-ndk-r8c  这个版本编译的,在过高的版本编译会报错,没有深入研究!

  • 相关阅读:
    操作系统六文件管理
    Educational Codeforces Round 38 (Rated for Div. 2) ABCD
    51nod 1100 斜率最大
    51nod 最小方差
    51nod 1065 最小正子段和
    P1280 尼克的任务
    牛客小白月赛2
    Codeforces Round #210 (Div. 1) B 二分+dp
    江西财经大学第一届程序设计竞赛
    51nod 1596 搬货物
  • 原文地址:https://www.cnblogs.com/smile365/p/3978764.html
Copyright © 2020-2023  润新知