RroductFlavors 多渠道打包 配置不同的包名、桌面图标、引导页、java代码等
生活随笔
收集整理的這篇文章主要介紹了
RroductFlavors 多渠道打包 配置不同的包名、桌面图标、引导页、java代码等
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里寫自定義目錄標題
- RroductFlavors
- 然后就進行我們多個appid 及 icon等 配置
- 清單文件
- 更改資源文件
- 動態java文件、代碼
- 打包
- 配置完key后 就輪到打包了
- 打包
RroductFlavors
google 的 RroductFlavors 適用于app定制化等需求,可動態配置圖標、資源、代碼等
配置RroductFlavors 在AS3.0以上 需先設置 flavorDimensions
android {defaultConfig {flavorDimensions "App" // 這里的名字好像隨意,不是很清楚作用 -。-!} }然后就進行我們多個appid 及 icon等 配置
android{productFlavors{app1{//如果這里沒有配置 appId、 versionCode等信息 則取“defaultConfig”里面的默認值applicationId "com.demo.one"versionCode 20190223versionName "1.1.4"// 動態添加字符串資源到 strings.xml 跟直接在strings.xml 用法一致resValue "string", "mapp_name", "App1"// 定義常量 相當于 public static final String 可通過代碼 “BuildConfig.APP_DIR” 調用buildConfigField "String" , "APP_DIR" , '"app1"'buildConfigField "int" , "APP_TYPE" , "1"buildConfigField "Boolean", "ENVIRONMENT", "true"// 清單文件 需要動態設置的內容 需在此配置manifestPlaceholders = [UMENG_CHANNEL_VALUE: "app1",app_icon : "@mipmap/logo",]}app2{applicationId "com.demo.two"versionCode 1versionName "1.2.1"resValue "string", "mapp_name", "App2"buildConfigField "String" , "APP_DIR" , '"app2"'buildConfigField "int" , "APP_TYPE" , "2"buildConfigField "Boolean", "ENVIRONMENT", "false"manifestPlaceholders = [UMENG_CHANNEL_VALUE: "app2",app_icon : "@mipmap/logo",]}} }清單文件
如桌面圖標 可以通過 android:icon="${app_icon}" 設置 主題、應用名等均可動態配置,但清單文件里更換資源 需在build.gradle配置,其它布局資源則只需要放置在不同的res對應文件內即可
<applicationandroid:allowBackup="true"android:icon="${app_icon}"android:label="@string/mapp_name"android:roundIcon="${app_icon}"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"></activity></application>更改資源文件
如下圖 ,不同的appid 可創建文件夾與mian文件夾同級,且里面的文件夾路徑需與main文件夾里面的“完全一致”方可生效,在運行時相同名字的資源會自動覆蓋,諾在對應的文件夾找不到相應名稱的資源文件,則會自動匹配main文件夾下面的資源文件(例如: app1 的mipmap里面沒有bg.jpg , 則會自動采用main里面的pg.jpg作為app1的資源),注意:java文件不會自動合并,且不能重復,如果java文件也需要動態配置,則main里面不能有動態的java文件,動態的java文件在main以外的文件夾都需要包含有。
動態java文件、代碼
打包
配置完key后 就輪到打包了
配合打包后的apk的命名,那樣我們就不需要打包完后再自己去命名啦~
android{// 打包命名applicationVariants.all { variant ->variant.outputs.all { output ->def outputFile = output.outputFileif (variant.buildType.name.equals('release')) {//生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk//可自定義自己想要生成的格式def fileName = "${variant.productFlavors[0].resValues.get("mapp_name").value}_V${variant.productFlavors[0].versionName}_${releaseTime()}.apk" // output.outputFile = new File(outputFile.parent, fileName)def outFile = output.outputFileif (outFile != null && outFile.name.endsWith('.apk')) {outputFileName = fileName // output.outputFile 改為 outputFileName}}else if(variant.buildType.name.equals('debug')){def fileName = "${variant.productFlavors[0].resValues.get("mapp_name").value}_V${variant.productFlavors[0].versionName}_${debugTime()}_debug.apk"def outFile = output.outputFileif (outFile != null && outFile.name.endsWith('.apk')) {outputFileName = fileName // output.outputFile 改為 outputFileName}}}} }def releaseTime() {return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC+8")) } def debugTime() {return new Date().format("MMdd HH.mm", TimeZone.getTimeZone("UTC+8")) }打包
雙擊對應的項就可以打包了
demo下載
總結
以上是生活随笔為你收集整理的RroductFlavors 多渠道打包 配置不同的包名、桌面图标、引导页、java代码等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB.NET读取数据库时多线程显示进度条
- 下一篇: 代理服务概述