Android多渠道打包修改應用名,圖片資源

        這兩天爲一個App打包準備發佈上架,有幾十個渠道,須要爲每一個渠道做一些修改,好比應用名稱圖標,如今把過程當中遇到的問題及解決方法記錄下來,以備後需。java

       如下是須要修改的地方:android

  1. 修改包名
  2. 渠道商信息
  3. 修改應用名
  4. 修改圖標、圖片資源

        之前也作過相似的修改包名之類的字符串這類的小改動,問題不大,此次遇到的問題是, 須要爲各個渠道配置不一樣的應用圖標和啓動頁,這是之前沒有作過的。下面是每一個點解決方法。app

    一、修改包名。gradle

    修改包名是這四個中最簡單的,只須要在 productFlavors 中 的每一個渠道里重寫 applicationId:ui

productFlavors {
    hello{
        applicationId "com.xxx.xxxx"
    }
}

    二、渠道商信息server

    不一樣渠道商信息的配置其實和修改包名差很少,不一樣的是它的格式是,好比配置一個渠道商ID,用buildConfigField "int", "AGENT_ID", "1",這樣編譯後在BuildConfig文件下生成:public static final int AGENT_ID = 1;而後你就能夠BuildConfig.AGENT_ID 這樣引用。渠道商名稱的話用buildConfigField "String", "AGENT_NAME", "\"xx\""。這樣生成public static final String AGENT_NAME = "xx";xml

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    buildConfigField "int", "AGENT_ID", "1"//渠道商ID
    buildConfigField "String", "AGENT_NAME", "\"Ahello\""//渠道商名稱
}

    三、修改應用名blog

    修改應用名就不像上面那麼簡單,不過查了一下也不難。使用的是:resValue "string", "你要設置的key", "你要設置的值"圖片

resValue "string", "app_name", "Ahello"

須要注意的是這個是resValue 是增長一個值,若是你在string.xml中已經有一個app_name,請先刪除,不然編譯不過。資源

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    buildConfigField "int", "AGENT_ID", "1"//渠道商ID
    buildConfigField "String", "AGENT_NAME", "\"Ahello\""//渠道商名稱
    resValue "string", "app_name", "Ahello"//應用名
    resValue "string", "copyright", "Ahello @ 2018"
    resValue "string", "customer_server_phone_number", "財富熱線:110110"
}

    四、修改圖標、圖片資源

    修改圖片資源花費的時間最多,我先想到的兩種方案,第一把要修改的圖標按渠道商命名,而後所有丟到drawable裏。而後修改AndroidManifest.xml裏android:icon="${app_icon}"

<application
    android:name="com.xxx.xxx"
    android:allowBackup="true"
    android:icon="${app_icon}"
    android:label="@string/app_name"
    android:supportsRtl="false"
    tools:replace="android:supportsRtl,android:label"
    android:theme="@style/AppTheme.NoActionBar">

在gradle裏則加manifestPlaceholders = [app_icon: "@drawable/logo_xxxx"]

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    buildConfigField "int", "AGENT_ID", "1"//渠道商ID
    buildConfigField "String", "AGENT_NAME", "\"Ahello\""//渠道商名稱
    resValue "string", "app_name", "Ahello"//應用名
    resValue "string", "copyright", "Ahello @ 2018"
    resValue "string", "customer_server_phone_number", "財富熱線:110110"
    manifestPlaceholders = [app_icon: "@drawable/logo_xxxx"]//應用圖標
}

可是這種方法有一個顯而易見的缺點,就是A渠道包裏憑空多了幾十個其餘渠道包的圖片,形成了apk包過大,這不是我想要的結果。

而後第二種方法是,爲不一樣的渠道拉分支,這樣能夠避免apk過大問題,而且以上這些配置均可以省,可是拉分支就不能批量打包,一個個打太麻煩了。果斷放棄。

        而後問了朋友有沒有解決方法,朋友能夠分渠道建文件夾,把圖片同一命名分別放到各渠道文件夾,而後gradle裏寫sourceSets

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    sourceSets {
        Ahello {
            res.srcDirs = ['src_custom/Ahello/res']
        }
    }
}

這種方法能夠有效解決換圖片問題,同時,還能夠替換assets文件夾文件,甚至java類文件

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    sourceSets {
        Ahello {
            res.srcDirs = ['src_custom/Ahello/res']//替換res文件
            rassets.srcDirs = ['src_custom/Ahello/assets']//替換assets文件
            java.srcDirs = ['src_custom/Ahello/java']//替換java類文件
        }
    }
}

因此最後的完整修改是:

Ahello {
    applicationId "com.xxx.xxxx"//修改包名
    buildConfigField "int", "AGENT_ID", "1"//渠道商ID
    buildConfigField "String", "AGENT_NAME", "\"Ahello\""//渠道商名稱
    resValue "string", "app_name", "Ahello"//應用名
    resValue "string", "copyright", "Ahello @ 2018"
    resValue "string", "customer_server_phone_number", "財富熱線:110110"
    manifestPlaceholders = [app_icon: "@drawable/logo_xxxx"]//應用圖標
    sourceSets {
        Ahello {
            res.srcDirs = ['src_custom/Ahello/res']//替換res文件
            rassets.srcDirs = ['src_custom/Ahello/assets']//替換assets文件
            java.srcDirs = ['src_custom/Ahello/java']////替換類文件
        }
    }
}

我以爲每一個渠道都寫一個sourceSets,再從新寫渠道名,這樣寫有點麻煩,就把sourceSets這部分單獨拿出來放到defaultConfig裏。固然這兩種寫法各有缺點,看我的習慣。

        這裏有個小插曲,我在爲不一樣渠道建立文件時,無心發現android studio已經爲上述問題提供瞭解決方案。具體是這樣的:項目右鍵-->new-->Android Resource Directory.

     

as已經內置了不一樣的類型可供選擇,而且能夠選擇渠道,省去了gradle裏手動寫配置。但也有一個問題,就是建立的文件夾跟main是同一級的,像咱們這樣有幾十個渠道,就會顯得很混亂。

        因此我最後沒有采用as內置的方法,而用上面一種。

        第一次寫,寫得有點亂,就這樣。

相關文章
相關標籤/搜索