Android-NDK/JNI智阳androidAndroid NDK

Ndk之C/C++静态库生成及使用 for Android su

2019-02-28  本文已影响2人  草蜢的逆袭

Ndk之C/C++静态库生成及使用 for Android sutio 3.x

重要说明 本文是参照上面的资料得来的。感谢大神的资料。

涉及到的参考资料如下:

大神的博客

大神的github

静态库和动态库的编译

lib module工程结构如下

image

lib module 编译环境配置

静态库的编译

image

动态库的编译

image

lib CMakeLists.txt

image

build.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的源码工程得来的,不敢居功,相同的内容不列出,只大概的介绍一下重点部分。需要详细了解的。查看大神的博客

上一篇下一篇

猜你喜欢

热点阅读