在開發(fā)的過程中,由于經(jīng)常切換開發(fā)環(huán)境和線上環(huán)境,對應(yīng)的開發(fā)出來的包也是Debug和Release兩個版本。由于Android只允許一臺手機(jī)安裝包名唯一的APP,所以難免在切換環(huán)境的時候,來回的刪除再安裝。
原理
為了想解決這個問題,昨天我著手將自己的APP配置了下,已經(jīng)完美可以實(shí)現(xiàn)兩個版本共存了。用到的,其實(shí)是Gradle的靈活性。
既然上面已經(jīng)說了,Android系統(tǒng)默認(rèn)只能安裝一個包名相同的APP,那要想同時安裝兩個APP,所要做的操作就很簡單了。讓Debug和Release產(chǎn)生出不一樣的包名就可以搞定。
實(shí)現(xiàn)
順著這個思路,我們只需要利用Gradle的特性就可以完成。在默認(rèn)的情況,我們是可以通過Gradle配置來實(shí)現(xiàn)分版本打包簽名。
`android{
signingConfigs {
debug {
}
release {
storeFile file(“x.keystore")
storePassword “x”
keyAlias “x”
keyPassword “x”
}
}
buildTypes {
debug {
minifyEnabled false
signingConfig signingConfigs.debug
}
release {
minifyEnabled false
zipAlignEnabled false
signingConfig signingConfigs.release
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
`
類似于上面這樣,我們可以在buildType的debug選項(xiàng)里面,加入:
applicationIdSuffix ‘.debug’ //在applicationId后面添加.debug
這樣,通過Debug打出來的包就和Release的包有不同的包名了,自然手機(jī)就可以安裝兩個版本的APP了。
進(jìn)階
通過上面的步驟,已經(jīng)可以實(shí)現(xiàn)我們最初的要求了,但是在實(shí)際體驗(yàn)中,感覺并不是特別舒服,因?yàn)閮蓚€APP都有一樣的名字和圖標(biāo),很難分清。因此,我們再近一步。
我們可以在app/src目錄里面新建一個debug目錄,在這個debug目錄中,創(chuàng)建一個res資源文件夾,類似于main里面的res。通過設(shè)置這個資源文件夾中的values/strings.xml或者mipmap中的圖片,以達(dá)到debug版本修改APP名稱和圖標(biāo)的目的。
最終的目錄結(jié)構(gòu)如下圖:

這樣,打包出來的Debug和Release版本分別有自己的圖標(biāo)和名稱了,方便我們區(qū)別和使用了。