mrq*_*rqs 7 android gradle android-ndk android-gradle-plugin android-productflavors
我有一个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'
}
}
Run Code Online (Sandbox Code Playgroud)
它工作,但它编译每个flavor + buildType的本机代码.所以不仅调试和发布,而且还有flavor1Debug,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 :
Run Code Online (Sandbox Code Playgroud)
对于每个buildVariant依此类推。您可以采取哪些措施来减少构建时间?
将耗时的部分提取到一个静态库(或一组静态库)中,只留下集成的最终链接ndkBuild。使用这些静态库作为$(PREBUILT_STATIC_LIBRARY).
完全禁用集成的 ndkBuild,然后设置
jniLibs.srcDir 'src/main/libs'
Run Code Online (Sandbox Code Playgroud)
禁用集成 ndkBuild 的最简单方法是指向
jni.srcDirs = []
Run Code Online (Sandbox Code Playgroud)
但您也可以保留 cpp 文件的 Android Studio 索引,但禁用 gradle 任务:
tasks.all { task ->
if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
task.enabled = false
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |