Android(安卓)Studio 1.5.1 JNI 编程
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
更多相关文章
- Handler,MessageQueue,Looper,你所不知道的Asynchronous
- Android(安卓)运行时找不到类:java.lang.NoClassDefFoundError
- 迁移到AndroidX的现实
- Unable to start activity ComponentInfo
- 【Android】用Eclipse和robotium-solo测试Android(安卓)APP前的
- Android(安卓)五大布局
- Android程序反编译
- 颜色选择器【ColorPickerPreference】自定义Preference 对话框
- Android(安卓)WindowManager悬浮窗