感觉Android写了这么久了, 也该学点装逼的技能了。所以我把目光放在了NDK和C++上,只要玩转了这两个, 我就能去玩OpenCV和TensorFlow了,想想就美滋滋。今天先来基础配置一个最简单的NDK环境。基于AndroidStudio 3.2,使用Cmake
第一步,先安装环境吧。把这三个都先安装好
第二步,给工程配置好NDK环境
File----Project Structure,配置好箭头所指的NDK
三.写一个Java的native方法,传入两个数字,返回求和结果
public class TestJNI {
public static native int getString(int num1,int num2);
}
(前提是要先配置好JDK环境)
根据native生成头文件,进入到src/main/java的路径下,然后执行javah -d ../cpp com.xiaonan.learntemp.TestJNI 生成完毕就会有头文件产生
四.写CPP实现文件
复制.h文件内容,更改为.cpp后缀,然后实现方法。记得include头文件
五.编写CMakeLists.txt文件,这个文件和mk文件一样,只是语法不同
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
set( CMAKE_CXX_FLAGS "-std=c++11" )
#设置编译so名字
set(PROJECT_NAME native)
#设置编译路径
set(SRC_DIR src/main/cpp)
#设置编译文件列表
file(GLOB_RECURSE cpp_src "${SRC_DIR}/*.cpp")#指定当前目录下的所有.cpp文件(包括子目录)
#三个参数分别为(so名称,类型,cpp路径)
add_library( ${PROJECT_NAME} SHARED ${cpp_src})
六.调整gradle文件。这里两块一定注意,我已经采坑了
第一部分是defaultConfig中的externalNativeBuild,这里两个参数
第二部分是android标签下的externaleNativeBuild标签
七.使用就可以了
后记。
1.AndroidStudio生成的so文件目录和Eclipse不同,Eclipse最后在libs下,AndroidStudio最后生成的路径在.....\build\intermediates\cmake\debug\obj下面。
2.可以通过build标签下的Analyze APK功能查看so文件最后有没有打入APK中