這里要用到 productFlavors ,productFlavors 可以用來自定義應用構建版本
在 build.gradle文件中 android 目錄下添加 以下代碼即可
productFlavors {
//默認,不設置 applicationId ,繼承 defaultConfig 中的配置
flavors_default {
}
//開發版本, applicationId 替換為 com.xxx.dev
flavors_dev {
applicationId "com.xxx.dev"
}
//發布版本, applicationId 替換為 com.xxx.release
flavors_release {
applicationId "com.xxx.release"
}
}
該方案通過在 AndroidManifest.xml 文件中 application 標簽下指定 <mate-data> 設置占位符來實現動態替換屬性值。
在 build.gradle文件中
注:此方式可以能會引起異常如下
Error:Execution failed for task ':app:processDebugManifest'.
>Manifest merger failed with multiple errors, see logs
此問題產生原因大概有三個:
1.清單文件有錯,這種錯不會在編譯時指出來,當然as中還是可以看到的
2.引入的三方包存在相同的label icon 等名字
解決:清單文件用tools
然后添加 replace字段
如 tools:replace="icon,label" 即可
在 main 的同級目錄下創建以渠道名命名的文件夾,然后創建資源文件(路徑要與 main 中的一致),然后打包的時候 gradle 就會自己替換或者合并資源。
例如, App 的默認 icon 路徑為 main\res\mipmap-hdpi\ic_launcher.png ,那么 flavors_dev的路徑就為 flavors_dev\res\mipmap-hdpi\ic_launcher.png ,打包 flavors_dev 渠道的時候會自動替換圖片。同理assets中文件如下:
使用 BuildConfig 的變量
當我們定義如下字段之后,編譯后自動生成文件,在 app/build/source/BuildConfig/dev/com.xxx.dev/BuildConfig 目錄,
打開這個文件,我們就能看到我們所定義的字段了。
1.設置字段 使用 buildConfigField
設置好后編譯一下,咦,什么鬼,怎么出錯了?
明明設置的字符串怎么會這樣,好了這是我們需要注意的地方,設置值需要這樣寫
它的意思是 "default" 這個整體是屬于一個字符串,然后在編譯一下
恩,ok
2.使用字段
常用命令 看這里
gradlew assembleDebug
打包所有渠道的 debug 版本
gradlew assembleRelease
打包所有渠道的 release 版本
gradlew assembleflavors_devRelease
單獨打包 flavors_dev 的 release 版本
gradlew assembleflavors_devDebug
單獨打包 flavors_dev 的 Debug 版本
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。