1、打开项目后,一次点击Tools>SDK Manager

2、点击SDK Tools标签页

3、选中NDK(Side by Side)和CMake复选框

android cmake教程 android cmake配置_NDK


4、点击OK

此时系统会显示一个对话框,告诉你NDK软件包占用了多少磁盘空间

5、点击OK

6、安装完成后,点击finish

7、您的项目会同步build文件并执行构建,修改构建过程中所有的错误

如果您想要使用SDK管理器未包含的CMake版本,请按以下步骤操作:

1、从CMake官方网站下载并安装CMake

2、在模块的build.gradle文件中指定您想要让gradle使用的CMake版本

3、将CMake的安装路径添加到PATH环境变量,或将其添加到项目的local.properties文件中,如下所示。如果Gradle找不到您在build.gradle文件中指定的CMake版本,就会出现构建错误。

If you set this property, Gradle no longer uses PATH to find CMake.
cmake.dir = “path-to-cmake”

4.可以不安装,如果您尚未在工作站上安装Ninja构建系统,请访问Ninja官网 ,然后下载并安装适用于您的操作系统最新版Ninja。此外,请务必将Ninja的安装路径也添加到PATH环境变量。
5、在local.properties的文件添加NDK的路径和SDK的路径

sdk.dir=C:\Users\admin\AppData\Local\Android\Sdk
ndk.dir=C:\Users\admin\AppData\Local\Android\Sdk\ndk

6、在Project Structure配置SDK和NDK的路径

android cmake教程 android cmake配置_gradle_02


7、配置gradle.properties文件,输入图中红色框内的内容

android cmake教程 android cmake配置_gradle_03


8、在build.gradle文件中ndk的模块

android cmake教程 android cmake配置_gradle_04


9、指定android编译中c代码不用gradler编译,jniLib的库的加载目录

android cmake教程 android cmake配置_NDK_05


10、目录的结构如图

android cmake教程 android cmake配置_CMake_06


Application.mk和Android.mk

//Application.mk
APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -std=c++0x
APP_ABI := arm64-v8a
APP_PLATFORM := android-19

//Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := playMusic
LOCAL_SRC_FILES := playMusic.so
include $(PREBUILT_SHARED_LIBRARY)
//上面的部分是指引用第三方so的配置
include $(CLEAR_VARS)
LOCAL_MODULE := tinyplayJni
LOCAL_SRC_FILES := com_aac_richtap_PlayMusic.cpp
LOCAL_LDLIBS += -llog
LOCAL_SHARED_LIBRARIES := playMusic
LOCAL_EXPORT_C_INCLUDES := src/main/jni
include $(BUILD_SHARED_LIBRARY)

11、以上配置完成后

在Terminal终端输入ndk-build 出现下图所示就表示成功了

android cmake教程 android cmake配置_NDK_07


12、最后一步就是使用System.loadLibrary将so加载到java代码

public class PlayMusic {

    public static native void setDeviceAndCard(int card,int device);

    public static native void playMusicByName(String name);

    static {
        System.loadLibrary("tinyplayJni");
    }
}
//在需要的activity中调用
 PlayMusic music = new PlayMusic();

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                music.setDeviceAndCard(3,0);
                Log.d("Main", "onClick: ");
            }
        });

最后留言:为了直接将java文件编译成jni的头文件可以在配置以上的环境之后使用
输入命令javah -jni com.example.mr5.jnidemo.JniUtil --------包名+类名

如果报找不到该类的错误,用javah -classpath . -jni com.example.mr5.jnidemo.JniUtil。


插入部分
引用系统文件且自定义一个so库

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := playMusic

#LOCAL_MODULE := playMusicZero


LOCAL_SRC_FILES := PlayMusic.cpp \
                   Interface.cpp

LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libtinyalsa

LOCAL_MODULE_TAGS := optional

LOCAL_C_INCLUDES += external/tinyalsa/include  //引入其他目录的头文件方式    在cpp文件中使用#include<***>的方式引用

LOCAL_CFLAGS += \
      -Wno-unused-parameter \
      -Wno-unused-function \
      -Wno-unused-variable

#include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)

//在Android.mk同目录下面的文件
Interface.cpp
PlayMusic.cpp
PlayMusic.h

android cmake教程 android cmake配置_android_08