AndroidStudio支持多种方式调用NDK编译本地代码,默认的Gradle可以支持NDK编译,但如果使用gradle-experimantal,可以提供更好的支持。
AndroidStudio下NDK编译方式
使用废弃的NDK
普通情况使用废弃的NDK,只需要在gradle.properties中加入配置(如果不加入则报错):
1
| android.useDeprecatedNdk=true
|
这样做只是为了防止gradle编译报错,为了正确编译还需要修改相应模块gradle文件,加入编译配置如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| android { compileSdkVersion 25 buildToolsVersion "25.0.0"
defaultConfig { minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" ndk { moduleName "myjni" ldLibs "log", "jnigraphics" abiFilters "armeabi", "armeabi-v7a" cFlags "-mtune=atom" stl "gnustl_shared" } } sourceSets.main { jniLibs.srcDir 'src/main/libs' } productFlavors { x86 { ndk { abiFilter "x86" } } mips { ndk { abiFilter "mips" } } } buildTypes { ''' } }
|
如果为提高速度直接用了已编译的lib而暂时不需要编译NDK,可以配置jni不编译:
1 2 3 4
| android{ ... sourceSets.main.jni.srcDirs = [] }
|
使用gradle-experimental
首先我们需要修改工程的gradle配置为gradle-experimental:
1 2 3 4 5 6 7 8 9
| buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.9.1' } }
|
然后所有的模块配置都要加上model:
1 2
| apply plugin: "com.android.model.application" apply plugin: 'com.android.model.library'
|
完整的gradle配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| apply plugin: 'com.android.model.library'
model { android { compileSdkVersion 25 buildToolsVersion "26.0.0"
defaultConfig { minSdkVersion.apiLevel 14 targetSdkVersion.apiLevel 25 versionCode 1 versionName "1.0" }
ndk { moduleName "guetzli" cppFlags.add("-std=c++11") ldLibs.addAll(["log", "z", "jnigraphics"]) stl "c++_static" abiFilters.addAll(['armeabi', 'armeabi-v7a']) } }
android.buildTypes { debug { ndk { cppFlags.add('-DNDK_DEBUG') } } release { minifyEnabled false proguardFiles.add(file('proguard-rules.pro')) } } }
|
app 模块的配置也要相应改变:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| apply plugin: 'com.android.model.application'
model{ android { compileSdkVersion 25 buildToolsVersion "26.0.0" defaultConfig { applicationId "com.hzy.guetzli.demo" minSdkVersion.apiLevel 14 targetSdkVersion.apiLevel 25 versionCode 1 versionName "1.0" } }
android.signingConfigs { create("release") { storeFile file('demokey.jks') storePassword 'demokey' keyAlias 'demokey' keyPassword 'demokey' } }
android.buildTypes { release { useProguard true proguardFiles.add(file('proguard-rules.pro')) signingConfig = $("android.signingConfigs.release") } } }
|
这样以后,本地代码就可以编译,而且AndroidStudio还支持本地代码高亮,调试等操作。
上一篇:使用python开发completeroms网站爬虫
下一篇:使用Gradle发布Android类库到JCenter笔记