android studio 使用ndk编译c++库给jni使用
参考
http://www.codeceo.com/article/c-and-cpp-under-java-android-and-objective-c.html
代码例子
https://github.com/taoweiji/DEMO_NDK
查看sdk版本
targetSdkVersion 23
这个程序我一直没有编译过,很是郁闷,主要是因为gradle版本的问题,但是不知道要怎么改。尝试了很多办法都不行。暂时不折腾了。有编译成功,运行ok的小伙伴留个言交流下,谢谢!qq:410587208
参考
Android Studio NDK开发案例一 JNI开发入门 https://blog.csdn.net/weixin_40779546/article/details/84791694
安卓studio jni调用第三方静态库CMakeLists配置 https://blog.csdn.net/baidu_35757025/article/details/78409949
add_library( mytaglib #这是我即将调用第三方静态库,不需要写完整的静态库名。
STATIC
IMPORTED )
set_target_properties( mytaglib
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/libs/x86/libmytaglib.a )#libmytaglib.a是完整的库名。
target_link_libraries( mediafile-lib#这是我自己创建的动态库。
mytaglib
#z#有人说要加个z库。其实不加也可以编译通过,并且能运行;加了也没有报错。
${log-lib} )#这是NDK库文件
build.gradle(app)里面也有一项必要的配置:
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-23',
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
}
}
build.gradle(app)的配置里面少了上面这一段,就会导致编译不通过(目前我发现上面这一段仅仅是针对调用静态库的时候需要用到)。
最终成功了,需要在cmakelist.txt里加入
#编译dlib
add_library(
dlib
SHARED
${pathToDlib}/dlib/all/source.cpp
)add_library(
liveness
SHARED
${SRCS}
)target_link_libraries(
liveness
log
jnigraphics
#链接动态库 使用完整路径
${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libdlib.so
)
Android NDK 开发之 CMake 必知必会 https://mp.weixin.qq.com/s?__biz=MzA4MjU1MDk3Ng==&mid=2451526579&idx=1&sn=8c69198c8056692c44234a8486cc19e8&chksm=886ffa1cbf18730a6eb2b90425f527281c75449700bc95a90c284421100f42ce413cc46d2b0b&mpshare=1&scene=23&srcid=&sharer_sharetime=1564456468541&sharer_shareid=656dda2d80ca9f13e1033837a79f6ca7#rd
ndk之CMake https://developer.android.com/ndk/guides/cmake
Android下使用CMake链接已有静态库.a生成新的静态库.a,以及动态库.so链接静态库生成新的动态库.so https://blog.csdn.net/LLJJYY001/article/details/78041544
【android studio 使用ndk编译c++库给jni使用】https://github.com/lijiayan2015/NativeDemo
推荐阅读
- android第三方框架(五)ButterKnife
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程