JNI/NDK 详解
最近由于项目需求,要进行JNI/NDK开发,令人糟糕是相关的技术文档很多但都是比较老的开发方式。例如Eclipse集成方式、命令集成方式、android.mk文件集成方式。
令人苦恼的是,按照教程去配置环境,总是出现各式各样的错误,使得自己很烦造。因此总结了一套完整的环境配置流程,便于大家进行开发JNI/NDK。该流程重要基于 AndroidStudio和CMake进行JNI/NDK环境集成。
JNI/NDK 环境准备
想必大家的集成环境准备工作应该做好了吧。若没有需要进行下载对应的环境包。
- JDK 8.0 (尽量最新版本)
JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- AndroidStudio (尽量最新版本)
AndroidStudio下载地址:http://www.android-studio.org/
- CMake、NDK、LLDB
这些工具的下载最好的方式便是在AndroidStudio中进行下载(优点:会下载到AndroidStudio对应的包下,并且会在AndroidStudio中进行环境变量的配置)
1. CMake 进行编译C/C++
2. NDK 提供相应的库
3. LLDB 在C/C++的代码中进行debug调试
在AndroidStudio的settings中选择AndroidSDK,选择CMake、NDK、LLDB进行下载
JNI/NDK 环境集成
- 我们的集成基础是在AndroidStudio中已经存在的Android项目中进行的,如果是一个新的项目AndroidStudio会自动帮我们配置开发环境,只需要我们在创建项目的时候选择,支持C/C++环境开发即可。(例如:AndroidJNI)
- 我们首先要做就是在build.gradle(app目录下的)进行配置JNI/NDK环境
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.aynu.androidjni"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//JNI 配置 引入cmake进行编译C/C++
externalNativeBuild {
cmake {
cppFlags ""
abiFilters "armeabi","armeabi-v7a","x86","arm64-v8a"
}
}
}
//JNI 配置 引入cmake的配置文件
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
- 其次创建和配置CMakeLists.txt文件(其中需要我们创建C/C++ 文件,我们在app/src/main文件下创建cpp文件夹,并且创建一个C/C++ 文件 (此处采用C++文件 命名为jni-putils.cpp))按照下图的四步进行配置。
#设置 CMake编译C/C++文件的最小版本
cmake_minimum_required(VERSION 3.4.1)
#设置C/C++资源的配置信息
#三个参数的配置信息
#jni-utils 表示C/C++文件的名称
#SHARED 设置库的一种模式 SHARED / STATIC
#src/main/cpp/jni-utils.cpp C/C++文件的具体路径
add_library(
jni-utils
SHARED
src/main/cpp/jni-utils.cpp
)
# CMake包含了系统库的文件,指定你需要的系统文件
find_library(
log-lib
log
)
# 把Cmake指定的系统库文件,链接到C/C++文件中
target_link_libraries(
jni-utils
${log-lib}
)
- 最后进行编译会在app目录下的build文件–>intermediates文件下–>cmake文件–>debug文件下–>obj文件下–>指定的格式的so库文件(若第一次没有so库文件很正常,因为我们还未编写C/C++文件。有对应的文件夹便可)
JNI/NDK 集成结束语
以上便是采用Androidstudio+CMake进行搭建JNI/NDK开发环境。如若有理解错误的地方,请多多留言指教。
作者:GL_MINE_CSDN 发表于2017/9/6 17:27:20 原文链接
阅读:27 评论:0 查看评论