zoukankan      html  css  js  c++  java
  • Android调用Jni,非常简单的一个Demo

    step1:创建一个android项目
          Project Name:jnitest
          Build Target: Android 1.6
          Application Name: JNI Test
          Package Name: org.eshock.jnitest
          Create Activity: JNITest



    JNITest.java类代码:
    import android.app.Activity;
    import android.os.Bundle;
    public class JNITest extends Activity {
        public native int plus (int x, int y);//这个是需用c语言实现的函数  
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            int x = plus(1, 2);
            android.util.Log.d("jni", String.valueOf(x));
        }
        
        static {
            System.loadLibrary("mylib");
        }
    }
    



    step2:用C语言实现这个plus函数
               创建<project>/jni/mylib.c: 内容如下
    #include <jni.h>
    #include "JNITest.h"
    #ifdef __cplusplus  //最好有这个,否则被编译器改了函数名字找不到不要怪我
    extern "C" {
    #endif
    
    JNIEXPORT jint JNICALL
    Java_org_eshock_jnitest_JNITest_plus( JNIEnv* env,
                                                      jobject thiz,
                                                      jint x,
                                                      jint y )
    {
        return x + y;
    }
    
    
    #ifdef __cplusplus
    }
    #endif




    step3:随便在某个目录下创建一个文件JNITest.java:内容如下:
         public class JNITest {
            public native int plus (int x, int y);
         }


    在cmd窗口中进入JNITest类所在的文件路径   然后执行命令:javac JNITest.java && javah JNITest
    将生成一个文件JNITest.h,该文件放到jni目录下面,在bin路径下新建一个header文件夹,把JNITest.h文件复制一份到header文件夹下面:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class JNITest */
    
    #ifndef _Included_JNITest
    #define _Included_JNITest
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     JNITest
     * Method:    plus
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_JNITest_plus
      (JNIEnv *, jobject, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif


    step4:在jni包下创建Android.mk文件
          LOCAL_PATH := $(call my-dir)         #LOCAL_PATH表示c源代码文件的位置
    
          include $(CLEAR_VARS)
    
          LOCAL_MODULE    := mylib              #LOCAL_MODULE表示生成的共享库的名称
          LOCAL_SRC_FILES := mylib.c            #LOCAL_SRC_FILES代表c代码的文件
    
          include $(BUILD_SHARED_LIBRARY)


    step5:在jni包下创建Application.mk文件  文件放jni包下
          APP_ABI := armeabi armeabi-v7a mips x86   #定义cpu类型


    step6:把jni文件夹下的文件生成.so文件
          (1) 在cmd窗口进入项目所在目录  e:  进入e盘目录
          (2) cd E:workspacejnitest    //进入项目所在目录

          (3) E:workspacejnitest>ndk-build NDK_MODULE_PATH=jni   //输入命令ndk-build NDK_MODULE_PATH=jni



    注意事项:如果ndk环境变量没有配置,需要配置ndk环境变量

                变量名:NDK_MODULE_PATH
                变量值:C:android-ndk-r9b   (根据安装路径进行调整)

                添加到path路径:  %NDK_MODULE_PATH%;
                如果path路径下没有冒号,自己添加一个

          

    点击下载源码





          




  • 相关阅读:
    路径规划算法总结
    常用滤波器整理
    Debian 9 strech 安装 ROS lunar
    understand 安装笔记
    protobuf 安装与卸载
    maven-surefire-plugin
    spring数据源、数据库连接池
    日志插件总结
    pom.xml常用元素解析
    BeanFactory笔记
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078643.html
Copyright © 2011-2022 走看看