Android Studio 1.5.1 JNI 编程

来源:互联网 发布:淘宝导购怎么做 编辑:程序博客网 时间:2024/06/18 08:30

1. 新建project MyJNI,使用默认设置即可。
2. 新建Test类:右键com.example.myjni新建java类
新建Test步骤
3. 在Test类中编写如下代码,loadLibrary(“test”)中“test”库为NDK库名,之后将会定义。myFun()即为我们自定义的c++函数。

public class Test {    static {        System.loadLibrary("test");    }    native String myFun();}

4. 生成Test类所对应的头文件:打开AS Terminal,切换到$工作目录$\MyJNI\app\src\main\java目录下,键入命令:javah -jni -cp ;, com.example.myjni.Test生成头文件(注意-cp之后是 空格+分号+逗号),经过尝试直接使用“javah -jni com.example.myjni.Test”命令会出现“ Could not find class file for ‘com.example.myjni.Test’.”的错误。此时在java\目录下就可以看到生成的.h文件了。
命令行运行结果
生成的.h内容如下:

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

5. 新建jni文件夹:在main目录上右键,new->folder->jni floder新建jni文件夹
6. 将步骤4中生成的头文件剪切到jni文件夹中,并且新建C++ source file “test.cpp”,编辑代码如下:

#include "com_example_myjni_Test.h"JNIEXPORT jstring Java_com_example_myjni_Test_myFun(JNIEnv *env, jobject obj) {    return env->NewStringUTF("hello, this is myFun output!");}jstring Java_com_example_myjni_Test_myFun(JNIEnv *env, jobject obj);

在编辑完头文件之后,可以build一下,这样便会提示相关变量类型及函数。至此代码部分就搞定了~

7. 配置AS NDK环境:打开AS SDK manager在sdk tools中选择Android NDK点击安装。
选择SDK Manager

点击安装Android NDK

8.左键file,选择project structure。进入sdk location,看到如下界面,选择OK。此时NDK及SDK的目录将会出现在local.properties中。
进入project structure
选择SDK location

local.properties中代码如下所示:

ndk.dir=D\:\\Users\\XXX\\AppData\\Local\\Android\\sdk\\ndk-bundlesdk.dir=D\:\\Users\\XXX\\AppData\\Local\\Android\\sdk

9.向gradle.properties中加入android.useDeprecatedNdk=true
10.向app目录下build.gradle文件中设置库文件名(生成的so文件名),其moduleName “test”就是第3步中System.loadLibrary(“test”);中所填的库名。

apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion "23.0.2"    defaultConfig {        applicationId "com.example.myjni"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionName "1.0"        //添加部分        ndk{            moduleName "test"        }        //添加部分结束    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}

11.至此我们第一个jni程序所需的所有步骤已经完成,点击运行,查看结果。
jni运行结果截图


参考博文:

NDK-JNI实战教程(一) 在Android Studio运行第一个NDK程序: http://yanbober.github.io/2015/02/14/android_studio_jni_1/
2. Android问题集锦转载之三:Javah 常见错误记录-NDK与JNI除错:http://blog.csdn.net/lincyang/article/details/6528477
3. http://developer.android.com/ndk/samples/sample_hellojni.html
4. https://segmentfault.com/a/1190000003999352

0 1
原创粉丝点击