欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android向现有项目中配置NDK,androidndk

来源: javaer 分享于  点击 11254 次 点评:195

Android向现有项目中配置NDK,androidndk


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++ 代码

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} )
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

相关文章

    暂无相关文章
相关栏目:

用户点评