美文网首页
在现有AS项目中新增OpenCV c++库的支持

在现有AS项目中新增OpenCV c++库的支持

作者: 我说的这句话是谎话 | 来源:发表于2020-03-30 09:34 被阅读0次

环境

  1. AS 3.4.1
  2. CMake 版本,AS上查不到,只显示了 installed.由 AS 安装

步骤

  1. AS 切换到 project 目录下

  2. 进入目录 app--src,右键 src,新建 Directory.命名为 cpp

  3. 右键 cpp文件夹,新建 cpp文件,命名为 test-cpp-lib.cpp

  4. 右键 cpp文件夹,新建 CMakeLists.txt 文件

  5. CMakeLists.txt 文件填入内容

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)


# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

# 定义自己写的库
add_library( # Sets the name of the library.
        test-cpp-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        test-cpp-lib.cpp)


# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

# 如果需要其他NDK原生库的话,可自行在此处添加
find_library( # Sets the name of the path variable.
        log-lib

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


target_link_libraries( # Specifies the target library.
        test-cpp-lib

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

CMake配置不在本文范围之内

  1. 进入 app 对应的 build.gradle,做以下操作

    • 在defaultconfig 块下新增
      externalNativeBuild {
        cmake {
            cppFlags "-std=c++14 -fexceptions -frtti"
            arguments "-DANDROID_ARM_NEON=TRUE",'-DANDROID_STL=c++_shared'
            // abi过滤
            abiFilters 'armeabi-v7a','arm64-v8a'
        }
      }
      // abi过滤
      ndk {
        abiFilters 'armeabi-v7a','arm64-v8a'
      }
      
  • 在android块下新增

    // c/c++源码位置
      sourceSets {
          main {
              jni.srcDirs = ['src/main/cpp']
              jniLibs.srcDirs = ['src/main/jniLibs/libs']
          }
      }
      externalNativeBuild {
          cmake {
              path "src/main/cpp/CMakeLists.txt"
              version "3.10.2"
          }
      }
    
  • 注意相应的路径,不要照抄。

  • 此时应该已经完成了 c++ 的接入配置,以下为验证手段。

验证

  1. 在src-main-java 文件夹内新建 java 文件,命名为 JNITools.java
package xyz.jimbray.demo;

public class JNITools {

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

    public static native String getHelloString();

}
  1. 如果已经配置成功,AS现在会在 getHelloString 函数处提示错误,AS这个版本已经支持直接跳转到 cpp 文件新建对应函数。

  2. 但是我试的时候,出现直接跳转到一个 自动新建的 test-cpp-lib.c 文件,无视我自建的 cpp 文件,还报错。

  3. 我把 c 文件的内容直接复制到 cpp 文件,删除 c 文件,就可以了。

  4. 目前调用成功,不再用代码演示调用过程。

已发布至 我说的这句话是谎话

相关文章

网友评论

      本文标题:在现有AS项目中新增OpenCV c++库的支持

      本文链接:https://www.haomeiwen.com/subject/bfsmuhtx.html