Android Studio多渠道打包,簡單詳細

剛剛看了掘金一篇多渠道打包,各類依賴。貌似複雜了,本人csdn上好久的一遍文章和你們分享

我的理解:

  • 需求1:當android app須要上架多個平臺時,須要記錄平臺渠道,用於數據統計。(曾經公司有12個渠道,一個個打包絕對把你累壞。配置好後,一鍵生成,你只須要傻傻等着。和UI小姐姐聊聊天)
  • 需求2:同理當你有不少測試環境,固然能夠經過這種方式

接下來進入主題,讓你享受非通常的感受;這個方式針對as 3.0以上,若是有人還在用3.0如下的as,打包方式不一樣,歡迎留言!java

步驟 1:

首先,來到你的AndroidMainfest.xml文件下android

<meta-data android:name="ATMAN_CHANNEL" android:value="${ATMAN_CHANNEL_VALUE}" />
複製代碼

這裏的ATMAN_CHANNEL 和ATMAN_CHANNEL_VALUE 都是本身本身自定義的。用於在代碼裏獲取你須要的那些渠道號。bash

步驟 2:

其次來到你的App下build.gradle的android根標籤下加上你要的渠道號;這裏我就打開了2個渠道:brain,uc;按你本身的須要,我這裏是展現app

flavorDimensions "mark" //至關於一個標記
    productFlavors {
        brain { dimension "mark" }
        uc { dimension "mark" }
// yingyongbao { dimension "mark" }
// xiaomi { dimension "mark" }
// "360m" { dimension "mark" }
// oppo { dimension "mark" }
//
// huawei { dimension "mark" }
// meizu { dimension "mark" }
// vivo { dimension "mark" }
// sougou { dimension "mark" }
// lianxiang { dimension "mark" }
// zongbao { dimension "mark" }

    }

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

複製代碼

好了你已經完成了全部配置,你敢信。

接下來就是打包了,爲了apk包名清晰,我們把打出來的包名規範下,在上面配置多渠道的地方加上測試

//自定義打包時apk名字
    android.applicationVariants.all { variant ->
        variant.outputs.all {
            // abc_渠道名_版本名.apk  還能夠拼接其餘app內容:variant.versionCode  variant.buildType.name
            outputFileName = "GreenVolley_${variant.name}_${variant.versionName}_${new Date().format("yyyy-MM-dd")}.apk"
        }
    }
複製代碼

看到這裏你也知道,出來的包名是什麼了。gradle

來開心的打包吧:

在你Android Studio 右上角有個Gradle的按鈕,點擊打開: ui

打開後,接下來的操做步驟是;點擊你的項目名,而後點擊app,再點擊build,最後打開以下圖:spa

這裏羅列了一系列;

  • 一、我當前選中的 assembleRelease  意思就是打包線上版,假如你多渠道號設置了幾個,這裏點擊這個建,就會一鍵打多少個渠道包;
  • 二、固然你往下看還有個 assembleUc ,點擊這個按鈕,意思就打UC渠道這一個線上包

接下來舉個例子,若是是要數據統計這些渠道號,確定是要獲取這些渠道號的值,你只須要這樣:code

//測試多渠道打包
ApplicationInfo appInfo = null;
try {
    appInfo = App.getContext().getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
String app_version = appInfo.metaData.getString("ATMAN_CHANNEL");
LogUtils.i("我試試看吧當前是什麼", app_version + "=========");
複製代碼

以uc包爲例子,輸出的結果是:

其實教程早已經結束,這只是驗證一下。若是是區分環境,你大可這樣作,uc標籤下是一個環境,當渠道號獲取爲uc的時候,你在代碼裏再取這個環境的域名。(若是對你有幫助,請點個贊鼓勵下技術小學生吧)orm

相關文章
相關標籤/搜索