Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置

为什么要用cmake?我先说一下cmake的优点:
1.配置简单,只需要一个text文件几句代码即可完成Jni环境配置
2.请看下图:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第1张图片

Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第2张图片
第一张图是在干什么?debug C/C++代码啊!惊不惊险刺不刺激?!
都能够直接debug了,添加文件添加函数肯定超简单的。
第二张图片呢,查看了一下apk包里面的内容可以看到所有c/c++代码都会自动被编译成为so库文件才能发布,java代码再混淆有so库安全?
所以说cmake还是很好用的,毕竟官方推荐的。

开始配置:
找一个普通AS项目,也可以新建一个不用选C++支持,添加ndk及相关库,File->Settings:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第3张图片
如图:添加CMake,LLDB(这个库是debugC/C++代码时用的),NDK保存等待安装完毕。
在app目录里面新建一个CMakelists.text文件,注意名称,添加如下代码:

cmake_minimum_required(VERSION 3.4.1)

include_directories(
    ${CMAKE_SOURCE_DIR}/src/main/cpp/include #h文件目录
)
add_library( # Sets the name of the library.
             jni-lib                        #c/cpp代码将要编译成为so库的名称,java代码加载库文件要用这个名称
             SHARED
             src/main/cpp/hello-cjni.c      #c代码文件路径
             src/main/cpp/hello-cppjni.cpp  #cpp代码文件路径 这里可以随意添加c、c++文件
              )
target_link_libraries( # Specifies the target library.
                       jni-lib
                       )

所以可以看出以后要往项目当中添加c、cpp文件就需要来cmakelists文件当中进行添加设置。
然后把这个cmake配置文件配置到AS当中:
在app:build.gradle 的android 里面添加:

externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

配置好长这个样子:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第4张图片
到此工程配置就完成了。下面使用:
src/main/cpp/ 在这个路径下面新建两个文件:
一个:hello-cjni.c 一个:hello-cppjni.cpp 文件名称和路径跟cmakelist里面的对应。
新建JniNative.java文件,作为java与c代码解耦类建好以后AS长这个样子:
说明一点:如果新建了c文件但是AS当中看不到则说明没有在cmakelist里面配置好或者还没有执行cmakelist文件:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第5张图片
在JniNativ.java里面添加如下代码:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第6张图片
“jni-lib”这个名字是跟cmakelist里面的target_link_libraries里面的名字是对应的。添加四个方法分别在c/cpp里面算加减并返回结果。
在c文件当中添加如下代码:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第7张图片
在cpp文件当中添加如下代码:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第8张图片
看出来区别没,相差一个extern “C”,这个的作用网上很多就不说了。
其中:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第9张图片
最后调用c、c++代码,在MainActivity里面:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第10张图片
最后检查一下整个代码,包括三个地方,c/cpp当中,JniNative当中,MainActivity当中,都没有问题就可以运行了。
运行结果,其中有分别在c文件和cpp文件当中的运行结果:
Android Studio 3.0 Jni 开发环境配置 ndk cmake编译 多个C/C++文件添加配置_第11张图片
总结:添加c当中的调用方法需要修改c,JniNative,MainActivity三个地方,要添加c/cpp文件需要修改makelists文件即可。

你可能感兴趣的:(android)