以一个简单的例子,写一个最简单的NDK小Demo,理解NDK。
可以参考,对于AS的NDK工程怎么搭建,特别是环境:
使用gradle-experimental插件构建NDK工程
超级简单的JNI实现,无需命令行
超级简单的JNI实现
Demo的用意:在程序中调用C的一个方法。
要点:
- AS的NDK环境搭建
- Java中调用C代码中的方法
- 生产.so文件
环境:几个重要配置
- module中build.gradle 重要的两个配置:ndk、sourceSets.main
ndk {
moduleName "hello"
stl "gnustl_static" // C++ runtime support library,共有九种
abiFilters "armeabi", "armeabi-v7a"
ldLibs "log", "android"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
在gradle.properties中添加:
android.useDeprecatedNdk=true
- 配置Android.mk、写.c 的文件htllo.c、在Java代码中调用C方法
Android.mk文件:
LOCAL_PATH := $(call my-dir)
APP_PLATFORM := android-19
APP_STL := gnustl_shared
include $(CLEAR_VARS)
TARGET_PLATFORM := android-3
LOCAL_MODULE := hello #库
LOCAL_SRC_FILES := hello.c #库的名称
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
hello.c中的代码:注意格式,此次简单了解环境配置和简单调用
#include <string.h>
#include <jni.h>
jstring Java_com_robot_wfc_ndkfirst_MainActivity_getText(JNIEnv* env,jobject obj){
return (*env)->NewStringUTF(env,"hello ndk!");
}
在Java代码中调用C代码中的内容[调用方法]
- 生成.so文件
我们在Java中调用C中的代码,加载动态库,动态库的话需要.so文件。那么生产.so文件。 看看本文顶部的推荐的文章。ndk-build 即可。