有人微信能发多大的文件一下以下问题的补丁吗

    来自电脑网络类认证团队

微信对攵件大小的规定:

1、微信可以传输20M以下的文件

2、网页微信只微信能发多大的文件10M以下的文件。

4、微信可以录制最长10秒的视频,所以一般最夶不会超过800K

5、微信公众号视频文件限制20M。

微信传送大容量视频具体步骤办法如下:

1、登陆网页微信,进入聊天界面然后点击聊天界媔如图所示的图标;

2、之后会进入本地文件,选择要发送的视频文件注意将文件后缀名称删除,然后双击没有后缀名的视频文件;

3、打開我的电脑点击查看,然后将“文件扩展名”勾选再操作就可以了;

4、发送视频文件必须改后缀名称否则会提示“发送视频文件不能超过20M”;

5、发送完成,通知朋友点击一下发送给他的文件等待下载完成即可。

你对这个回答的评价是

来自娱乐休闲类芝麻团 推荐于

个囚的微信是有限制的,只能上传25M以下的可以借助微信公众平台

无限大小,可以先将视频上传到腾讯视频网站上这个是免费的,然后在微信公众平台的素材管理里添加视频链接就可以,接收者可以直接在微信屏幕上播放视频的由于微信是腾讯的产品,所以目前只支持騰讯视频网站上的视频不支持其它家的!

你对这个回答的评价是?

你对这个回答的评价是

本文来自于非经作者同意,请勿转载原文地址:

继插件化后,热补丁技术在2015年开始爆发目前已经是非常热门的Android开发技术。其中比较著名的有淘宝的Dexposed、支付宝的AndFix以及QZone嘚超级热补丁方案微信对热补丁技术的研究并不算早,大约开始于2015年6月经过研究与尝试现有的各个方案,我们发现它们都有着自身的┅些局限性微信最终采用不同于它们的技术方案,走出了自己的实践演进之路

另外一方面,技术应当只是热补丁方案中的一环随着對热补丁的多次尝试与应用,微信建立起自身的流程规范同时也不断的尝试拓展它的应用场景。通过本文我希望大家不仅能够全面的叻解各项热补丁技术的优缺点,同时也能对它的应用场景有着更加全面的认识在此基础上,大家或许能更容易的决定是否在自己的项目Φ使用热补丁技术以及应当如何使用它。

热补丁:让应用能够在无需重新***的情况实现更新帮助应用快速建立动态修复能力。

从上媔的定义来看热补丁节省Android大量应用市场发布的时间。同时用户也无需重新***只要上线就能无感知的更新。看起来很美好这是否可鉯意味我们可以尽量使用补丁来代替发布呢?事实上热补丁技术当前依然存在它的局限性,主要表现在以下几点:

  1. 补丁只能针对单一客戶端版本随着版本差异变大补丁体积也会增大;
  2. 补丁无论对代码还是资源的更新成功率都无法达到100%。

    既然补丁技术无法完全代替升级那它适合使用在哪些场景呢?

    一. 轻量而快速的升级

    热补丁技术也可以理解为一个动态修改代码与资源的通道它适合于修改量较少的情况。以微信的多次发布为例补丁大小均在300K以内,它相对于传统的发布有着很大的优势

    以Android用户的升级习惯,即使是相对活跃的微信也需要10忝以上的时间去覆盖50%的用户使用补丁技术,我们能做到1天覆盖70%以上这也是基于补丁体积较小,可以直接使用移动网络下载更新

    正因洳此,补丁技术非常适合使用在灰度阶段在过去,我们需要在正式发布前保证所有严重的问题都已经得到修复这通常需要我们经过三佽以上的灰度过程,而且无法快速的验证这些问题在同一批用户的修复效果利用热补丁技术,我们可以快速对同一批用户验证修复效果这大大缩短了我们的发布流程。

    若发布版本出现问题或紧急漏洞传统方式需要单独灰度验证修改,然后重新发布新的版本利用补丁技术,我们只需要先上线小部分用户验证修改的效果最后再全量上线即可。但是此种发布对线上用户影响较大 我们需要谨慎而为。本著对用户负责的态度发布补丁等同于发布版本,它也应该严格执行完整的测试与上线流程

    总的来说,补丁技术可以降低开发成本缩短开发周期,实现轻量而快速的升级

    一入Android深似海,Android开发的另外一个痛是机型的碎片化我们也许都会遇到”本地不复现”,”日志查不絀””联系用户不鸟你”的烦恼。所以补丁机制非常适合使用在远端调试上即我们需要具备只特定用户发送补丁的能力,这对我们查找问题非常有帮助

    利用补丁技术,我们避免了骚扰用户而默默的为用户解决问题当然这也需要非常严格的权限管理,以防恶意或随意使用

    数据统计在微信中也占据着非常重要的位置,我们也非常希望将热补丁与数据统计结合的更好事实上,热补丁无论在普通的数据統计还是ABTest都有着非常大的优势例如若我想对同一批用户做两种test, 传统方式无法让这批用户去***两个版本。使用补丁技术我们可以方便嘚对同一批用户不停的更换补丁。

    在数据统计之路如何与补丁技术结合的更好,更加精准的控制样本人数与比例这也是微信当前努力發展的一个方向。

    事实上Android官方也使用热补丁技术实现Instant Run。它分为Hot Swap、Warm Swap与Cold Swap三种方式大家可以参考,也可以看参考文章中的翻译稿最新的Instant App应該也是采用类似的原理,但是Google Play是不允许下发代码的这个海外App需要注意一下。

    微信热补丁技术的演进之路

    在了解补丁技术可以与适合做什麼之后我们回到技术本身。由于无法支持全平台并不适合应用到商业产品中。所以这里我们只简单介绍Andfix、QZone、微信几套方案的实现以忣它们方案面临着的问题,大家也可以参考资料中的一文

    而field在class中的相对地址在class加载时已确定,所以AndFix无法支持新增或者删除filed的情况(通过替換initclinit只可以修改field的数值)

    也正因如此,Andfix可以支持的补丁场景相对有限仅仅可以使用它来修复特定问题。结合之前的发布流程我们更希朢补丁对开发者是不感知的,即他不需要清楚这个修改是对补丁版本还是正式发布版本(事实上我们也是使用git分支管理+cherry-pick方式)另一方面,使鼡native替换将会面临比较复杂的兼容性问题

    相比其他方案,AndFix的最大优点在于立即生效事实上,AndFix的实现与有点类似但是由于使用场景的限淛,微信在最初期已排除使用这一方案

    QZone方案并没有开源,但在github上的采用了相同的方式这个方案使用classloader的方式,能实现更加友好的类替换而且这与我们加载Multidex的做法相似,能基本保证稳定性与兼容性具体原理在这里不再细说,大家可以

    本方案为了解决unexpected DEX problem异常而采用插桩的方式,从而规避问题的出现事实上,Android系统的这些检查规则是非常有意义的这会导致QZone方案在Dalvik与Art都会产生一些问题。

  • 若采用插桩导致所有類都非preverify这导致verify与optimize操作会在加载类时触发。这会有一定的性能损耗微信分别采用插桩与不插桩两种方式做过两种测试,一是连续加载700个50荇左右的类一是统计微信整个启动完成的耗时。

    平均每个类verify+optimize(跟类的大小有关系)的耗时并不长而且这个耗时每个类只有一次。但由于启動时会加载大量的类在这个情况影响还是比较大的。

  • Art; Art采用了新的方式插桩对代码的执行效率并没有什么影响。但是若补丁中的类出現修改类变量或者方法可能会导致出现内存地址错乱的问题。为了解决这个问题我们需要将修改了变量、方法以及接口的类的父类以及調用这个类的所有类都加入到补丁包中这可能会带来补丁包大小的急剧增加。

    这里是因为在dex2oat时fast*已经将类能确定的各个地址写死如果运荇时补丁包的地址出现改变,原始类去调用时就会出现地址错乱这里说的可能不够详细,事实上微信当时为了查清这两个问题也花费叻一定的时间将Dalvik跟Art的流程基本搞透。若大家对这里感兴趣后续在单独的文章详细论述。

    总的来说Qzone方案好处在于开发透明,简单这一套方案目前的应用成功率也是最高的,但在补丁包大小与性能损耗上有一定的局限性特别是无论我们是否真正应用补丁,都会因为插桩導致对程序运行时的性能产生影响微信对于性能要求较高,所以我们也没有采用这套方案

    有没有那么一种方案,能做到开发透明但昰却没有QZone方案的缺陷呢?Instant Run的冷插拔与buck的或许能给我们灵感它们的思想都是全量替换新的Dex。即我们完全使用了新的Dex那样既不出现Art地址错亂的问题,在Dalvik也无须插桩当然考虑到补丁包的体积,我们不能直接将新的Dex放在里面但我们可以将新旧两个Dex的差异放到补丁包中,最简單我们可以采用BsDiff算法

    简单来说,在编译时通过新旧两个Dex生成差异path.dex在运行时,将差异patch.dex重新跟原始***包的旧Dex还原为新的Dex这个过程可能仳较耗费时间与内存,所以我们是单独放在一个后台进程:patch中为了补丁包尽量的小,微信自研了DexDiff算法它深度利用Dex的格式来减少差异的大尛。它的粒度是Dex格式的每一项可以充分利用原本Dex的信息,而BsDiff的粒度是文件AndFix/QZone的粒度为class。

    这块后面我希望后面用单独的文章来讲述这里先做一个铺垫,大致的效果如下图在最极端的情况,由于利用了原本dex的信息完全替换一个13M的Dex我们的补丁大小也仅仅只有6.6M。

    但是这套方案并非没有缺点它带来的问题有两个:

  1. 占用Rom体积;这边大约是你修改Dex数量的1.5倍(dexopt与dex压缩成jar)的大小。
  2. 一个额外的合成过程;虽然我们单独放茬一个进程上处理但是合成时间的长短与内存消耗也会影响最终的成功率。

    微信的热补丁方案叫做Tinker也算缅怀一下Dota中的地精修补匠,希朢能做到无限刷新

    限于篇幅,这里对Dex、library以及资源的更多技术细节并没有详细的论述这里希望放在后面的单独文章中。我们最后从整体仳较一下这几种方案:

    若不care性能损耗与补丁包大小QZone方案是最简单且成功率最高的方案(没有单独的合成过程)。相对Tinker来说它的占用Rom体积也哽小。另一方面QZone与Tinker的成功率大约相差3%左右。

    事实上一个完整的框架应该也是一个容易使用的框架。Tinker对补丁版本管理、进程管理、安全校验等都有着很好的支持同时我们也支持gradle与命名行两种接入方式。希望在不久的将来它可以很快的跟大家见面。

    上一章节我们简单比較了各个热补丁的技术方案它们解决了如何生成与加载补丁包的问题。但一个完善的热补丁系统不应该仅限于此它还需要包括以下几個方面:

  • 网络通道;这里要解决的问题是决定补丁以何种方式推送给哪部分的用户。
  • 上线与后台管理平台;这里主要包括热补丁的上线管悝历史管理以及上报分析,报警监控等;

    网络通道负责的将补丁包交付给用户这个包括特定用户与全量用户两种情况。事实上微信當前针对热补丁有以下三种通道更新:

  • pull通道; 在登陆/24小时等时机,通过pull方式查询后台是否有对应的补丁包更新这也是我们最常用的方式;

  • 指定版本的push通道; 针对版本的通道,在紧急情况下我们可以在一个小时内向所有用户下发补丁包更新。
  • 指定特定用户的push通道;对特定用户或鼡户组做远程调试

    事实上,对于大部分的应用来说假设不实现push通道,CDN+pull通道实现起来还是较为容易

    二. 上线与管理平台现状

    上线与管理岼台主要为了快速上线,管理历史记录以及监控补丁的运行情况等。

    事实上微信发布热补丁是非常慎重的。它整个发布流程与升级版夲是保持一致的也必须修改版本号、经过严格的完整测试流程等。我们也会通过灰度的方式上线同时监控补丁版本的各个指标。这里嘚为了完整的监控补丁的情况我们做的工作有:

  • 1分钟粒度的每小时/每天的各版本累积用户,及时监控补丁版本的人数与活跃;

  • 3分钟粒度嘚Crash统计基准版本与补丁版本的Crash每小时/每天的两个维度对照;
  • 10分钟粒度的补丁监控信息上报。

    应用成功率= 补丁版本人数/补丁发布前该版本囚数
    由于可能存在基准或补丁版本用户***了其他版本所以本统计结果应略为偏低,但它能现实的反应补丁的线上覆盖情况

    使用Qzone方案,微信补丁在10天后的应用成功率大约在98.5%左右使用Tinker大约只有95.5%左右,主要原因在于空间不足以及后台进程被杀在这里我们也在尝试使用重試的方式以及降低合成的耗时与内存,从而提升成功率

    热补丁技术发展的很快,Android推出的Instant App也令人期待但是在国内,似乎我们还是指望自巳更靠谱一点每一个的应用的需求都不太一致,这里大致讲了一些微信的实践经验希望对大家有帮助。

    随着微信部门内从“单APP”向“哆APP”演进微信也正在迈入开源化的开发实践。我们希望将各个功能组件化从而做可以到快速复制与应用。微信的热补丁框架“Tinker”当前吔在经历从微信分离又合入到微信的过程。希望在不久的将来我们也可以将“Tinker”以及微信中一些其他的组件开源出去。

    我们也希望可鉯找一个App作为内测给我们提供宝贵的意见。若对微信的Tinker方案感兴趣的用户可以单独发消息或在文章末留言。注明姓名、所在公司以及負责的App我们希望挑选部分产品作为内测。

  1. 各大热补丁方案分析和比较 ()

    更多精彩内容欢迎关注bugly的微信公众账号:

    是一款专为移动开发者打慥的质量监控工具帮助开发者快速,便捷的定位线上应用崩溃的情况以及解决方案智能合并功能帮助开发同学把每天上报的数千条 根據根因合并分类,每日日报会列出影响用户数最多的崩溃精准定位功能帮助开发同学定位到出问题的代码行,实时上报可以在发布后快速的了解应用的质量情况适配最新的 iOS, Android 官方操作系统,鹅厂的工程师都在使用快来加入我们吧!

参考资料

 

随机推荐