Android Studio 2.2 多cpp文件自动包含及第三方so库调用

版权声明:本文为 宇不语 原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35064774/article/details/52955242


如有转载,请申明:
转载至 http://blog.csdn.net/qq_35064774/article/details/52955242


多cpp文件自动包含

Android Studio 2.2 又重新加入了jni的支持,并且使用的是CMake,所以现在写jni不需要配置mk文件了。
但相应的,如果你在cpp文件夹中新建了cpp文件或头文件,就需要手动配置CMakeLists.txt文件。
IED自动生成的CMakeLists中默认添加的cpp文件只有native-lib.cpp。具体配置如下:

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

     # Sets the library as a shared library.
    SHARED

     # Provides a relative path to your source file(s).
     # Associated headers in the same location as their source
     # file are automatically included.
    src/main/cpp/native-lib.cpp )

去掉注释后,结构就更加清晰了

add_library(
    native-lib
    SHARED
    src/main/cpp/native-lib.cpp)

第一个参数为库名字,第三个参数为cpp文件路径。
如果你新建了一个Test.cpp,就需要把这个文件配置到CMakeLists中,但这样很麻烦。有没有一种可以自动包含cpp文件夹下源文件的方法呢?当然有,请看下面。

# 查找cpp目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(src/main/cpp/ DIR_LIB_SRCS)
# 生成链接库
add_library (native-lib SHARED ${DIR_LIB_SRCS})

# 导入cpp目录下的所有头文件
include_directories(src/main/cpp/)

你可以把IED生成的那段替换成这段,这样你以后在cpp目录下新建c++文件时,就不用手动配置了,只需要点击菜单栏Build->Refresh Linked C++ Projects,刷新后就可以在Android视图下的Cpp中看到你新建的C++文件。

第三方so库的使用

除了调用自己生成的so库外,我们还可能需要调用第三方的so库,Android Studio中和Eclipse中使用so库略有不同。
我这里以Android Studio 2.2为例。
1. AS中默认是配置好so库的路径的,但是并没有给你生成相应的文件夹,所以首先需要新建文件夹。
切换到Project视图,依次展开app->src->main,然后在main目录下新建一个jniLibs的文件夹,注意大小写和s,建议复制粘贴。
然后点击菜单栏Build->Make Project,在切换回Android视图,就可以看到多出了一个jniLibs的目录。

  1. 把so库复制到jniLibs目录下,当然注意是放到对应的平台目录下,一般第三方so库提供的时候都会说明是那个平台,比如一般都是armeabi平台,即放到jniLibs/armeabi目录下。
  2. 在java中声明native方法,这里和自己写jni是一样了,唯一的区别是自己写的有cpp文件。所以这里写的native方法在IDE中会红色标识表明找不到对应cpp中的函数,但不要紧张,这不影响编译,也不影响运行。

猜你喜欢

转载自blog.csdn.net/qq_35064774/article/details/52955242