Ndk之C/C++静态库生成及使用 for Android su
2019-02-28 本文已影响2人
草蜢的逆袭
Ndk之C/C++静态库生成及使用 for Android sutio 3.x
重要说明 本文是参照上面的资料得来的。感谢大神的资料。
涉及到的参考资料如下:
静态库和动态库的编译
lib module工程结构如下
imagelib module 编译环境配置
静态库的编译
image动态库的编译
imagelib CMakeLists.txt
imagebuild.gradle配置
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-13',
'-DANDROID_TOOLCHAIN=clang'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64', 'x86'
targets 'nannan', 'haohao'
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
make module 或 进入模块目录,执行 gradle clean build 即生成.a和.so 到指定目录
image第三方静态库和动态库的使用
环境配置
image image第三方库的.h头文件需要复制到include目录下
动态库和静态库的调用
image当前工程的CMakeLists.txt配置
image当前工程的 build.gradle配置
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-15',
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
abiFilters 'armeabi-v7a','x86_64', 'arm64-v8a','x86'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
/*解决More than one file was found with OS independent path 'lib/x86/libnative.so'*/
packagingOptions {
pickFirst 'lib/armeabi-v7a/libnative.so'
pickFirst 'lib/x86_64/libnative.so'
pickFirst 'lib/x86/libnative.so'
pickFirst 'lib/arm64-v8a/libnative.so'
}
}
packagingOptions这里面可是重点哦。More than one file was found with OS independent path 'lib/x86/libnative.so这个破玩意儿,整了一下午才解决。是看到了这个兄弟的博客才解决的,感谢一下!
再次声明,由于本篇文章的由来,是基于大神的博客,是看了大神的github的源码工程得来的,不敢居功,相同的内容不列出,只大概的介绍一下重点部分。需要详细了解的。查看大神的博客。