安卓 利用Gradle配置多渠道打包的方法

關于Gradle多渠道打包的問題

剛開始用ant的打包方式,后來換了Android-studio開發(fā)之后,就換做gradle多渠道打包,一時間確實方便了很多,配置非常簡單,打包時間跟電腦配置有很大的關系。因為一直用的是友盟統(tǒng)計,下面簡單記錄下大致的流程。

之前打包的代碼是這樣的,因為需要在調用接口的時候傳渠道號

<application> 
......
<meta-data
        android:name="UMENG_CHANNEL"
        android:value="@string/channel_id" />
......
</application>

我們知道友盟的官網(wǎng)文檔建議我們在清單文件中設置name="UMENG_CHANNEL"如下的meta-data標簽

<application> 
......
<meta-data 
     android:name="UMENG_CHANNEL" 
     android:value="${CHANNEL_VALUE}" />
......
</application>

然后我們在module中的build.gradle文件中可以設置productFlavors ,如圖

android {  
    ......
    productFlavors {
        anzhi{
            manifestPlaceholders = [UMENG_CHANNEL: "anzhi"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL: "wandoujia"]
        }
    }  
    ......
}

假如你要打很多的渠道包的情況,是不是要寫很多?現(xiàn)在我們可以用下面的快速設置

productFlavors {
    anzhi{}
    baidu {}
    wandoujia {}
}

這時候也需要加上下面這句話,意思就是包含了上面所有的渠道。

productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}

這樣我們就可以直接打包了,當然gradle打包只是將清單文件中的UMENG_CHANNEL的值更改為我們所寫的渠道號,與我們之前打包的方式不同的是String里面的值并沒有改,那么假如業(yè)務需求要在用戶注冊和充值的時候傳渠道號,怎么辦呢?給大家介紹一個常用的方法。

ApplicationInfo appInfo = null;
    try {
        appInfo = this.getPackageManager()
                .getApplicationInfo(getPackageName(),
                        PackageManager.GET_META_DATA);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    String msg = appInfo.metaData.getString("UMENG_CHANNEL");

通過這個方法可以得到清單文件中的UMENG_CHANNEL的Values,這樣的話我們的業(yè)務就可以完整實現(xiàn)了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容