Android NDK入门(CMake)

本文使用CMake进行NDK开发!!!

学会NDK就可以把你写或者别人写的C和C++代码在Android 下调用,可以大大提高性能和安全。

(注意)本文图文齐全,绝对可以让你轻松学会NDK开发的入门。注意Demo是Android Studio是自动生成的

一、概述

1.概述

 Android 调c /c++代码,是每一个Android工程师进阶都要学的。本文简单讲解NDK入门。

 我简单讲一下,接下要有到的东西。

 NDK:Native Development Kit,是 Android的一个工具开发包 ,他属于Android,JNI属于Java

 CMakeLists: 一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。

 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件。

 LLDB(这个我没有太了解,所以我没有下载)

2.环境配置

二、自动实现

    1.新建项目:我建议你可以新建一个支持c++的Demo,来查看你的错误,做为Demo查看。

    Android Studio已经相对智能,可以自动创建完成。

其实到这里Android调用c++已经完成了,运行一下,效果如下:

三、手动创建

接下来我们手动实现Android调用c/c++代码的Demo,首先再创建一个项目,为第一步。

   这次我们不选择c++的选项,一直Net到Finsh完成新建项目。

  1.创建我们需要的文件   

   NdkUtil.java

   CMakeLists.txt

   cpp文件夹里创建   native-lib.cpp 

   然后再一个个完善功能

  

  1.把之前创建的文件写好

  NdkUtil:一个调用c++的工具类,用来实现调用c++代码。注意这个类的类名和方法对c++的方法是有影响的

public class NdkUtil {
        //静态代码,java最优先调用
        static {
            System.loadLibrary("native-lib");
        }

        //实现调用c++代码
        public native String getCString();
}

   native-lib.cpp:这是一个c语言的代码文件,如果你会c语言你可以自己写。不懂c也没有问题,你可以直接复制一下代码

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ndk_1demo_NdkUtil_getCString(JNIEnv *env, jobject instance) {
    std::string hello = "Hello from C++";  
    return env->NewStringUTF(hello.c_str());
}

   CMakeLists.txt:用来配置Android调用c/c++

#这是个符号是注释的意思
#这个是配置版本最低为3.4.1
cmake_minimum_required(VERSION 3.4.1)
add_library(
        # 设置库的名称。
        native-lib
        # 指定的NDK库的名称
        # 你和我的一样就行
        SHARED
        # 你的cpp路径
        src/main/cpp/native-lib.cpp)

2.链接c++项目和配置Gradle

右键 NdkUtil  Link C++ project with Gradle

选择你的 CMakeLists.txt 的路径

如果你不知道,自己的CMakeLists.txt 在哪?你可以这样找到文件目录

 3.实现

MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView mText = findViewById(R.id.text);
        NdkUtil ndkUtil = new NdkUtil();
        mText.setText(ndkUtil.getCString());
    }
}

布局文件

这样基本就完成简单NDK功能。

猜你喜欢

转载自blog.csdn.net/qq_41346910/article/details/86596770