1

每一個Android搖籃編譯環境:定製主動用香精的gradle特定任務的構建過程

我目前從本地version.properties讀我的版本代碼和版本名稱通過「readVersions」 gradle這個任務文件。我正在爲我的應用添加風味。這些口味需要不同的版本。所以我正在考慮在特定於風味的「res」和「src」目錄旁邊放置兩個不同的version.properties文件在特定於風味的目錄(例如一個/ version.properties,兩個/ version.properties)中。

我有一個readVersions任務:

task readVersions() { 
    def Properties versionProps = new Properties() 
    def versionPropsFile = file('version.properties') 
    if (versionPropsFile.exists()) 
     versionProps.load(new FileInputStream(versionPropsFile)) 
    def v_code = (versionProps['VERSION_CODE'] ?: "0").toInteger() 
    def v_name = versionProps['VERSION_NAME'] 

    // Set 
    versionCode v_code 
    versionName v_name 
} 

project.afterEvaluate { 
    preBuild.dependsOn readVersions 
} 

我想有一個新的readVersions任務結合的味道,這樣我可以在「味道」內訪問「version.properties」文件中使用它目錄。

我曾嘗試:

android.productFlavors.all{ flavor -> 
    task ("${flavor.name}_readVersions")<<{ 
    def versionPropsFile = file(flavor.name+'/version.properties') 
... 

但後來我不知道怎麼去活動風味的任務期間,「預生成」的步驟來運行。

概念我想這一點:

project.afterEvaluate { 
    preBuild.dependsOn ${active_flavor}_readVersions 
} 

對於那些誰建議重組並尋找簡單解決方案。我的構建過程當前對這些version.properties文件有其他依賴關係。我可以只定義在兩個地方的版本號和版本的名稱(例如裏面的「味道」,以及風味的version.properties文件中,但我真的幹CONFIGS)

+0

沒有「活躍的味道」。您的'build.gradle'文件不會構建您的應用程序。你的'build.gradle'文件建立* how *的對象模型來構建你的應用程序。建立對象模型的工作。對於兩種口味您都需要'dependsOn',在適當的口味特定任務取決於您自定義口味特定任務。 – CommonsWare

+0

是的,我明白這一點。這就是爲什麼我試圖在我的「概念」描述符中強調這一部分。你明白我在做什麼?你知道如何構建一個實現我想要做的事情的對象模型嗎?如果沒有,我可以嘗試進一步定義我的目標。 – FishStix

+0

我很猶豫爲風味創建了一堆自定義的「dependsOn」,適當的風味特定任務取決於您自定義風味特定的任務。如果我最終得到10或20種口味,該怎麼辦?我只想從$ {flavor.name} /version.properties文件中獲取本地versionCode/Name。我真的需要20個自定義任務來實現這個目標嗎? – FishStix

回答

0

我拆我的「 readVersions」任務進入 「readVersionName」 和 「readVersionCode」

def getVersionName(flavor) { 
    return getVersion(flavor, "VERSION_NAME", false) 
} 
def getVersionCode(flavor) { 
    return getVersion(flavor, "VERSION_CODE", true) 
} 
def getVersion(flavor, type, intRequired) { 
    // READ 
    def Properties versionProps = new Properties() 
    def versionPropsFile = file("${flavor}/version.properties") 
    if (versionPropsFile.exists()) 
     versionProps.load(new FileInputStream(versionPropsFile)) 
    def value = versionProps["${type}"] 
    return intRequired ? value.toInteger() : value 
} 

然後,我每種口味的定義中運行它們:

productFlavors { 
    one { 
     versionName getVersionName("one") 
     versionCode getVersionCode("one") 
    } 
    two { 
     versionName getVersionName("two") 
     versionCode getVersionCode("two") 
    } 

有一點要注意,我的預vious嘗試試圖將versionName和versionCode設置合併到preBuild任務的依賴項中。看起來在這個過程中,'versionName'不能再被正確設置。我的任務不是從正確的風格來設置它,這就是爲什麼我想出了另一種解決方案,但是在設置它之後閱讀它總是'空'。

謝謝CommonsWare的意見和建議。

相關問題