image

背景

  • Android Studio: 3.6.1
  • Win10 X64

项目需要编译JNI原生库接口

步骤

安装配置NDK

  1. 使用SDK Manager下载安装NDK
    在Android Studio打开Setting->Android SDK->SDK Tools,勾选NDKLLDB,点击应用,开始下载安装,完成之后会在SDK的目录下看到ndk和lldb两个文件夹
  2. 添加ndk的路径到环境变量

编译

  1. 参考现有的JNI工程新建一个源码目录jni
  2. 新建或修改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)
  3. 控制台进入jni目录,运行ndk-build进行编译
  4. 运行测试(可选)
    # adb remount
    # adb push ndktest /system/bin/
    # adb shell
    xxx:/ # ndktest

注: 如果需要在Android Studio中调试,可参考下面的Google官方文档,使用Gradle关联CMake或 ndk-build 脚本文件

参考

  1. NDK 入门指南