过去在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