Android NDK 开发入门详解

所谓ndk开发,就是让android 开发 java 的jni更为简单的一个插件。因为jni生成连接库比较麻烦,ndk提供了一种快速生成各种cpu平台的so库的方法。从而不用使用gcc去生成so库。
1.新建一个工程。
2.如果没有下载ndk工具,就打开android studio setting 里面找到android sdk 然后再找到sdk tools 然后勾选 ndk等最新版本的ndk下载完成。
3.创建一个Java类,定义native方法,这个native 方法的实现用c++来实现,MainActivity 只需要去调用就可以了。
4.进入工程main\java目录里面执行javah -d …/jni com.xiaoming.myndkdemo.JniTest 这个命令的意思就是在…/jni目录里面生成头文件,需要生成头文件的类是JniTest的全名。
然后回车就可以看到一个.h结尾的头文件已经生成好了。这个文件在与java同级目录下面。
5.引入头文件,用c++实现这个native方法。
6.创建两个文件,分别是Android.mk Application.mk
文件内容分别如下`

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
include $(BUILD_SHARED_LIBRARY)
APP_ABI:= all

第一个是Android.mk 第二个是Application.mk 只需要注意这三个
参数,LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp
APP_ABI分别意思是,so库的文件名,编译so库的c++源文件路径。还有编译so库支持的平台,总共有五个平台可以选择,如果是all 就证明打包所有平台支持的so库。
7.切换到mian目录下面,执行ndk-build 进行so库的打包,如果打包异常,检查一下是否有什么语法错误,改正完以后重新打包。
然后在那个native类里面的静态代码块里面对这个so库进行加载。
最后运行报错
如下:

Error: Your project contains C++ files but it is not using a supported native build system.

意思就是你的工程没有用一个支持的本地构建系统。我们在app的build.gradle的android{}闭包里面添加一个小的闭包

    sourceSets {
        main() {
            jniLibs.srcDirs = ['src/main/libs']
            jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程
        }
    }

这样,so库的路径就别识别了,下面重新运行,就得到你想打印的日志了。

你可能感兴趣的:(Android NDK 开发入门详解)