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功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章