1. 新建project MyJNI,使用默认设置即可。
2. 新建Test类:右键com.example.myjni新建java类

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 /* 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
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点击安装。

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

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程序所需的所有步骤已经完成,点击运行,查看结果。


参考博文:

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

更多相关文章

  1. Handler,MessageQueue,Looper,你所不知道的Asynchronous
  2. Android(安卓)运行时找不到类:java.lang.NoClassDefFoundError
  3. 迁移到AndroidX的现实
  4. Unable to start activity ComponentInfo
  5. 【Android】用Eclipse和robotium-solo测试Android(安卓)APP前的
  6. Android(安卓)五大布局
  7. Android程序反编译
  8. 颜色选择器【ColorPickerPreference】自定义Preference 对话框
  9. Android(安卓)WindowManager悬浮窗

随机推荐

  1. Android系统自带样式
  2. Android(安卓)使用 TableLayout 布局拉伸
  3. Android(安卓)EditText各种属性及作用
  4. Android(安卓)textAppearance的属性设置
  5. Android应用开发——系统自带样式Android
  6. Gridview的stretchMode详解附自动宽度
  7. 计算器布局基于GridLayout
  8. Android(安卓)圆角矩形
  9. 《Android实例剖析笔记》系列文章
  10. Android系统启动——7附录1:Android属性系