2020最新as项目中添加jni---------静态注册

第一步:静态代码块 导入so库

static {
    System.loadLibrary("native-lib");
}

第二步:写外部函数

public native String getString();  //native代表c\c++实现

第三步:利用javah生成函数头

进入到工程的src/main/java目录中
执行javah -jni com.example.myapplication.MainActivity(需要java配置好环境)

第四步:创建新的 C/C++ 源代码文件

要将新的 C/C++ 源代码文件添加到现有项目,请按以下步骤操作:

如果您的应用的主源代码文件集内还没有 cpp/ 目录,请按如下所示的方法创建一个:
从 IDE 的左侧打开 Project 窗格,然后从下拉菜单中选择 Project 视图。
转到 your-module > src,右键点击 main 目录,然后依次选择 New > Directory。
输入 cpp 作为目录名称,然后点击 OK。
右键点击 cpp/ 目录,然后依次选择 New > C/C++ Source File。
为您的源代码文件输入一个名称,例如 native-lib。
从 Type 下拉菜单中,为您的源代码文件选择文件扩展名,例如 .cpp。
您可以向此下拉菜单添加其他文件类型(例如 .cxx 或 .hxx),只需点击 Edit File Types 图标  即可。在弹出的 C/C++ 对话框中,从 Source Extension 和 Header Extension 下拉菜单中选择另一个文件扩展名,然后点击 OK。
如果您还想要创建头文件,请选中 Create an associated header 复选框。
点击 OK。

第五步:配置 CMake

1、从 IDE 的左侧打开 Project 窗格,然后从下拉菜单中选择 Project 视图。
2、右键点击 your-module 的根目录,然后依次选择 New > File。
3、输入“CMakeLists.txt”作为文件名,然后点击 OK。
现在,您可以通过添加 CMake 命令来配置您的构建脚本。要指示 CMake 根据原生源代码创建原生库,请向您的构建脚本添加 cmake_minimum_required() 和 add_library() 命令:


    cmake_minimum_required(VERSION 3.4.1)

    add_library( # Specifies the name of the library.
                 native-lib

                 # Sets the library as a shared library.
                 SHARED

                 # Provides a relative path to your source file(s).
                 src/main/cpp/native-lib.cpp )

在使用 add_library() 向 CMake 构建脚本添加源代码文件或库时,Android Studio 还会在您同步项目后在 Project 视图中显示相关的头文件。不过,为了让 CMake 能够在编译时找到头文件,您需要向 CMake 构建脚本添加 include_directories() 命令,并指定头文件的路径:

 add_library(...)

    # Specifies a path to native header files.
    include_directories(src/main/cpp/include/)

Android NDK 提供了一套您可能会觉得非常实用的原生 API 和库。通过在项目的 CMakeLists.txt 脚本文件中包含 NDK 库,您可以使用其中任何 API。

Android 平台上已存在预构建的 NDK 库,因此您无需构建它们或将它们打包到 APK 中。由于这些 NDK 库已位于 CMake 搜索路径中,因此您甚至无需指定本地安装的 NDK 库的位置,您只需为 CMake 提供您想要使用的库的名称,并将其与您自己的原生库相关联即可。

向 CMake 构建脚本添加 find_library() 命令以找到 NDK 库并将其路径存储为一个变量。您可以使用此变量在构建脚本的其他部分引用 NDK 库。以下示例可以找到 Android 专有的日志支持库,并会将其路径存储在 log-lib 中:

find_library( # Defines the name of the path variable that stores the
                  # location of the NDK library.
                  log-lib

                  # Specifies the name of the NDK library that
                  # CMake needs to locate.
                  log )

为了让您的原生库能够调用 log 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联这些库:

 find_library(...)

    # Links your native library against one or more other native libraries.
    target_link_libraries( # Specifies the target library.
                           native-lib

                           # Links the log library to the target library.
                           ${log-lib} )
    

例:

 cmake_minimum_required(VERSION 3.4.1)

    add_library( # Specifies the name of the library.
                 native-lib

                 # Sets the library as a shared library.
                 SHARED

                 # Provides a relative path to your source file(s).
                 src/main/cpp/native-lib.cpp )
    

    # Specifies a path to native header files.
    include_directories(src/main/cpp/include/)
find_library( # Defines the name of the path variable that stores the
                  # location of the NDK library.
                  log-lib

                  # Specifies the name of the NDK library that
                  # CMake needs to locate.
                  log )
    # Links your native library against one or more other native libraries.
    target_link_libraries( # Specifies the target library.
                           native-lib

                           # Links the log library to the target library.
                           ${log-lib} )
                  

第六步:将 Gradle 关联到您的原生库

自动配置:

  1. 1. 从 IDE 左侧打开 **Project** 窗格,然后选择 **Android** 视图。
    
    2. 右键点击您想要关联到原生库的模块(例如 **app** 模块),然后从菜单中选择 **Link C++ Project with Gradle**。您会看到一个类似于图 4 所示的对话框。
    
    3. 从下拉菜单中,选择 CMake或ndk-build。
    
       a.如果您选择 **CMake**,请使用 **Project Path** 旁的字段为您的外部 CMake 项目指定 `CMakeLists.txt` 脚本文件。
    
       b.如果您选择 **ndk-build**,请使用 **Project Path** 旁的字段为您的外部 ndk-build 项目指定 [`Android.mk`](https://developer.android.com/ndk/guides/android_mk) 脚本文件。如果 [`Application.mk`](https://developer.android.com/ndk/guides/application_mk) 文件与您的 `Android.mk` 文件位于同一目录下,Android Studio 也会包含此文件.
    
       4.点击ok
    

    手动配置

      要手动配置 Gradle 以关联到您的原生库,您需要将 externalNativeBuild 块添加到模块级 build.gradle 文件中,并使用 cmake 或 ndkBuild 块对其进行配置:
      android {
          ...
          defaultConfig {...}
          buildTypes {...}
    
          // Encapsulates your external native build configurations.
          externalNativeBuild {
    
            // Encapsulates your CMake build configurations.
            cmake {
    
              // Provides a relative path to your CMake build script.
              path "CMakeLists.txt"
            }
          }
        }
        
    

你可能感兴趣的:(c\c++)