最近在mac下配置Android Studio 1.4的jdk和jni开发时遇到了很多坑,在这里记录一下如何配置Android Studio的jdk开发,以实现Android Studio对jni开发的支持(包括编译和代码提醒等功能),虽然现在网上很多资料博客什么的都说Android Studio不支持(打脸)。
先来一些有用的资料:
好啦,现在记录一下我的配置方法以及遇到的一些问题。
首先,我们需要准备好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的语法不一样了。
具体可以参考上面给出的链接。