Android Studio ndk简单配置(cmake)

本文介绍了Android Studio从2.2版本开始引入的CMake支持,以及如何配置CMakeLists.txt和Gradle来使用NDK。通过新建jni文件夹,添加C++源文件,并在app的build.gradle中配置编译选项,完成CMake的基本配置。在Java代码中声明并加载库后,可以顺利使用C++代码。参考链接提供了更详细的配置指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMAKE

Android Studio在2.2之后添加了cmake,可在SDK中下载安装(ndk与CMake):
这里写图片描述

如果需要简单的模板示例,只需在新建工程的时候勾选 “Include c++ support”:
这里写图片描述

配置

新建文件(夹)

添加jni文件夹
这里写图片描述
这里注意,新建的这个文件夹默认名称一般是:“src/main/jni/”,但是通过对照我们发现,新建出来在Android导航栏里显示的却是“cpp”(如果显示一致忽略即可),为了避免路径写错我们可以在这里把它的路径改为“cpp”(在project导航栏里refactor->rename)。
这里写图片描述

这里写图片描述

添加cpp/c文件:右击cpp文件夹,添加c++ 源文件
添加CMakeLists.txt:位置可选(后面注意相对路径的关系即可),文件类型选择file即可,可以与c++源文件放在一起,也可以放在工程app的主目录下(如果要在app主目录下建立文件,可在project导航栏中操作):

这里写图片描述
(该操作为演示在app主目录下添加文件,后文的代码则以CMakeFileLists.txt位于cpp文件夹为例。)

配置gradle(注意是app下的build.gradle)

android {
...

    externalNativeBuild {
        cmake {                                      //指定编译工具为cmake
            path "./src/main/cpp/CMakeLists.txt"     //此处路径是相对于app主目录的路径 
        }
    }
}

上面是必须部分,需要更多的使用可转到文末的参考链接。下面给出一个常用的控制编译版本的方法:

android {
...
    defaultConfig {
        ndk {
            abiFilters 'armeabi','x86','armeabi­v7a','arm64­v8a','x86','x86_64','mips','mips64'  //根据需要可选一个或多个
        }
    }
}       //注意关系结构,大括号有点多

配置CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1) #版本号,使用默认值(默认值应该是从模板创建时默认的参数吧)或者3.4.0以下数值

add_library(               #添加编译目标(即.so)
             aaaa          #编译目标名称(不要指定为libxxx.so,名称中平台相关参数会自动添加)
             SHARED        #SHARED 或者 STATIC  ,默认SHARED   (共享/静态链接库)
             aaaa.cpp )    #源代码文件路径,相对路径(注意是从CMakeLists.txt所在路径的相对路径,如果CMakeLists.txt位于app主目录下,则此处应为./src/main/cpp/aaaa.cpp;若CMakeLists.txt位于cpp目录下,则为aaaa.cpp)

find_library(            #寻找外部依赖库,并定义变量引用
              log-lib    #将外部依赖库定义为变量,即此处名称任意,只要自己知道就好
              log )      #外部依赖库的名称,同add_library的命名规则,不要添加任何平台相关参数

target_link_libraries(                  #链接(此处为将aaaa链接到log-lib,使aaaa可以调用log-lib中的内容)
                       aaaa             #需要被链接的目标
                       ${log-lib} )     #需要链接的目标,使用上面定义的变量进行引用

#注意,注释为单行注释,如复制时出现换行会导致编译失败,请删掉不必要注释

配置完成

到这里需要的配置已完成(cpp文件里不需要任何内容)。
由于gradle做了更改,需要sync一次。此时可能会有报错,是因为我们修改了CMakeLists.txt而没有应用,执行build->refresh linked c++ project即可(若代码检查无问题而依旧爆出一堆错误,那make,refresh交替进行一次有可能解决…..只是有可能)。

添加代码

直接在java文件中进行函数声明,按提示即可:
这里写图片描述

由于默认类名与c源文件名是对应创建的,所以你需要将自动创建的代码放到本工程里。使用时记着loadlibrary加载so。

参考:
http://blog.youkuaiyun.com/joe544351900/article/details/53637549(此文章写得更详细,我这里只是简略的给出了基本搭建)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值