最近有個教育類項目,需要四個app端,主題樣式差不多有不少公共代碼,如果創建四個AS工程,不利與代碼管理且後期維護的難度加大。本着面向度娘編程的原則搜索了一波解決辦法,發現gradle自帶的productFlavors差異化打包工具 這個好東西,有效解決我以上問題,記錄一下踩坑過程。
一. 配置productFlavors
在build.gradle(app)文件中:
配置了 parents 和 school 家長和學校端 ,配置各端applicationId...屬性,則學校端包名爲com.xxx.xxx.parents,註冊第三方appkey時需使用該包名
1. manifestPlaceholders : 配置不同屬性:
在mian-AndroidManifest.xml中使用manifestPlaceholders 中定義的屬性值(公共權限、公共組件註冊、第三方Appkey配置在該文件中)
2.buildConfigField:自定義區分 (公共代碼中區分是哪一個app在運行)
可以通過 BuildConfig.FLAVOR 或 buildConfigField自定義的名字區分
3. implementation / schoolimplementation: 全部依賴第三方庫/ 僅家長端依賴
二. 創建工程結構
紅色爲默認main包,裏面寫一些公共utils,application,base基類...等。手動新建如果紫色main同級parents工程目錄
三. 快樂編碼
注意事項:
子項目(school)中代碼可以調用公共類(main)中的代碼,公共類中不能出現調用子項目的代碼
四. 調試、打包
選擇不同子項目調試
一起打包