Android CMake

首先了解几个名词

NDK

The Android Native Development Kit

The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.

CMake

跨平台外部编译工具,跟Gradle一起编译本地库文件(libarary)。如果只是使用ndk-build编译,无需安装。Ndk-build和CMake不可混用

An external build tool that works alongside Gradle to build your native library. You do not need this component if you only plan to use ndk-build.

在gradle中指定cmake版本

android {
    ...
    externalNativeBuild {
        cmake {
            ...
            version "cmake-version"
        }
    }
}

CMakeLists.txt

A CMake build script 
 

# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add_library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.

add_library( # Specifies the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )



# Specifies a path to native header files.
include_directories(src/main/cpp/include/)

通过上述配置,将按规则  liblibrary-name.so  生成  libnative-lib.so

java代码里的引用

static {
    System.loadLibrary("native-lib");
}

LLDB

Android Studio 通过它来调试native code。LLDB跟Android Studio一起安装

The debugger Android Studio uses to debug native code. By default, LLDB will be installed alongside Android Studio.

SDK

AGP  Android Gradle plugin

gradle

        externalNativeBuild {
            cmake {

                // Sets optional flags for the C++ compiler.
                cppFlags "-frtti -fexceptions -std=gnu++0x -DHAVE_PTHREADS -fpermissive -O3 -Wall -Werror -###"
                // Passes optional arguments to CMake.
                arguments "-DPRODUCT_CONFIG=effects"
                arguments "-DANDROID_STL=c++_shared"

                // Sets a flag to enable format macro constants for the C compiler.
                cFlags "-D__STDC_FORMAT_MACROS"
            }
        }
        ndk {
            abiFilters 'arm64-v8a','armeabi-v7a'
        }

https://developer.android.com/studio/projects/gradle-external-native-builds

Ninja

JNI

Java Native Interface 

Java或者Kotlin代码通过JNI调研Navtive Library的函数

Your Java or Kotlin code can then call functions in your native library through the Java Native Interface (JNI).

参考

https://developer.android.com/studio/projects/install-ndk#groovy 

Android CMake_仰望XX的博客-CSDN博客

Android 开发:CMake 使用_android cmake_zxy_de_android的博客-CSDN博客

Android-CMake语法 - 简书

Android NDK开发扫盲及最新CMake的编译使用 - 知乎

猜你喜欢

转载自blog.csdn.net/linzhiji/article/details/131324688
今日推荐