- 安装ndk并测试
官网下载ndk,ndk向后兼容,并非版本越新越好,低版本兼容高版本。
- 配置环境变量
ANDROID_NDK_HOME 值为ndk安装目录
如:
D:\android-ndk-r14b-windows-x86_64\android-ndk-r14b
- gradle中ndk配置
android{
ndk {
moduleName "module_count"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
- local.gradle配置添加ndk路径
ndk.dir=D\:\\android-ndk-r14b-windows-x86_64\\android-ndk-r14b
- 修改gradle.proties
android.useDeprecatedNdk=true
- 使用native关键字声明java方法
test.lucky.ndktest.MainActivity 代码片段
public static native method();
static{
System.loadLibrary('libiaryName.so');
}
- 生成头文件
在terminal控制台,切换到test同级目录
javah -jni test.lucky.ndktest.MainActivity
实现native方法
main下创建jni文件夹,写c文件,参考生成的头文件,实现native方法生成so文件
方式一 :make–>project
在app/build/intermediates/ndk/debug/lib生成so文件,拷贝全部so文件到libs下方式二 :ndk-build
若使用ndk-build命令生成so文件,需要手动编写android.mk和application.mk文件,这里给出的是使用第一种方式自动生成的代码。
application.mk主要指定module名称,c 文件路径,头文件路径等。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := module_count
LOCAL_LDFLAGS := -Wl,--build-id
LOCAL_LDLIBS := \
-llog \
-lz \
-lm \
LOCAL_SRC_FILES := \
G:\AndroidSource\WcAutoReply-master\WcAutoReply-master\NdkTask\app\src\main\jni\testC \
LOCAL_C_INCLUDES += G:\AndroidSource\WcAutoReply-master\WcAutoReply-master\NdkTask\app\src\main\jni
LOCAL_C_INCLUDES += G:\AndroidSource\WcAutoReply-master\WcAutoReply-master\NdkTask\app\src\debug\jni
include $(BUILD_SHARED_LIBRARY)
applcation.mk
APP_ABI := armeabi armeabi-v7a