首页 > 其他分享 >Android APK打渠道包实施方案

Android APK打渠道包实施方案

时间:2024-09-27 15:51:17浏览次数:7  
标签:母包 渠道 实施方案 APK ECS 存放 Android 打包

最近刚好在做Android打渠道包相关的需求,记录下心得笔记,希望给有需要的朋友一个参考。

首先,我们来理解下概念:

1、母包(就是原始的安卓包)

2、渠道标识(自定义的各个渠道标识,例如:baidu,xiaomi,uc等等)

3、渠道包(在母包中打入了渠道标识之后,生成的新安卓包)

其实就这3个东西,那么我们有了母包,有了渠道标识,如何来获取到我们需要的渠道包呢,需要用到哪些技术,哪些资源呢?这是大家最关心的点!

技术:Java、NodeJS、Python等其他语言开发的打包工具,后面会说目前流行的一些打包方案

资源:ECS服务器、对象储存、域名、CDN、Serverless、函数计算等等

 

初级思路:

1、把打包工具部署在ECS上,并部署打包需要的语言环境,java环境,Python环境,NodeJS环境等

2、母包也存放在ECS上,打好的渠道包也存放在ECS服务器上

3、根据业务策略,把ECS上打好的渠道包同步到对象存储上

4、使用CDN访问对象储存上的渠道包资源,达到加速的效果

 

通过这个思路,是可以实现最终的目的,但是方案不够完美,例如:

1、母包、渠道包存放在ECS上,需要维护存储空间

2、ECS服务器配置问题,太高吧,成本也高,太低吧,影响打包效率

3、需要自己部署和维护打包环境

我现在用的Walle这个方案跑的项目!

 

优化思路:

1、取消打包用的ECS服务器

2、母包、渠道包完全存放在对象存储里面

3、使用Serverless、函数计算服务来实现打包

 

目前流行的方案对比和说明

 

Walle:美团开发的Android Signature V2 Scheme签名下的新一代渠道包打包神器,项目地址:https://github.com/Meituan-Dianping/walle

VasDolly:腾讯开发的Android V1 and V2 Signature Channel Package Plugin,项目地址:https://github.com/Tencent/VasDolly/

ApkTool和Android Gradle Plugin:安卓开发的小伙伴应该都很熟悉了!

EdgeOne边缘APK动态打包:腾讯云 EdgeOne +腾讯云 COS + 腾讯云 SCF 产品组合在边缘实现 Android APK 多渠道的动态打包方案

渠道信息注入形式说明:

动态:无需把渠道信息真的打入到母包里面,一般是通过【加速域名+渠道标识参数】来访问母包,动态的将渠道标识插入到母包里面并返回给客户端下载

静态:需要把渠道信息真的打入到母包里面,生成一个新的渠道包

渠道信息注入端说明:

边缘:渠道信息写入的包是加速节点上的包

源站:渠道信息写入的包是源站里面的母包

 

理解了这些概念,接下里我们一起看看,EdgeOne边缘APK动态打包是如何实现的,先来一张流程图

从图上,我们可以总结出如下几个步骤:

1、原始母包(A)上传到COS

2、自动触发函数计算将原始母包处理成一个新的母包(B)

3、用户使用加速域名+渠道参数请求新母包(B)

4、触发函数计算,将渠道信息动态注入到新母包里面,得到一个渠道包(C)

5、将渠道包(C)返回给用户下载安装

 

整个过程,出现3个包,我分别用ABC来标注了

A包很好理解,就是我们的原始母包,存放在COS上

B包也好理解,就是函数计算自动处理之后得到一个新的包,也存放在COS上

C包,其实这里是不可见的,但是用户最终下载得到的就是C包,但是这个C包又没有存放在COS里面 ,那么它在哪里呢,我认为它是存放在加速节点上,缓存起来了,就像我们使用CDN访问一个图片资源一样,一旦节点上有缓存了,那么之后访问就不会到源站来访问,而是直接访问节点上的资源,所以说,C包对我们来说,其实是透明的,我们也不用过分多关注它,知道是这么回事儿就可以了。

那么这里的A包和B包有什么区别呢,这就是步骤2里面函数计算实现的功能,函数计算向A包注入了空白数据,并重新生成了一个合法的B包,为后面的C包提供了基础

这里的【注入空白数据】的相关知识,涉及到V1版本签名,V2版本签名等原理,有需要的小伙伴,自行查阅资料了解,这里不展开细说。

 

最后,获取到的渠道包如何验证和获取包体里面的渠道标识,Walle和VasDolly开发里面都有介绍!

标签:母包,渠道,实施方案,APK,ECS,存放,Android,打包
From: https://www.cnblogs.com/firstlady/p/18435922

相关文章

  • Android 监听蓝牙耳机状态
    在Android中监听蓝牙耳机的状态,尤其是连接状态、播放控制按钮(如播放/暂停、上一曲、下一曲)等交互,通常涉及到几个关键步骤和组件。下面是一个概括指南,帮助你实现这个功能:1.获取蓝牙适配器并检查权限首先,确保应用具有访问蓝牙的权限。在AndroidManifest.xml中添加以下权限:<uses-per......
  • Android热更新实践:Tinker接入指南
    Android热更新实践:Tinker接入指南在Android开发中,热更新是一种非常有用的技术,它允许开发者在不发布新版本的情况下修复bug或更新应用内容。Tinker是腾讯开源的Android热更新框架,它提供了一套完整的热更新解决方案。本文将详细介绍如何将Tinker集成到你的Android项目中。1.准备工作......
  • Android平台RTMP推送模块的设计意义
    为什么要做RTMP推送RTMP是一种广泛使用的流媒体传输协议,它允许视频和音频数据在互联网上实时、高效地传输。实现RTMP推送功能,主要是为了满足以下需求:实时性要求:RTMP协议具有低延迟的特点,适合用于需要实时交互的场景,如直播、视频会议等。通过RTMP推送,观众可以几乎实时地观看到主播的......
  • uniapp - 详解安卓App打包后使用uni.chooseLocation地址列表一直加载转圈问题,Android
    前言网上的教程都无法解决问题,本文提供强力解决方案。在uni-app安卓App平台端开发中,详解uniApp打包成Android安卓后用chooseLocation打开地图选择位置空白卡住不动问题,选择地址列表什么也没有且一直处于加载状态(永远不会加载出来卡住了),另外点击搜索框后也无法搜索地点......
  • Android 10.0 Launcher3禁止改变density等系统密度导致布局变化hotseat靠右边显示功能
    1.前言在10.0的系统rom定制化开发中,在进行launcher3的定制化功能中,在有些项目修改系统密度density的值,以后导致launcher3的布局变乱,hotseat布局成一行竖屏显示看的很不美观,接下来就看如何分析解析禁止density改变导致布局变动的功能分析2.Launcher3禁止改变density等系统密......
  • Android应用程序启动与资源加载
    Android系统中的应用程序启动与资源加载详解在Android系统中,AMS(ActivityManagerService)扮演着核心角色,负责管理应用程序的生命周期和进程调度,包括启动应用进程等关键操作。下面将详细解析AMS启动应用进程时涉及的第一个线程、代码和资源的加载过程,以及R.id.xx的加载机制......
  • Android代码调试与调优指南
    Android代码调试与调优指南在Android应用开发中,代码调试与调优不仅是确保应用稳定运行、提升用户体验的必要环节,也是开发者专业技能的重要体现。随着Android系统版本的更新和硬件设备的多样化,开发者需要掌握更加全面和深入的调试与优化技术。一、深入理解Android架构与性......
  • Android TextView对URL识别
    AndroidTextView对URL识别IM开发过程中,对文本消息中的超练级进行点击处理,使用系统的tv.setAutoLinkMask(Linkify.PHONE_NUMBERS|Linkify.WEB_URLS);方法:/***拦截超链接*/publicstaticvoidinterceptHyperLink(TextViewtv,ChatContextchatContext,......
  • android仿录音机通知
    在Android中,为了模拟一个录音机应用的通知,你需要创建一个持久的通知,当录音开始时显示出来,并且在录音过程中一直存在,直到录音结束。下面是如何实现这一点的步骤:1.创建通知渠道对于AndroidOreo(8.0)及更高版本,你需要创建一个通知渠道。privatevoidcreateNotificationChannel(){......
  • Android 移动应用开发基础案例教程——Activity的跳转
    一、Activity的创建1、创建一个新项目点击Flie--New--NewProject点击EmptyViewsActivity点击Next根据需要可修改项目名称,这里我重命名为CycActivity,然后点击Finish即可完成创建新项目。2、SecondActivity的创建点击java--->com.example.cycactivity,右键new--->A......