Android向现有项目中配置NDK

Android向现有项目中配置NDK


Java JNI介绍

  JNI(Java Native Interface)java本地接口,用于java和C、C++交互。需要注意:
- JIN是java调用Native的一种特性。
- JIN属于java与ANdroid毫无关系。

Android NDK介绍

  Android NDK(Native Development Kit)是安卓的一个开发工具包。用于快速开发C或者C++动态库,也就是通过NDK在Android使用JNI实现和C或者C++库的交互。

JNI和NDK的关系

JNI是实现的目的,NDK是在Android中实现JNI的手段,即在Android开发中,通过NDK从而实现JNI功能。

向现有项目添加 C/C++ 代码
  1. 创建新的原生文件:
    • 在src目录下右键new > Directory创建cpp目录,在cpp目录下右键New>C/C++ Source File> 创建C文件。
  2. 创建CMakeLists.txt构建脚本:
    • 在项目模块右键 New>FIlec创建CMakeLists.txt文件,注意文件不能改变。
    • 通过 cmake_minimum_required()设置构建最低的版本号,如果当前版本低于要求,将会报错。
cmake_minimum_required(VERSION 3.4.1)
  • 通过add_library()向CMake添加原文和库
add_library( # 设置库名字
             native-lib

             # 制定创建库的类型
             # SHARED是动态连接的并在 运行时加载
             # STATIC库是链接其它目标时使用的目标文件存档
             # MODULE库是没有链接到其他目标的插件,但可以在运行时使用类似dlopen的功能动态加载
             # 
             SHARED
             # 配置C文件的相对路径相对路径
             src/main/cpp/native-lib.cpp )
  • 为了确保CMake可以在编译的是定位你的标头文件需要配置include_directories()命令:
include_directories(src/main/cpp/include/)
  • CMake命名规范:lib库名称.so
  • 在java代码加载此库时,仍需要使用在CMake脚本中配置的库名字。
static {
    System.loadLibrary(“native-lib”);
}
  • 配置NDKAPI,通过find_library()配置要使用的NDK库。
find_library( 
            # 配置要使用的NKD API库这是一个日志库
              log-lib

              log )
  • 通过target_link_libraries()配置库连接,确保能正常的使用库中的函数,并将预构建库关联到您自己的原生库。
target_link_libraries( 
                      # 自己的库
                       native-lib
                      # 安卓的日志库 
                       ${log-lib} )
  1. 配置指向CMake或ndk-build脚本文件的路径:
    • 右键项目模块(APP模块)旋转Link C++ Project with Gradle在弹出的对话框中选择CMake并配置路径,点击OK即可。
    • 手动配置,在项目模块定的Gradle中,添加externalNativeBuild{}标签,cmake {} 或 ndkBuild {} 对其进行配置。
android {
  ...
  defaultConfig {...}
  buildTypes {...}

  externalNativeBuild {
    cmake {
      path "CMakeLists.txt"
    }
  }
}

指定可选配置,在模块级 build.gradle 文件的 defaultConfig {} 块中配置另一个 externalNativeBuild {} 块,为 CMake 或 ndk-build 指定可选参数和标志。

 defaultConfig {
      ....
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
  • 使用 ndk.abiFilters只能ABI配置
android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      cmake {...}
      // or ndkBuild {...}
    }

    ndk {
      // Specifies the ABI configurations of your native
      // libraries Gradle should build and package with your APK.
      abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
                   'arm64-v8a'
    }
  }
  buildTypes {...}
  externalNativeBuild {...}
}

当然需要在local.properties别走NDK目录:

ndk.dir=D\:\\你的目录\\SDK\\ndk-bundle

参考网站
- Android NDK安装配置
- Android:JNI 与 NDK到底是什么?(含实例教学)
- CMakeLists.txt配置最低版本
- 配置库文件
- CMake文档
- ABI

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值