NDK 与 Java 工程区别

MainActivity

static {
    System.loadLibrary("xxx");  // 库名
}
// 加载so编译后  真实文件名字  libxxx.so

public native String stringFromJNI();  // 函数实现在so层 声明函数


buildgradle

// cmake 使用cpp 标准    
externalNativeBuild {
        cmake {
            cppFlags '-std=c++11'
        }
    }
}
// CMakeLists 指导编译   目录 版本
externalNativeBuild {
    cmake {
        path file('src/main/cpp/CMakeLists.txt')
        version '3.18.1'
    }
}
    externalNativeBuild {
        cmake {
            cppFlags '-std=c++11'
        }
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }

    }
}
// abi 过滤  编译指定so  省略ndk过滤默认编译全部
project("xxx") 工程名

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.


add_library( # Sets the name of the library.
xxx  // 添加库 名字 文件

# Sets the library as a shared library.
SHARED  // 指明库类型 共享  so

# Provides a relative path to your source file(s).
xxx.cpp) // 指明源文件
// cmakeclists 指明需要编译的文件名
// 链接相关
target_link_libraries( # Specifies the target library.
        xxx 库名

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})