Android studio 使用android.mk来配置ndk

当前环境:
android studio 2.1.1
android-ndk-r10b

1、创建as项目

2、新建jni文件夹

在下列文件目录下,右键 新建folder –jni folder

Android studio 使用android.mk来配置ndk_第1张图片

3、编写JNI类

package project.vvizware.com.androidmkdemo;

public class Jni {
    static {
        System.loadLibrary("hello");
    }
    public native int getInt();
}

利用as的命令行生成.h文件,并将该文件剪切到jni文件下。
新建hello.cpp来实现.h

#include "project_vvizware_com_androidmkdemo_Jni.h"

JNIEXPORT jint JNICALL Java_project_vvizware_com_androidmkdemo_Jni_getInt
  (JNIEnv *, jobject){
      return 3;
  }

由于as在jni目录下只有一个.c/.cpp文件时,会有bug(这个问题好像在ndk12上面不会出现)

4、在jni文件下创建android.mk 和Application.mk

Android.mk

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

LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE:=hello 表示的是要生成的库是hello
LOCAL_SRC_FILES :=hello.cpp 表示的是 以这个为源
整体来说就是以hello.cpp来生成hell.so

Application.mk

APP_ABI:=all

表示支持所有的abi版本,会生成所有版本的so文件 x86等


Android Studio 和Eclipse在ndk的差别在于,Eclipse会自己去加载相关的.mk文件,而在Android studio 上面是在gradle里面进行配置,在gradle里面可以直接

ndk{
    moduleName "test"
    abiFilter "x86"
}
....
resourceSets...

写上这些之后,as就会给你自动生成.mk的文件

如果想要在android studio 中使用Android.mk来直接进行ndk等的设置,需要在gradle 作出设置。
下面是完整的app gradle的设置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "project.vvizware.com.androidmkdemo"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main{
        jni.srcDirs=[]//禁用as自动生成mk
    }
    task ndkBuild(type:Exec,description:'Compile JNI source via NDK'){
        commandLine "E:\\android-ndk-r10b\\ndk-build.cmd",//配置ndk的路径
                'NDK_PROJECT_PATH=build/intermediates/ndk',//ndk默认的生成so的文件
                'NDK_LIBS_OUT=src/main/jniLibs',//配置的我们想要生成的so文件所在的位置
                'APP_BUILD_SCRIPT=src/main/jni/Android.mk',//指定项目以这个mk的方式
                'NDK_APPLOCATION_MK=src/main/jni/Application.mk'//指定项目以这个mk的方式
    }
    tasks.withType(JavaCompile){//使用ndkBuild
        compileTask ->compileTask.dependsOn ndkBuild
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
}

注意:
当前的android studio 并没有将ndk配置进行 ,没有在Project-structure里面配置ndk的路径

这里在defaultConfig 里面也没有配置ndk

和ndk相关的一切,路径等都在gradle里面另外做配置


demo下载地址:
http://download.csdn.net/detail/u012391876/9597675

你可能感兴趣的:(android)