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