在過去的半年時間中瞬欧,由于行業(yè)大環(huán)境的惡化,App產(chǎn)品需求一直處于停滯狀態(tài)罢防,接到的都是市場導向的馬甲包需求艘虎。隨著馬甲包的不斷增多,build.gradle文件的內(nèi)容長度開始變得難以接受咒吐,于是優(yōu)化之旅隨之展開顷帖。
優(yōu)化前
如圖所示由于我們采用的是productFlavor來制作馬甲包渤滞,所以造成build.gradle變長的元兇也就是productFlavor節(jié)點贬墩,這一次的優(yōu)化也就針對它來進行。
在我們的APP中妄呕,針對每個馬甲包配置的第三方key或其它屬性共有22個陶舞,當馬甲包數(shù)量到達10個之后,單這部分配置就達到了近300行绪励,每次要新增加一個馬甲肿孵,需要費不少時間在龐大的文件中找到空間去新增配置,且在一大堆文字當中疏魏,容易遺漏需要修改的配置停做。
優(yōu)化后
在Android項目中的properties大閱兵一文中,我曾為了實現(xiàn)脫敏將一些Key放到local.properties中大莫,然后在build.gradle中去動態(tài)讀取蛉腌。這一次依然可以用這種形式,將這些配置抽到獨立的配置文件中以供讀取。
創(chuàng)建product對應的配置文件
首先烙丛,在項目根目錄下創(chuàng)建一個config目錄來規(guī)整馬甲包的配置文件舅巷。然后在config目錄下,創(chuàng)建若干命名格式為${flavor_name}_config.properties的配置文件河咽。最后將每個馬甲的參數(shù)以Key=Value的形式配置到對應的文件中钠右,并刪除build.gradle中的這些配置。
注意忘蟹,${flavor_name}必須和build.gradle中的productFlavors的key保持一致飒房,否則會造成無法正確讀取到配置。
修改build.gradle
在完成配置文件的創(chuàng)建工作之后媚值,就需要在build.gradle中根據(jù)需要去讀取這些配置了情屹,這里不多做解釋,直接上代碼:
android {
flavorDimensions "default"
productFlavors {
product1 {}
product2 {}
product3 {}
}
productFlavors.each { flavor ->
def props = new Properties()
file("../config/${flavor.name}_config.properties").withInputStream { props.load(new InputStreamReader(it,"utf-8")) }
flavor.dimension "default"
def application_id = props.getProperty("application_id")
def app_name = props.getProperty("app_name")
def color_primary = props.getProperty("color_primary")
def color_accent = props.getProperty("color_accent")
def primary_text_dark = props.getProperty("primary_text_dark")
def version_name = props.getProperty("version_name")
def scheme = props.getProperty("scheme")
def gio_project_id = props.getProperty("gio_project_id")
def gio_scheme = props.getProperty("gio_scheme")
def um_key = props.getProperty("um_key")
def amap_key = props.getProperty("amap_key")
def jpush_key = props.getProperty("jpush_key")
def bugly_key = props.getProperty("bugly_key")
flavor.applicationId application_id
flavor.versionName version_name
flavor.manifestPlaceholders = [
JPUSH_PKGNAME : application_id,
ROUTER_SCHEME : scheme,
JPUSH_APPKEY : jpush_key,
growingio_url_scheme: gio_scheme,
UM_KEY : um_key,
AMAP_KEY : amap_key
]
flavor.resValue "color", "colorPrimary", color_primary
flavor.resValue "color", "colorAccent", color_accent
flavor.resValue "color", "primary_text_dark", primary_text_dark
flavor.resValue "string", "app_name", app_name
flavor.resValue "string", "growingio_project_id", "\"${gio_project_id}\""
flavor.resValue "string", "growingio_url_scheme", gio_scheme
flavor.buildConfigField "String", "AMAP_KEY", "\"${amap_key}\""
flavor.buildConfigField "String", "ROUTER_SCHEME", "\"${scheme}\""
flavor.buildConfigField "String", "UM_KEY", "\"${um_key}\""
flavor.buildConfigField "String", "BUGLY_KEY", "\"${bugly_key}\""
}
這里需要注意的是杂腰,在將配置文件加載到Properties中時垃你,必須要明確定義charset_name,否則中文會出現(xiàn)亂碼喂很。
最后
經(jīng)過上面的一系列修改惜颇,最終得到的效果是,build.gradle內(nèi)容長度從500+降低到300-少辣,且后續(xù)有新馬甲需求的時候凌摄,該文件只會增加1行/馬甲包。