转载

如何优雅地使用NDK

在Android Studio上使用了一段时间的NDK,感觉官方的插件 com.android.tools.build.gradle-experimental 还是不够稳定,存在一定问题,不过谷歌也声明了这个插件是在实验性阶段。幸好官方在Android Studio上提供了另一种方式使用NDK,这篇博客就讲讲这种到目前为止我觉得非常赞的方法。

开发环境

  1. 基础的安卓开发环境:Android Studio、SDK、JDK
  2. 下载好NDK,自己手动下载或者用SDK工具下载都可以

我使用的版本:Android Studio 1.5.1

配置常用命令

NDK开发比较常用的命令就是生成头文件、构建so包,在android studio上我们可以先配置好命令,使用起来就很方便了,这是我感觉最赞的地方。

如下图所示,我添加了三个命令,按加号添加

如何优雅地使用NDK

其中一个命令的配置详情如下图:

如何优雅地使用NDK

命令配置参数:

javah用于生成头文件

Program: $JDKPath$/bin/javah
Parameters: -encoding UTF-8 -d ../jni -jni $FileClass$

注意:这个命令我加上了 -encoding UTF-8 指定编码,你可以改成你工程的编码。

Working directory: $SourcepathEntry$/../java

ndk-build用于构建so包

Program: 你的NDK目录/build/ndk-build.cmd
注意 :windows用 ndk-build.cmd ,MAC/Linux用 ndk-build

Parameters:什么都不用填

Working directory: $ModuleFileDir$/src/main

ndk-build clean清除so包

Program: 你的NDK目录/build/ndk-build.cmd
注意 :windows用 ndk-build.cmd ,MAC/Linux用 ndk-build
Parameters: clean

Working directory: $ModuleFileDir$/src/main

配置完三个命令之后,你就可以在右键菜单中找到这几个命令,可以直接使用。如下图演示了生成NdkTest类的头文件

如何优雅地使用NDK

配置工程

让工程项目使用NDK,需要做一些配置工作

local.properties 文件中填写使用的NDK目录:

ndk.dir=你的NDK目录的绝对路径

gradle.properties 文件中添加如下代码

android.useDeprecatedNdk = true

在module的 build.gradle 添加如下代码:

android {

defaultConfig {
ndk {
moduleName "NdkTest"//定义NDKlibrary的名字
//ldLibs "log" 添加log库,看自己需求
}
}

//这里设置目录,默认就这样写就可以了
sourceSets {
main {
jni.srcDir "src/main/jni"
jniLibs.srcDir "src/main/libs"
}
}
}

Hello word

按上面的步骤全都配置完之后就可以在Android Studio上享受NDK了。下面写一个简单的返回Hello word字符串的程序。

首先在java中声明一个本地方法,并加载本地库,如下:

public class NdkTest
{

static {
System.loadLibrary("NdkTest");
}
public static native String getString();
}

生成它的头文件(自动生成的名字是包名+类名 me_majiajie_ndktest_NdkTest.h ),并且创建c/c++文件(NdkTest.cpp),如下:

#include "me_majiajie_ndktest_NdkTest.h"

JNIEXPORT jstring JNICALL Java_me_majiajie_ndktest_NdkTest_getString
(JNIEnv *env, jclass jc)
{
return env->NewStringUTF("Hello word !!!");
}

在jni目录创建一个文件命名为 Android.mk ,填入以下内容

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

LOCAL_MODULE := NdkTest
LOCAL_SRC_FILES := NdkTest.cpp
include $(BUILD_SHARED_LIBRARY)

然后在jni目录创建一个文件命名为 Application.mk ,填入以下内容

APP_MODULES := NdkTest

APP_ABI := all

注意: Android.mkApplication.mk 都是NDK默认的配置文件,关于这两个文件的详细介绍可以看 官网 。

最后生成so包就可以了,记住每次修改C文件都需要重新生成so包:

如何优雅地使用NDK

原文  http://blog.majiajie.me/2016/03/27/如何优雅地使用NDK/
正文到此结束
Loading...