最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 多渠道(友盟)打包教程分享

 更新時間:2020年03月19日 15:23:11   作者:威威貓  
這篇文章主要介紹了Android 多渠道(友盟)打包教程分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我們在 app 正式發(fā)布的時候一定會使用正式簽名的方式來打包,這種方式只能生成唯一的一個包,但是如今的應(yīng)用商店非常多,如:小米、OPPO、360、百度、豌豆莢、應(yīng)用寶等等。而我們只有一個 apk 文件要投入到這么多的應(yīng)用商店中去,如果你的公司不需要統(tǒng)計每個應(yīng)用商店的實際下載使用量的話,那倒是不會有這樣的問題。

但是,如果你的公司就是需要統(tǒng)計每個商店的實際下載使用情況,那么你將如何去識別當(dāng)前用戶是從哪一個商店下載來的呢?出現(xiàn)問題原因是:我們使用的 apk 安裝包當(dāng)前僅有一個。

假設(shè),我們可以向 apk 內(nèi)植入一個字符串,比如我給發(fā)布到小米商店的 apk 中植入“xiaomi” ,然后拷貝一份 apk 安裝包發(fā)布到小米商店中,給百度植入“baidu”,然后也拷貝一份發(fā)布到百度商店中,然后通過 JAVA 代碼在用戶從某一個商店中下載并使用時,我獲取這個字符串,然后返回給后臺,這不就可以知道用戶從哪個商店下載了嗎!

多渠道就是指我們的應(yīng)用程序可以從不同的商店下載,不同的應(yīng)用商店就是不同的渠道。那你可能會有疑惑,我們?yōu)槭裁匆烙脩魪哪膫€渠道下載的呢?

這個問題其實與利益息息相關(guān),你這樣想。假如你寫一個 app 發(fā)布到不同的商店上,你肯定會關(guān)注究竟哪一個商店的用戶使用量比較多、下載量比較大的問題,你可能手頭沒有那么多經(jīng)濟去每一個商店平臺都推廣你的 app ,所以你要記錄哪個商店用戶量最大,然后著重推廣。

友盟打包

說了這么多,相信你已經(jīng)明白多渠道打包的重要性了。既然我們可以向每一個 apk 中植入一個標志這商店名稱的字符串,那么如果一個一個的來的話,顯然是一個龐大的工作,沒有多大實際意義,而且 apk 文件是無法直接向里面添加一個外部文件的,你需要其他的手段來實現(xiàn),那么我們先來看友盟多渠道打包的方式。

友盟的實現(xiàn)方式是通過 xxx.keystore 文件來進行一個一個的壓包,通過代碼的方式來分別生成一個你指定的應(yīng)用商店的對應(yīng) apk 文件。這種方式會比較慢,如果你的需求是要投入到幾百上千個商店的話,顯然生成文件的速度會非常慢。但如果你的需求量在幾十上百,我建議你可以使用友盟來打包,公司也通常使用這種方式。

那么我們看看如何實現(xiàn)吧!

一、引入友盟支持

在工程列表(AndroidManifest.xml)文件中加入友盟提供的支持,這個與 Activity 并列層級。

<!-- 添加友盟支持 -->
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

二、添加閉包

然后在 app 的 build.gradle 中添加以下代碼,目的是為了生成對應(yīng)的應(yīng)用商店的 apk ,添加位置在 android 閉包下,以下代碼不難理解。

注意:在 gradle 中是無法使用數(shù)字開頭的名字,所以你應(yīng)該懂得變更一下。

 //友盟閉包
 productFlavors {
 wandoujia {}
 xiaomi {}
 baidu {}
 yingyongbao {}
 //注意 360:gradle 中不能以數(shù)字開頭
 _360{}
 }
 productFlavors.all { flavor ->
 flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
 }

這里注意一下,也許你會報這個錯誤:

ERROR: All flavors must now belong to a named flavor dimension.

解決方法就是在上面的 defalutConfig 閉包中添加內(nèi)容:

flavorDimensions "versionCode"

然后再同步一下就沒有問題了。

三、簽名打包

接下來就是打包的過程了,很簡單,我們只需要選中如下圖中的各個應(yīng)用商店的版本即可,然后它就會在你設(shè)定的目錄下生成對應(yīng)的 apk 文件了。

如果對簽名打包不懂的可以看這篇文章:Android App正式簽名打包流程

這就是我的項目生成的對應(yīng)的 apk 文件所在的文件夾,點進去就會看到安裝包啦。

四、添加版本號

當(dāng)然了,你可能希望加入當(dāng)前 app 的開發(fā)版本號,這樣就對每個版本升級時所用的 apk 包就一目了然了。這是你需要把當(dāng)前 app build.gradle 中的 deflautConfig閉包下的 versionName 給設(shè)置到打包生成的 apk 名中。那代碼是這樣的:

 //為多渠道包添加 app 版本號
 applicationVariants.all { variant ->
 variant.outputs.all { output ->
  def outputFile = output.outputFile
  if (outputFile != null && outputFile.name.endsWith(".apk")) {
  def fileName = outputFile.name.replace(".apk", "-${ defaultConfig.versionName }.apk")
  outputFileName = fileName;
  }
 }
 }

這是一段 groovy 語言,通常在 jvm 中使用,可以很好的和 java 代碼配合。你只需要將它添加到剛剛寫的友盟閉包后面就可以了,如這樣:

然后你再一次打包一下,就可以在目錄中看到 apk 文件了,一個是剛剛沒有添加的默認版本,一個是擁有版本號。

注意:這里會有一個警告信息,內(nèi)容是這樣:

WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.It will be removed at the end of 2019.

它是說這個 API 在 2019 年末將要被替換成后面的一個,不過別擔(dān)心,只要你在升級 gradle 的時候注意一下就好了,在未來它要被替換的時候,你也要做出相應(yīng)的更改!

五、獲取渠道信息

到目前為止,我們還沒真正的看到這樣打包有什么用處。不著急,我們需要將每個 apk 文件發(fā)布到對應(yīng)的商店以后才需要獲取這個字符串,這樣才能夠真正的識別用戶在哪個商店中下載來的,然后在用戶使用量最大的商店中去大力推廣。那么如何獲取這個字符串呢?

我就簡單一點,在 MainActivity 中直接獲取這個字符串了,在實際開發(fā)中,顯然是要把這個信息傳給后臺進行統(tǒng)計的,不然沒有任何意義。我們的獲取代碼如下:

還記得我們在 meta-data 中定義了 UMENG_CHANNEL 屬性的名字嗎,現(xiàn)在我們就可以利用它來獲取 字符串 了。

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
 
public class ChannelUtil {
 public static String getChannel(Context context) {
 PackageManager pm = context.getPackageManager();
 ApplicationInfo appInfo = null;
 try {
  appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
  return appInfo.metaData.getString("UMENG_CHANNEL");
 } catch (PackageManager.NameNotFoundException e) {
  e.printStackTrace();
 }
 return "";
 }
}

然后我在啟動 app 的時候使用 toast 驗證一下是否如我們想象的一樣:


獲取渠道信息

結(jié)果沒錯,相信大家已經(jīng)明白了多渠道打包的作用了,它的本質(zhì)就是在簽名打包的時候嵌入一個字符串,通過不同的 apk 包對應(yīng)不同的商店名,然后上傳到相應(yīng)的商店,最后獲取這個字符串值返回給后臺。那么,本篇關(guān)于多渠道打包的內(nèi)容就這樣講完了。

以上這篇Android 多渠道(友盟)打包教程分享就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android日期選擇控件使用詳解

    Android日期選擇控件使用詳解

    這篇文章主要為大家詳細介紹了Android日期選擇控件的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Android自定義View仿QQ運動步數(shù)效果

    Android自定義View仿QQ運動步數(shù)效果

    這篇文章主要為大家詳細介紹了Android自定義View仿QQ運動步數(shù)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android 使用Vibrator服務(wù)實現(xiàn)點擊按鈕帶有震動效果

    Android 使用Vibrator服務(wù)實現(xiàn)點擊按鈕帶有震動效果

    這篇文章主要介紹了Android 使用Vibrator服務(wù)實現(xiàn)點擊按鈕帶有震動效果,,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)火鍋工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 可支持快速搜索篩選的Android自定義選擇控件

    可支持快速搜索篩選的Android自定義選擇控件

    這篇文章主要為大家詳細介紹了可支持快速搜索篩選的Android自定義選擇控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android自定義View的三種實現(xiàn)方式總結(jié)

    Android自定義View的三種實現(xiàn)方式總結(jié)

    本篇文章主要介紹了Android自定義View的三種實現(xiàn)方式總結(jié),非常具有實用價值,需要的朋友可以參考下。
    2017-02-02
  • Android中絕對音量和相對音量設(shè)置

    Android中絕對音量和相對音量設(shè)置

    大家好,本篇文章主要講的是Android中絕對音量和相對音量設(shè)置,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 解析ADT-20問題 android support library

    解析ADT-20問題 android support library

    本篇文章是對ADT-20問題 android support library進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Android實現(xiàn)秒表功能

    Android實現(xiàn)秒表功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)簡易秒表功能,具備啟停功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • android編程之多線程編程實例分析

    android編程之多線程編程實例分析

    這篇文章主要介紹了android編程之多線程編程,實例分析了Android多線程程序設(shè)計的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Android?Studio?2022.1.1創(chuàng)建項目的Gradle配置問題

    Android?Studio?2022.1.1創(chuàng)建項目的Gradle配置問題

    這篇文章主要介紹了Android?Studio?2022.1.1創(chuàng)建項目的Gradle配置問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論

米泉市| 扶沟县| 湛江市| 沈丘县| 迭部县| 微山县| 璧山县| 南康市| 深圳市| 雷山县| 仁寿县| 乐至县| 潞西市| 张家口市| 昭平县| 新闻| 黔江区| 蓝田县| 云安县| 大埔县| 确山县| 寿宁县| 高碑店市| 德惠市| 景谷| 叙永县| 开原市| 通辽市| 富民县| 泗阳县| 天津市| 商洛市| 江源县| 三江| 平阴县| 南通市| 临桂县| 建平县| 汤原县| 山阳县| 海淀区|