美文网首页
JNI基础(1): 项目创建和目录结构

JNI基础(1): 项目创建和目录结构

作者: MemetGhini | 来源:发表于2022-01-09 20:07 被阅读0次

1.1 自带的工程选项创建

依次点击 Android Studio > New Project > Phone and Tablet > Native C++。
java代码在java文件目录,主要是从native层获取一个字符串并显示出来,c++ 代码在 cpp 文件目录。
跟普通安卓项目比会有一下几点区别:

  • 点开app模块的build.gradle文件在android{ }中会有如下配置来指定CMakeLists.txt所在目录和cmake版本,cmake目录一般是cpp文件根目录中。本配置是项目支持CMake的基础,没有此项也就没了关联的原生代码。
externalNativeBuild {
    cmake {
        path file('src/main/cpp/CMakeLists.txt')
        version '3.18.1'
    }
}
  • 上面第一条之外在 android > defaultConfig块中也会指定有如下配置。本配置的作用是指定此模块CMake或者ndk-build可选参数和标记, c++相关的编译选项, abiFilter(编译的架构)等等。CMake的编译产物在 app/build/intermediates/cmake/debug/obj/{abi} 目录中可以找到,可以改可选abi类型做实验看看。
 defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            cppFlags '-std=c++11'
        }
        ndk {
            abiFilters "x86", "armeabi-v7a", "arm64-v8a"
        }
    }
}
  • 编译相关工作会在CMakeLists.txt文件中配置。(ps:CMake不是本主题的重点所以暂时不细讲,后期做个专题)

1.2 为已有项目添加NDK编译

为已有项目添加NDK编译选项其实也就是上面两个配置。如果不需要设定额外参数只需在模块的build.gradle > android {} 中添加如下即可。

externalNativeBuild {
    cmake {
        path file('src/main/cpp/CMakeLists.txt')
        version '3.18.1'
    }
}

并把c/c++和CMakeLists.txt文件放到指定目录。推荐放在跟java同级目录中新建cpp目录。
为已有项目配置NDK编译后由于有之前的项目缓存,所以很大概率会出现找不到libxxx.so或者jni方法实现的问题。此时可以通过如下方法把缓存清理干净然后重新编译

  • 删掉模块目录中build文件夹。例如:app/build
  • 依次点击File>Invalidate Caches and Restart来让IDE清理缓存
  • 重启后点击Build>Clean Project
  • 再点击Build > Refresh Linked C++ Project
  • 再同步Gradle并Run 项目即可

相关文章

网友评论

      本文标题:JNI基础(1): 项目创建和目录结构

      本文链接:https://www.haomeiwen.com/subject/zzxpcrtx.html