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

为什么要用cmake?我先说一下cmake的优点:
1.配置简单,只需要一个text文件几句代码即可完成Jni环境配置
2.请看下图:
这里写图片描述

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

开始配置:
找一个普通AS项目,也可以新建一个不用选C++支持,添加ndk及相关库,File->Settings:
这里写图片描述
如图:添加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"
        }
    }

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值