簡體   English   中英

Gradle / android:單個ndk構建多種口味?

[英]Gradle/android: single ndk build for multiple flavors?

我有一個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的本機代碼。 所以不僅調試和發布,而且還有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 : 

等等每個buildVariant 你可以做些什么來減少構建時間?

  1. 將耗時的部分提取到靜態庫(或一組靜態庫)中,並僅為集成的ndkBuild保留最終鏈接。 將這些靜態庫用作$(PREBUILT_STATIC_LIBRARY)

  2. 完全禁用集成的ndkBuild,然后設置

     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 } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM