2017-08-08 48 views
0

我有一個機器人模塊結構如下圖所示:Gradle android插件,如何根據不同的產品口味複製和加載不同的動態庫?

└─product module 
└─src 
    └─main 
     ├─assets 
     │ ├─flavor1 
     │ └─flavor2 
     ├─java 
     └─jniLibs 
      └─armeabi 

我定義了兩個產品的風味稱爲flavor1和flavor2在模塊的build.gradle文件,該文件夾下的src /主/資產/ flavor1 /和src /主/ asssets/flavor2是完全不同的動態庫,例如:libhelper.so。它們旨在用於不同的產品風味。

我的意圖是在Gradle構建過程中將取決於產品風味的不同動態庫複製到jniLibs/armeabi /文件夾中,這是實現該目的的一種方式嗎?

回答

0

您可以爲此創建一個gradle任務。

task copyNativeLibs { 
    Gradle gradle = getGradle() 
    Pattern pattern = Pattern.compile(":assemble(.*?)(Release|Debug)"); 
    Matcher matcher = pattern.matcher(gradle.getStartParameter().getTaskRequests().toString()); 
    def flavor = matcher.group(1) 

    if(flavor == 'flavor1') { 
    copy { 
     from '/yourlibrarypath' 
     into 'src/main/assets/flavor1/ ' 
     } 
    } else if() { 
    .... 
    } 
} 
+0

感謝您的解決方案。但是我應該在哪裏放置這個任務(使這個任務具有什麼樣的依賴性),以便在選擇產品風格之後,它可以在gradle'assemble(。*?)(Release | Debug)過程中自動運行? – andy

+0

你可以在你的build.gradle中添加這個,並且在文件末尾加上這個 'project.afterEvaluate {} {}} prebuild.dependsOn(copyNativeLibs) } 然後這個任務將作爲assemble * builds的一部分執行。 – jitinsharma

+0

工作!非常感謝。 – andy

相關問題