Android Studio 1.5.1 JNI 编程


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 __cplusplus
extern "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-bundle
sdk.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值