在Android中调用用c/c++库可以实现逼格更高的功能,比如加密等等,毕竟Android底层是用C/C++语言实现的,
整体目录结构如下
建一个Java 类NdkJNiUtils
内容如下
static { System.loadLibrary("YanboberJniLibName"); } public native String getName();
建一个目录JNI Folder(在Android模式的目录下)
将项目切换到project模式
利用命令行工具将NdkJNiUtils.java文件编译成.h文件(本工程中生成com_example_dell_myapplication_NdkJniUtils.h)
编写c文件,新建一个c文件testjni.c
#include "com_example_dell_myapplication_NdkJniUtils.h" JNIEXPORT jstring JNICALL Java_com_example_dell_myapplication_NdkJniUtils_getName (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!"); }
可以发现里面的方法名是有一定规律的Java_(.h文件名)_(调用的方法名,也就是NdkJNiUtils.java里面的getName)
最后很重要的是需要在 gradle.properties中加上下面一句
android.useDeprecatedNdk=true否则有些会报下面的错误
Error:Execution failed for task ':app:compileDebugNdk'.
> Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "$USE_DEPRECATED_NDK=true" in gradle.properties to continue using the current NDK integration.
测试:
运行之后在log中过滤
这与我们写的c文件中一样