之前写过在Android 使用NDK进行开发的博客,Android Studio 下使用JNI 但是这种方式很麻烦,我觉得NDK只是一个工具不应该在配置上弄得十分麻烦,所以我在看到gradle-experimental插件进行JNI开发的时候我就好不犹豫地进行了尝试,下面我们就来看下如何使用gradle-experimental进行JNI开发:
添加NDK路径
配置Project的build.gradle
将项目build.gradle配置文件的dependencies节点中中classpath的值改为对应的gradle-experimental插件。如果你不知道gradle-experimental最新的版本可以使用如下方式查询,它会返回目前的最新插件版本。
dependencies { classpath 'com.android.tools.build:gradle-experimental:0.7.2' }
修改app目录下的build.gradle
apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.3" defaultConfig { applicationId = "com.idealist.myapplication" minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel = 23 versionCode = 4 versionName = "1.0.1" testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" } } android.buildTypes { release { minifyEnabled false proguardFiles.add (file ("proguard-rules.txt" )) } } android.ndk { moduleName "testndk" ldLibs.addAll (['log' ] ) cppFlags.add ("-std=c++11" ) cppFlags.add ("-fexceptions" ) stl 'gnustl_shared' } } dependencies { compile fileTree (include: ['*.jar' ] , dir: 'libs' ) compile 'com.android.support:appcompat-v7:23.3.0' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1' testCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support:support-annotations:23.3.0' }
打开MainActivity 定义native方法,这时候方法会提示错误的信息,按下Alt + Enter打开备选解决方案:Create function java_com_idealist_myapplication_MainActivity_getStringFromNative
这时候会在java的同级目录下自动新建一个jni的目录,并新建了一个c++源码文件:
源码内容如下,我们修改这个方法通过它来返回一个字符串如下所示:
使用loadLibrary引入库,在MainActivity中使用getStringFromNative