Android NDK编程CMake入门

2 篇文章 0 订阅
1 篇文章 0 订阅

什么是CMake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

CMake的使用

如果还没有下载CMake,可以在Studio中进行下载安装
在这里插入图片描述
1、如果你的项目已经在开发阶段,则需要配置CMake环境。
2、如果你的项目还没有创建,则可以在最初创建项目时候选择CMake模式的项目,会自动配置CMake相关的信息。
第一种情况:我们需要自己构建CMake环境,首先是编写CMakeLists.txt,代码如下

#有关在Android Studio中使用CMake的更多信息,请阅读
#文档:https://d.android.com/studio/projects/add-native-code.html

#设置构建本机库所需的CMake的最小版本。
cmake_minimum_required(VERSION 3.4.1)

#创建并命名一个库,将其设置为静态或共享,并提供到其源代码的相对路径。
#您可以定义多个库,CMake为您构建它们。
# Gradle自动将共享库打包到APK中。

add_library( # 设置库的名称.
        native-lib

        # 将库设置为共享库.
        SHARED

        # 提供到源文件的相对路径.
        native-lib.cpp)

#搜索指定的预构建库并将路径存储为变量。因为CMake在搜索路径by中包含了系统库默认情况下,
#您只需要指定公共NDK库的名称CMake验证库之前是否存在完成构建。

find_library( # 设置path变量的名称.
        log-lib

        # 指定要CMake定位的NDK库的名称。
        log)

#指定库CMake应该链接到目标库。您可以链接多个库,例如在此构建脚本中定义的库、预构建的第三方库或系统库。

target_link_libraries( # 指定目标库.
        native-lib

        # 将目标库链接到包含在NDK中的日志库
        ${log-lib})

代码都有注释,接下来在app/buildgradle中配置CMakeLists.text的位置,如图所示:
在这里插入图片描述
可以手动填写,或者通过Studio的功能,
在这里插入图片描述
然后填入CMakeLists.txt的目录位置,点击确定就可以在app/buildgradle中生成CMake的环境。
在这里插入图片描述
接着测试CMake环境,写一个native-lib.cpp。并在Mainactivity中调用
native-lib.cpp的代码

#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_dingxingxiang_myapplication_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

MainActivity代码

package com.dingxingxiang.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Example of a call to a native method
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }
    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}

编译运行就可以生成一个.externalNativeBuild文件夹
在这里插入图片描述
第二种情况:新建项目的时候,选择配置CMake模式,如下如顺序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击“finish"按钮之后,会生成配置好的CMake环境,如下如:
在这里插入图片描述
至此,CMake入门介绍完毕,相关的另一篇NDK入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值