ndk开发
过去在eclipse上ndk开发需要弄很多配置,而发现android studio使用上简单了不少
配置
gradle.properties
android.useDeprecatedNdk=true //让项目支持ndk
root下的build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.android.tools.build:gradle-experimental:0.7.0'
}
app下的build.gradle
defaultConfig {
ndk {
moduleName "demoNDK" //打包so的名称
abiFilters "armeabi", "armeabi-v7a", "x86" //打包so的平台
}
}
操作
/**
* ndk引入和声明
* Created by 剑指锁妖塔 on 2016/4/25.
*/
public class DemoTools {
static {
System.loadLibrary("demoNDK");
}
public native String test();
}
c部分
在main下创建一个jni文件夹 用到两个文件 demoNDK.c和fylder.ndk.demo_DemoTools.h
编写c
#include <jni.h>
jstring Java_fylder_ndk_demo_DemoTools_test(JNIEnv *env, jobject instance) {
// TODO
return (*env)->NewStringUTF(env, "那等在季节里的容颜如莲花的开落");
}
使用以下命令生成h头文件,就会在jni目录下创建一个fylder_ndk_demo_DemoTools.h,并生成以下代码
NDKDemo\app\src\main\java>javah -d ../jni fylder.ndk.demo.DemoTools
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class fylder_ndk_demo_DemoTools */
#ifndef _Included_fylder_ndk_demo_DemoTools
#define _Included_fylder_ndk_demo_DemoTools
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: fylder_ndk_demo_DemoTools
* Method: test
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_fylder_ndk_demo_DemoTools_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
编译
执行run之后,会在build.intermediates.ndk.debug.lib下看到生成的so
备注
.c文件的函数名的定义
命名规则:Java_PackageName_ClassName_MethodName
Java_fylder_ndk_demo_DemoTools_test