我有一个带有以下内容的build.gradle文件设置(我显然排除了一些简短的部分):
android { defaultConfig { ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86' } }
productFlavors {
flavor1 { ... }
flavor2 { ... }
flavor3 { ... }
flavor4 { ... }
flavor5 { ... }
}
buildTypes {
debug {
externalNativeBuild { ndkBuild { cFlags '-DDEBUG' } }
...
}
release {
externalNativeBuild { ndkBuild { cFlags '-DRELEASE' } }
...
}
}
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
它可以工作,但是会为每个flavor + buildType编译 native 代码。因此,不仅调试和发布,而且还需要花费一生的flavour1Debug,flavor2Release等。
我如何告诉gradle仅对两种构建类型使用externalNativeBuild,并将其用于所有口味?
最佳答案
的确如此,如果查看文件.externalNativeBuild/ndkBuild/flavor1Debug/armeabi/ndkBuild_build_command.txt
,您将看到与我的相似的东西:
Executable : ~/Library/Android/sdk/ndk-bundle/ndk-build
arguments :
NDK_PROJECT_PATH=null
APP_BUILD_SCRIPT=~/proj/jni/Android.mk
APP_ABI=armeabi
NDK_ALL_ABIS=armeabi
NDK_DEBUG=1
APP_PLATFORM=android-21
NDK_OUT=~/app/build/intermediates/ndkBuild/flavor1/debug/obj
NDK_LIBS_OUT=~/app/build/intermediates/ndkBuild/flavor1/debug/lib
APP_SHORT_COMMANDS=false
LOCAL_SHORT_COMMANDS=false
-B
-n
jvmArgs :
对于每个buildVariant,依此类推。您可以采取什么措施来减少构建时间?
ndkBuild
的最终链接。将这些静态库用作$(PREBUILT_STATIC_LIBRARY)
。 jniLibs.srcDir 'src/main/libs'
禁用集成ndkBuild的最简单方法是通过指向
jni.srcDirs = []
但是,您也可以让Android Studio为您的cpp文件建立索引,但可以禁用gradle任务:
tasks.all { task ->
if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
task.enabled = false
}
}