使用NDK编译原生库或可执行应用程序
背景
- Android Studio: 3.6.1
- Win10 X64
项目需要编译JNI原生库接口
步骤
安装配置NDK
- 使用SDK Manager下载安装NDK
在Android Studio打开Setting->Android SDK->SDK Tools,勾选NDK
和LLDB
,点击应用,开始下载安装,完成之后会在SDK的目录下看到ndk和lldb两个文件夹 - 添加
ndk
的路径到环境变量
编译
- 参考现有的JNI工程新建一个源码目录jni
- 新建或修改jni目录中的
Android.mk
,Application.mk
文件
Application.mk
文件参考:# "armeabi-v7a" , "x86" , "arm64-v8a" , "x86_64" , "all" #APP_ABI := all APP_ABI := armeabi-v7a arm64-v8a # Workaround for MIPS toolchain linker being unable to find liblog dependency # of shared object in NDK versions at least up to r9. APP_PLATFORM := android-19 #APP_CFLAGS -std=c99 #APP_CPPFLAGS -std=c++11 # stlport_static; stlport_shared; # gnustl_static: 使用 GNU libstdc++ 作为静态库 APP_STL = gnustl_static APP_LDFLAGS += -llog -pie -fPIE APP_CFLAGS += -pie -fPIE -lpthread -lutils -lcutils APP_CPPFLAGS += -std=c++11 # debug release APP_OPTIM := debug
Android.mk
文件参考:LOCAL_PATH:= $(call my-dir) APP_LIBMIDAVSERVER_V3 := $(LOCAL_PATH)/.. #print log $(warning 'current path: ', $(APP_LIBMIDAVSERVER_V3)) ############## include $(CLEAR_VARS) # 添加源文件 LOCAL_SRC_FILES := \ $(APP_LIBMIDAVSERVER_V3)/src/test.cpp #添加头文件所在目录 LOCAL_C_INCLUDES += \ $(APP_LIBMIDAVSERVER_V3)/.. #导出动态库的头文件 LOCAL_EXPORT_C_INCLUDES := \ $(APP_LIBMIDAVSERVER_V3)/include #链接编译选项 LOCAL_CFLAGS := -Wno-error=format-security -Wall -O2 -fPIC -DLINUX -DCRYPTO -DUSE_POLARSSL -DDEBUG #链接依赖库 # LOCAL_LDFLAGS += -L$(APP_LIBMIDAVSERVER_V3)/lib/$(TARGET_ARCH_ABI) -lavformat -lpolarssl -lJson LOCAL_MODULE := ndktest LOCAL_MODULE_PATH := $(APP_LIBMIDAVSERVER_V3)/bin # "PREBUILT_SHARED_LIBRARY" "BUILD_EXECUTABLE" "BUILD_SHARED_LIBRARY" include $(BUILD_EXECUTABLE)
- 控制台进入
jni
目录,运行ndk-build
进行编译 - 运行测试(可选)
# adb remount # adb push ndktest /system/bin/ # adb shell xxx:/ # ndktest
注: 如果需要在Android Studio中调试,可参考下面的Google官方文档,使用Gradle关联CMake或 ndk-build 脚本文件
参考
评论