(一)NDK安装及环境配置
1.下载相应版本的android ndk
目前我基于android-ndk-r14b-linux-x86_64.zip进行开发
2.解压到Ubuntu下的mnt文件中,可以创建个文件夹为ndk,所以目前ndk的绝对路径为/mnt/ndk
3. 解压命令为: unzip android-ndk-r14b-linux-x86_64.zip
4. 解压完后需配置环境变量
(1) $sudo gedit ~/.bashrc 打开配置文件
(2) 在文件末尾添加以下代码:
export ANDROID_NDK_HOME=/mnt/ndk/android-ndk-r14b
export ANDROID_NDK_ROOT=/mnt/ndk/android-ndk-r14b
export NDK=/mnt/ndk/android-ndk-r14b
export PATH =${PATH}:$NDK
保存信息
(3) source ~/.bashrc 使其修改的文件生效
(4) ndk-build 查看配置环境变量是否成功
//如果在界面上出现
Android NDK:Could not find application project directory!
Android NDK: Please define the NDK_PROJECT_PATH ...
则证明ndk安装成功
(二)NDK中jni操作
1.在项目文件夹中建立jni文件夹
(1)创建include文件夹,可以把C/C++的头文件全放入到include
(2)将所有c/c++文件放到jni文件夹下或者创建src文件夹将c/c++文件放入其中
(3)在jni文件夹下创建Android.mk,Application.mk两个文件
(4)在Android.mk中填写文件信息格式如下
#符号为注释符合
LOCAL_PATH := $(call my-dir) #当前路径
include $(CLEAR_VARS)
LOCAL_MODULE :=libencrypt_m #加载第三方动态库的名称
LOCAL_SRC_FILES := firsts/libencrypt_m.so #指定第三方库的具体路径
LOCAL_EXPORT_C_INCLUDES := include/openssl #加载第三方库的头文件路径
include $(PREBUILT_SHARED_LIBRARY) #加载第三方库为动态库 SHARED为动态库
include $(CLEAR_VARS)
LOCAL_MODULE := libiconv #加载第三方静态库的名称
LOCAL_SRC_FILES := firsts/libiconv.a #指定第三方静态库的具体路径
LOCAL_EXPORT_C_INCLUDES :=include/iconve #加载第三方静态库的头文件路径
include $(PREBUILT_STATIC_LIBRARY) #加载第三方库为静态库 STATIC为静态库
#当前想要设置的模块
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \ #设置头文件路径
include \
include/openssl \
include/iconve \
include/libxml
LOCAL_SRC_FILES := ghasd.cpp \ #加载需要编译的c/c++文件
LOCAL_MODULE := Sellib #生成库的文件名,自己定义
LOCAL_STATIC_LIBRARIES :=libiconv #关联第三方静态库,
LOCAL_SHARED_LIBRARIES := libencrypt_m libPDI_CPP #关联第三方动态库
LOCAL_LDLIBS += -lz -llog -lm -ldl #关联系统自带的系统库,log是android打印的日志关联的库
LOCAL_CPPFLAGS += -std=c++11 #设置c++编译标准为c++11
include $(BUILD_SHARED_LIBRARY) #构建的库为动态库,如果构建的库为静态库则为BUILD_STATIC_LIBRARY
(5)在Application.mk中填写文件信息格式如下
APP_ABI := armeabi-v7a x86 #指定生成库的版本armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64
#APP_ABI:= all 仅能生成当前版本支持的ABI信息库文件,如果需要生成最新的必须更新相应的NDK版本。
APP_STL := gnustl_static #c++编译支持,如果不设置STL模板将会因使用c++ string的STL模板报错
APP_CFLAGS += -Wno-error=format-security #设置格式忽略些,设置为安全状态
APP_PLATFORM: = android-14 #设置android编译的平台
(6)在命令行输入ndk-build则进行编译
(7)编译完后将会在jni同层生成libs,obj文件,libs中包含了生成的动态库信息,obj属于中间日志信息,表示编译时添加的信息