AndroidStudio同一套程式碼打出不同包名的應用
今天遇到了一個問題:
之前公司申請軟著的應用名字和現在上架的應用並不是同一個,所以在上架應用商店的時候遇到了問題
老闆的意思是:我們兩個都要做,一個是給企業使用者用的,一個是給個人使用者用的
那我們也不可能另開一個專案了,所以我們只能是:一套程式碼,打兩個包,同時維護。
搜了搜有gradle配置方案來做這件事,我們需要設定的是app的build.gradle
android { productFlavors { app1 { applicationId "com.xx.xx1" // 自動生成@string/app_name為demo resValue "string","app_name","第一個app的名字" buildConfigField "int", "TYPE", "1" manifestPlaceholders = [app_icon : "@mipmap/ic_launcher", provider_name:"com.xx.xx1.fileprovider", app_round:"@mipmap/ic_launcher_round"] } app2 { applicationId "com.xx.xx2" resValue "string","app_name","第二個app的名字" resValue "string","provider_name","com.xx.xx2.fileprovider" buildConfigField "int", "TYPE", "2" manifestPlaceholders = [app_icon : "@mipmap/ic_launcher2", provider_name : "com.xx.xx2.fileprovider", app_round:"@mipmap/brand_value_icon_round"] } } }
首先是在android{}這個層級下增加productFlavors{},然後如圖所示
這裡注意:我們的目的是要把AndroidManifest.xml中的app_name 和app_icon都放到gradle中,類似於資原始檔的指向,所以在清單檔案裡,要這麼寫:
由於之前,app_name指向了strings.xml檔案中的值,我們要把這個值刪掉,指向gradle檔案中的值。
這裡要注意:由於我們的專案適配了8.0的圖示,因此你需要再做一套圖示,詳見
https://blog.csdn.net/LXStrt01/article/details/83868923
注意第二個應用的圖示叫什麼都行,但是不能叫做ic_launcher了,因為會把第一個的圖示給覆蓋掉。
然後我在這裡遇到了一個坑,就是雖然兩個應用都用了不同的圖示了,但是跑起來結果並不是。找了一番之後發現問題還是在Manifest檔案裡,
這裡也需要配置不同的圓角圖示,因此又要指向gradle檔案。
manifestPlaceholders的值是一個[]陣列,我們用逗號隔開即可定義app_icon或者是自己想定義的名字,只要和清單檔案裡寫的一樣就好了
在這些配置後,我們打包可以得到兩個app,包名不同,圖示也不同,但是仍然不能安裝到同一個手機裡,這是因為它們使用了相同的provider.不清楚這個操作的同學可以去搜一下。
好吧,我們又要提出來一個值,老規矩,gradle檔案,manifestPlaceholders,逗號隔開
這樣配置完之後,我們就可以得到兩個圖示、包名完全不同,也可以在一個手機上共存的app了。當然,如果你的專案內建了自動更新等功能,還是要考慮區分的。