Android Studio 2.2
及之后的版本,支持NDK
编译c/c++
代码
准备工作:
下载NDK
,使用SDK Manager
下载 LLDB
、CMake
、NDK
新建工程ndkdemo
1、添加c++ 源码
创建完工程之后,可以在Java
源码同级目录新建文件夹,c++
源码可以放在这个目录下。这个文件夹的创建位置不是固定的,可以创建在工程的任意有效路径内,只要CMakeLists.txt
或者 Android.mk
文件配置的源码位置是正确的即可。
在ndk
目录下新建c++
文件 hello.cpp
//
// Created by Don on 2019-03-20.
//
#ifndef NDKDEMO_HELLO_H
#define NDKDEMO_HELLO_H
char *getHello();
#endif //NDKDEMO_HELLO_H
//
// Created by Don on 2019-03-20.
//
#include "hello.h"
char *getHello() {
return "hello";
}
使用ndk
编译c/c++
文件,有两种方式,CMake
和 Android.mk
2、添加CMake编译脚本
创建CMakeLists.txt
,此文件可以创建在工程内任意有效的路径内,这里将其创键在主module
app
目录下。
添加 cmake_minimum_required
和 add_library
add_library
中可以指定库名,最终生成的库名为 lib
库名.so
为了确保 CMake
可以在编译时定位您的标头文件,您需要将include_directories
命令添加到 CMake
构建脚本中并指定标头的路径
cmake_minimum_required(VERSION 3.4.1)
add_library(
# 库名
hello
# 动态库 so
SHARED
# c/c++ 源文件
src/main/ndk/hello.cpp )
# c/c++ 头文件
include_directories(src/main/ndk/)
CMakeLists.txt
文件创建好以后,就可以在gradle
文件指定ndk
编译类型及编译脚本路径
android {
...
externalNativeBuild {
cmake{
path "CMakeLists.txt"
}
}
}
运行app
,Android Studio
会生成so
文件并将so
文件打包到apk
内,使用Android Studio
打开apk
文件,可以在lib
目录下看到so
编译生成的so
文件可以在build
目录下找到
3、 Android.mk
使用Android.mk
编译与CMake
类似的,也需要指定库名,库类型和c/c++
源文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 库名
LOCAL_MODULE := hello
# c/c++ 源文件
LOCAL_SRC_FILES := hello.cpp
# 动态库 so
include $(BUILD_SHARED_LIBRARY)
指定编译方式为Android.mk
externalNativeBuild {
ndkBuild {
path 'Android.mk'
}
}
网友评论