电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:79日期:2022-09-26 10:10:11

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

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

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

多渠道就是指我們的應用程序可以從不同的商店下載,不同的應用商店就是不同的渠道。那你可能會有疑惑,我們為什么要知道用戶從哪個渠道下載的呢?

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

友盟打包

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

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

那么我們看看如何實現吧!

一、引入友盟支持

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

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

二、添加閉包

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

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

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

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

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

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

解決方法就是在上面的 defalutConfig 閉包中添加內容:

flavorDimensions 'versionCode'

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

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

三、簽名打包

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

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

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

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

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

四、添加版本號

當然了,你可能希望加入當前 app 的開發版本號,這樣就對每個版本升級時所用的 apk 包就一目了然了。這是你需要把當前 app build.gradle 中的 deflautConfig閉包下的 versionName 給設置到打包生成的 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 代碼配合。你只需要將它添加到剛剛寫的友盟閉包后面就可以了,如這樣:

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

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

注意:這里會有一個警告信息,內容是這樣:

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

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

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

五、獲取渠道信息

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

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

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

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 驗證一下是否如我們想象的一樣:

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

獲取渠道信息

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

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

標簽: Android
相關文章:
主站蜘蛛池模板: 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 阁楼货架_阁楼平台_仓库仓储设备_重型货架_广州金铁牛货架厂 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 江西自考网-江西自学考试网| 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 河南凯邦机械制造有限公司| 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 干洗店加盟_洗衣店加盟_干洗店设备-伊蔻干洗「武汉总部」 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 |