MAC Android Studio jni配置

最近在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的语法不一样了。

具体可以参考上面给出的链接。

你可能感兴趣的:(android,jni,gradle,mac,NDK,Studio)