最近在mac下配置Android Studio 1.4的jdk和jni开发时遇到了很多坑,在这里记录一下如何配置Android Studio的jdk开发,以实现Android Studio对jni开发的支持(包括编译和代码提醒等功能),虽然现在网上很多资料博客什么的都说Android Studio不支持(打脸)。
先来一些有用的资料:
使用gradle-experiment工具编译jni
Android Studio配置JNI
好啦,现在记录一下我的配置方法以及遇到的一些问题。
首先,我们需要准备好ndk r10e,这个版本一定要是这个,不然下面配置好之后编译的时候会提示找不到sys/cdefs.h这个文件。
接下来,我们需要确定一下gradle和gradle jni plugin的版本。
Plugin Version | Gradle Version |
0.1.0 | 2.5 |
0.2.0 | 2.5 |
0.3.0-alpha3 | 2.6 |
0.4.0 | 2.8 |
0.6.0-alpha1 | 2.8 |
0.6.0-alpha5 | 2.10 |
0.7.0-alpha1 | 2.10 |
这是来自官方文档的一个表格,我们可以根据自己要使用的gradle版本找到对应的gradle-experiment。
然后,我们打开gradle文件夹下的gradle-wrapper.properties文件,修改以下设置:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip这里我使用的gradle版本是2.10,如果你本地没有的话,需要去下载一个,然后放到android studio.app的gradle文件夹下。
然后,根据gradle的版本,我们可以从上表得知我们的gradle-experiment工具的版本应该是0.7.0-alpha1或者0.6.0-alpha5,我是这样做的,打开Project得到build.gradle文件,将原来的:
classpath 'com.android.tools.build:gradle:1.3.0'修改成:
classpath 'com.android.tools.build:gradle-experimental:0.7.0-alpha1'接下来,我们需要修改app的build.gradle了,因为配置的语法不同了。
apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig { applicationId "com.ivan.healthcare.healthcare_android" minSdkVersion.apiLevel 14 // Unable to load class com.android.build.gradle.managed.ProductFlavor_Impl targetSdkVersion.apiLevel 23 versionCode 1 versionName "1.0" } } android.buildTypes { release { minifyEnabled false proguardFiles.add(file('proguard-rules.pro')) ndk { debuggable true } } } android.ndk { moduleName "HCUtil" CFlags.add("-DCUSTOM_DEFINE") cppFlags.add("-DCUSTOM_DEFINE") ldFlags.add("-L/custom/lib/path") ldLibs.add("log") stl "stlport_static" } android.productFlavors { create("arm7") { ndk.abiFilters.add("armeabi-v7a") } create("armeabi") { ndk.abiFilters.add("armeabi") } create("x86") { ndk.abiFilters.add("x86") } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.google.code.gson:gson:2.5' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okio:okio:1.5.0' compile 'de.hdodenhof:circleimageview:2.0.0' compile 'com.github.traex.rippleeffect:library:1.3' compile 'com.theartofdev.edmodo:android-image-cropper:1.2.+' }这是我项目中的gradle配置,我们可以看到2.10的gradle语法跟2.4的语法不一样了。
具体可以参考上面给出的链接。