摘要:配置环境,进行简单开发下载环境变量配置为和配置环境目录保证命令和命令可以直接在命令行使用。使用方法在中使用方法设置的最后效果如下
配置NDK环境,进行简单Native开发
为ndk和jdk配置环境目录保证javah命令和ndk-build命令可以直接在命令行使用。
打开local.properties文件,添加ndk目录:
sdk.dir=C:Users ealheAppDataLocalAndroidSdk ndk.dir=D: dkandroid-ndk-r10c
打开build.gradle,在defaultConfig中添加ndk{}:
android { compileSdkVersion 24 buildToolsVersion "24.0.0" defaultConfig { applicationId "com.example.realhe.myapplication" minSdkVersion 19 targetSdkVersion 24 versionCode 1 versionName "1.0" //配置处如下 ndk{ moduleName "test" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库 } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" //此处为调试配置,可选项 ndk { debuggable = true } } debug { debuggable = true //此处为调试配置,可选项 jniDebuggable = true } } }
保存后可能发生
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin
解决方法为在gradle.properties 中添加一行:
android.useDeprecatedNdk=true
new > Folder >JNI Folder创建jni文件夹,默认目录为
app/src/main/jni
public class Test { static { System.loadLibrary("test");//需要与前面的so文件名保持一致 } public native String get(); public native void set(String str); public native int getToken(int token); }
C:Users ealheAndroidStudioProjectsMyApplication> javah -classpath appuildintermediatesclassesdebug -d appsrcmainjni com.example.realhe.myapplication.Test
上面参数的含义依次是javah命令,classpath路径
.class文件所在的文件夹appuildintermediatesclassesdebug
-d:输出.h到目标文件夹appsrcmainjni (即前面我们制定的默认jni文件夹)
com.example.realhe.myapplication.Test:含有native方法的类
注意这个地方一定要在项目根目录下使用,而不能切换到 Test类的.class文件所在目录直接使用
之后可以看到生成的头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include/* Header for class com_example_realhe_myapplication_Test */ #ifndef _Included_com_example_realhe_myapplication_Test #define _Included_com_example_realhe_myapplication_Test #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_realhe_myapplication_Test * Method: get * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_realhe_myapplication_Test_get (JNIEnv *, jobject); /* * Class: com_example_realhe_myapplication_Test * Method: set * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_example_realhe_myapplication_Test_set (JNIEnv *, jobject, jstring); /* * Class: com_example_realhe_myapplication_Test * Method: getToken * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_example_realhe_myapplication_Test_getToken (JNIEnv *, jobject, jint); #ifdef __cplusplus } #endif #endif
在默认的JNI文件夹中新建一个test.c文件,包含上述头文件并实现其中的方法:
// // Created by realhe on 2016/7/18. // #include "com_example_realhe_myapplication_Test.h" static int count = 0; JNIEXPORT jstring JNICALL Java_com_example_realhe_myapplication_Test_get (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"This is a test for NDK!"); } /* * Class: com_example_realhe_myapplication_Test * Method: set * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_example_realhe_myapplication_Test_set (JNIEnv *env, jobject ibj, jstring jsr){} /* * Class: com_example_realhe_myapplication_Test * Method: getToken * Signature: (I)I */ JNIEXPORT jint JNICALL Java_com_example_realhe_myapplication_Test_getToken (JNIEnv *env, jobject obj, jint jinvar){ return count++; }
注意:此处由于ndk的一个BUG,在编译单个.c文件时会报错:
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process "command "D:ndkandroid-ndk-r10ndk-build.cmd"" finished with non-zero exit value 2
解决方法为在同级目录下增加一个empty.c的空文件即可。
在MainActivity中使用Nativce方法设置TextView的Text:
TextView textView = (TextView)findViewById(R.id.tv_hello); Test test = new Test(); String content = test.get(); for (int i = 0;i<10;i++){ content += (" ("+ test.getToken(1) + ")"); } textView.setText(content);
最后效果如下:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/13098.html
摘要:开发环境配置全称。还提供了一份稳定的功能有限的头文件声明。以前使用做开发是件很麻烦的事情,特别是配置文件的编写。环境要求需要安装最新版的。会自动下载等开发工具。注对应环境变量的设置 Android Studio NDK开发-环境配置 NDK全称Native Development Kit。NDK是一系列Android开发工具的集合,NDK提供了一系列的工具,可以帮助开发者在Androi...
摘要:详细的内容可以查看文件,这个文件可能并没有列出在中我们可以从下面的表格中看出它们对语言特性的支持程度从中我们可以看出很不错,所以一般会配置为。将传递到层解析出现了乱码使用自定义的将转换成的函数,内容如下 Android NDK 和 OpenCV 整合开发 (2) Android NDK 这节主要介绍的内容是Android NDK开发的核心内容和开发总结(包括很多常见问题的解决方案),...
摘要:在项目主目录下的中更改配置增加的配置在中。源代码配置默认情况下,在下使用的是文件。也可以在中指定在分别指定了源代码和源代码的目录。以上的配置完成之后,就可以使用开始开发了。 使用NDK开发有件比较麻烦的事情就是编写Application.mk和Android.mk的,而Android Studio 的插件gradle-experimental就是用来解决这个这个问题的。使用gradle...
摘要:开发最佳入门实践网上一些介绍入门的教程,感觉都不是很完整和全面,也没有告诉初学的同学们一些需要注意的地方。本文所介绍的是在上搭建最佳的开发环境,给使用的开发人员最大的方便。开发最佳入门实践最后在程序中添加上加载库文件的代码。 AndroidStudio NDK开发最佳入门实践 网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学Androi...
摘要:开发最佳入门实践网上一些介绍入门的教程,感觉都不是很完整和全面,也没有告诉初学的同学们一些需要注意的地方。本文所介绍的是在上搭建最佳的开发环境,给使用的开发人员最大的方便。开发最佳入门实践最后在程序中添加上加载库文件的代码。 AndroidStudio NDK开发最佳入门实践 网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学Androi...
阅读 1976·2023-04-26 00:43
阅读 2576·2021-11-22 15:22
阅读 3573·2021-11-11 16:55
阅读 858·2021-11-04 16:06
阅读 1873·2021-10-14 09:42
阅读 1679·2019-08-30 14:12
阅读 876·2019-08-30 14:02
阅读 3259·2019-08-29 17:05