JNI NDK (AndroidStudio+CMake )环境集成详解

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进行下载
image

JNI/NDK 环境集成

  • 我们的集成基础是在AndroidStudio中已经存在的Android项目中进行的,如果是一个新的项目AndroidStudio会自动帮我们配置开发环境,只需要我们在创建项目的时候选择,支持C/C++环境开发即可。(例如:AndroidJNI)
    image
  • 我们首先要做就是在build.gradle(app目录下的)进行配置JNI/NDK环境
    image

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))按照下图的四步进行配置。
    image
#设置 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++文件。有对应的文件夹便可)
    image

JNI/NDK 集成结束语

  以上便是采用Androidstudio+CMake进行搭建JNI/NDK开发环境。如若有理解错误的地方,请多多留言指教。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值