bugly

【腾讯Bugly干货分享】Android Patch 方案与持续交付

北慕城南 提交于 2020-10-30 07:47:08
本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多,机型众多,而且各个市场都各有各的政策和审核速度,每次发布一个版本对于开发同学来讲都是一种漫长的煎熬。相比于 iOS 两三天就能达到 80% 的覆盖速度而言,Android 应用版本升级至少需要两周才能达到 80% 的升级率,严重阻碍了版本迭代速度。也导致 市场上 App 版本分散 ,处理 bug 和投诉等也越来越麻烦。 修复的 bug 需要等待下个版本发布窗口才能发布? 已经 ready 的需求排队上线,需要等待其他 Feature Team 合入代码? 老版本升级速度慢?频繁上线版本提醒用户升级,影响用户体验? 这几个问题是每个 App 开发同学都必然要面对的。那么有没有方法能在用户无感知的情况下 加速 bug 处理和版本迭代速度? 在这方面 PC 端 Chrome 浏览器的 patch 升级方案 给我们了一个很好的借鉴:当 Chrome 有版本升级的时候会自动下载 patch 文件。下次启动后,Chrome 就已经是新版本。 他山之石,可以攻玉 近一两年 Android 热补丁框架非常热门。从最初 360 动态下发 lua 脚本,到后来出现的各种方案,如雨后春笋般出现

【腾讯Bugly干货分享】JSPatch 成长之路

我们两清 提交于 2020-04-14 12:59:55
【推荐阅读】微服务还能火多久?>>> 本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾讯WXG iOS开发工程师—— bang 陈振焯 ,为大家分享**《JSPatch成长之路》**。 如何加入 Dev Club? 移动端开发经验 >= 2 年,微信扫描下方群管理微信二维码,备注姓名-公司(或产品) 申请加入。 分享内容简介: JSPatch 是 iOS 上的动态更新框架,只需要引入小小的引擎文件,就可以用 JS 调用和替换任意 OC 方法。目前被普遍用于实时修复 bug,已有超过2500个 APP 接入,本次分享介绍 JSPatch 发展过程中遇到的问题和解决思路。 (此内容已在 GMTC 线下分享过,本次重新整理为线上分享) 内容大体框架: 起步:介绍 JSPatch 的诞生和当时碰到的难题 发展:介绍 JSPatch 如何补全周边功能变得更好用 下一步:介绍 JSPatch 下一步的计划 分享人介绍: bang 陈振焯 广州研发部 目前负责开发微信读书iOS端,博客 http://blog

【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

杀马特。学长 韩版系。学妹 提交于 2020-03-24 08:05:28
3 月,跳不动了?>>> Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处。 前言 好吧,说是“粒子引擎”还是大言不惭而标题党了,离真正的粒子引擎还有点远。废话少说,先看[demo],扫描后点击屏幕有惊喜哦… 本文将教会你做一个简单的canvas粒子制造器(下称引擎)。 世界观 这个简单的引擎里需要有三种元素:世界(World)、发射器(Launcher)、粒子(Grain)。总得来说就是:发射器存在于世界之中,发射器制造粒子,世界和发射器都会影响粒子的状态,每个粒子在经过世界和发射器的影响之后,计算出下一刻的位置,把自己画出来。 世界(World) 所谓“世界”,就是全局影响那些存在于这这个“世界”的粒子的环境。一个粒子如果选择存在于这个“世界”里,那么这个粒子将会受到这个“世界”的影响。 发射器(Launcher) 用来发射粒子的单位。他们能控制粒子生成的粒子的各种属性。作为粒子们的爹妈,发射器能够控制粒子的出生属性:出生的位置、出生的大小、寿命、是否受到“World”的影响、是否受到”Launcher”本身的影响等等…… 除此之外,发射器本身还要把自己生出来的已经死去的粒子清扫掉。 粒子(Grain) 最小基本单位,就是每一个骚动的个体。每一个个体都拥有自己的位置

【腾讯Bugly干货】“HTTPS”安全在哪里?

情到浓时终转凉″ 提交于 2020-03-24 08:03:09
3 月,跳不动了?>>> 背景 最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得。 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了。每当访问一个站点,浏览器的地址栏中出现绿色图标时,意味着该站点支持 HTTPS 信息传输方式。我们知道 HTTPS 是我们常见的 HTTP 协议与某个加密协议的混合体,也就是 HTTP+S。这个 S 可以是 TLS(安全传输层协议)、也可以是 SSL(安全套接层),不过我更认可另一个抽象概括的说法,HTTP+Security。不过要谈论 HTTPS 为何安全,还得从 HTTP 为何不安全说起。 假设你现在正坐在教室里上课,现在你非常想和走道旁的迷人的 TA 说一些话,一般这个时候你会用“传纸条”的方式来交流。而这个方式和 TCP/IP 协议基本的工作模式十分相像: 通过小动作引起对方注意; 对方以多种可能的方式(注视、肢体语言等)回应于你; 你确认对方感知到你后,将纸条传给对方; 对方阅读纸条; 对方给予你阅读后的反应; 怎么样,这个流程是不是很熟悉? 如果你要传递纸条的 TA 距离你很远怎么办?HTTP 协议就是指你在纸条上写明你要传给的 TA 是谁,或者 TA 的座位在哪,接着只需要途径的同学拿到纸条后根据纸条上的指示依次将纸条传过去就 OK 了。 这个时候问题来了

【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

北城余情 提交于 2020-03-11 14:45:21
本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/57875330c9da73584b025873 #一、为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致。多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气泡膜。确实,一款漂亮的锁屏能为手机增色不少,但锁屏存在的核心目的主要是三个:保护自己手机的隐私,防止误操作,在不关闭系统软件的情况下节省电量。 当下,各个款式的手机自带的系统锁屏完全能够满足这些需求,而且美观程度非凡,那么开发者为什么仍然需要构建自定义锁屏呢?让我们试想一个场景,一位正在使用音乐播放器听歌的美女用户,在没有播放器自定义锁屏的情况下,切换一首歌需要几步(参考自同类文章): 点亮手机屏幕 解开系统锁屏 打开音乐播放器 切歌再熄灭屏幕 这时的她估计已经被广场舞的歌曲骚扰了有10秒,续了10次命,这是我们程序员不愿意看到的,所以有必要依靠我们灵活的双手构建出自定义的音乐锁屏页,将切歌过程被压缩为两步:点亮屏幕和切歌,顺便可以看看歌词。如果再加个开启和关闭自定义锁屏的开关,就能完美解决用户的痛点。 #二、自定义锁屏页的基本原理 然而,要实现一个自定义锁屏是一件繁琐的事情

unity接入bugly无法显示C#错误行号

被刻印的时光 ゝ 提交于 2020-02-08 18:48:34
项目上线后在bugly后台收集到一些c#的错误日志,如下所示: 可以看到堆栈信息,但看不到具体的行号,这对于一个函数中有多行代码的逻辑来说只能说帮助有限. 在unity社区发现目前并不支持release发布的l2cpp的版本显示行号,于是我尝试改为develop+mono进行打包测试,结果如下: 这次可以正常显示行号了,为了确认是develop+mono才能正常显示,我又试了试release+mono,结果如下: 跟release+l2cpp有点类似,可以看到堆栈,但仍然看不到行号,只是堆栈地址不再是00000000000,而变成aa376b8e5f9f41dbbb82909ca4c277f4了 目前googleplay必须用l2cpp打64位包进行上传,因此也不再深究这个堆栈地址有什么意义了. 总结:目前要想在bugly中看到c#异常的堆栈信息和明确的行号,必须使用develop+mono版进行打包,否则是看不到的. 目前无法获得具体行号,只知道哪个函数里的某行逻辑出错了,目前能做的只有把这个函数里的逻辑进行拆分,拆到多个函数里逐个调用,每个函数尽量保持最小切分粒度,然后放线上等下次报错了,无奈. 好消息 :unity官方说正在开发release+l2cpp版提供明确出错行号的功能,预计会在unity2020的某个版本里发布,参考链接如下: https://forum.unity

【BuglyIOS干货分享】iOS内存管理:从MRC到ARC实践

筅森魡賤 提交于 2020-01-07 10:34:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处。 对于iOS程序员来说,内存管理是入门的必修课。引用计数、自动释放等概念,都是与C语言完全不同的。搞明白这些,代码才有可能不 crash 。然而就是这么牛逼的内存管理,着实让我这个从 C 转过来的老程序员头疼了一段时间。 [C++ 程序员的迷惑和愤怒] iOS 内存管理的核心是引用计数。与众多五年甚至更多以上开发经验的程序员一样,笔者当初是从 C/C++转到的 OC,接触到 MRC。当时遇到最头疼的问题就是:为什么那么多 release?到底什么地方会 release?同样初始化一个字符串的两个方法为什么不同?上边一个不需要调用 release,后边一个就需要调用 release? NSString * str1 = [NSString stringWithFormat:”qqstock“]; NSString * str2 = [[NSString alloc] initWithData:recvData encoding:NSUTF8StringEncoding]; 再加上一个属性赋值与成员变量赋值,一个导致计数器加一,一个就不会!真他妈奇葩了!

【腾讯Bugly干货分享】Android APP 快速 Pad 化实现

两盒软妹~` 提交于 2019-12-10 07:35:27
项目背景 采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验。为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目经典页面的构成以及 Pad 化后的页面结构的变化。 1.MyApp 页面经典构成 现在主流手机 APP 主页通常采用标签栏加标签内容方式显示。而通过主页进入的二级页面全部采用全屏方式展示。比如手机 QQ,微信,支付宝等等都是采用 Tab 栏方式为主,进入一个具体功能后,全屏打开。我们项目也是如此。下面看一下 MyApp 项目手机端的页面构成图。 左侧是一个 Tab 栏(区域1)加 Tab Content(区域2)构成的页面,右侧是在 TabContent 中点击具体功能后进入的一个功能详情页面(全屏区域3)。 查看代码,发现除 TabContent 区域2,从主页开始到其他全屏显示的页面全部采用 Android Activity 组件实现。经统计得出大概有几百个 Activity。这些 Activity还包含比如Web进程,peak 进程(图片选择查看)等其他非主进程 Activity。 1.MyApp pad 化的设计图 了解了手机 MyApp 页面构成后,还要来看 Pad 化后 UI 结构的变化,通过对比来探索 Pad 化最佳的实现方案。下面是我们的 PAD 版本页面结构图。 由于

【腾讯Bugly干货分享】一步一步实现Android的MVP框架

寵の児 提交于 2019-12-09 20:17:03
本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/5799d7844bef22a823b3ad44 内容大纲: Android 开发框架的选择 如何一步步搭建分层框架 使用 RxJava 来解决主线程发出网络请求的问题 结语 一、Android开发框架的选择 由于原生 Android 开发应该已经是一个基础的 MVC 框架,所以在初始开发的时候并没有遇到太多框架上的问题,可是一旦项目规模到了一定的程度,就需要对整个项目的代码结构做一个总体上的规划,最终的目的是使代码可读,维护性好,方便测试。’ 只有项目复杂度到了一定程度才需要使用一些更灵活的框架或者结构,简单来说,写个 Hello World 并不需要任何第三方的框架 原生的 MVC 框架遇到大规模的应用,就会变得代码难读,不好维护,无法测试的囧境。因此,Android 开发方面也有很多对应的框架来解决这些问题。 构建框架的最终目的是增强项目代码的 可读性 , 维护性 和 方便测试 ,如果背离了这个初衷,为了使用而使用,最终是得不偿失的 从根本上来讲,要解决上述的三个问题,核心思想无非两种:一个是 分层 ,一个是 模块化 。两个方法最终要实现的就是解耦,分层讲的是纵向层面上的解耦,模块化则是横向上的解耦。下面我们来详细讨论一下 Android

【腾讯Bugly干货分享】基于RxJava的一种MVP实现

陌路散爱 提交于 2019-12-09 20:15:09
本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/57bfef673c1174283d60bac0 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾讯IEG Android 开发工程师——戴俊,为大家分享《基于RxJava的一种MVP实现》。 分享内容简介: RxJava是一个实现Java响应式编程的库,让异步事件以序列的形式组织。MVP则通常用来将View业务层与Model层分离开来,两者结合起来可轻松实现业务解耦、线程控制、单元测试等等强大功能 内容大体框架: Android开发框架的选择 如何一步步搭建MVP分层框架 使用RxJava来进行线程控制 结语 下面是本期分享内容整理 Hello,大家好,我是戴俊。目前在IEG腾讯动漫主要负责Android端的开发工作。 第一次进行这种微信群的分享,如果有任何疑问,欢迎大家在分享结束后提问。下面开始我们今天的分享。 1. Android开发框架的选择 我们知道原生Android开发已经是一个基础的MVC框架,所以在项目刚开始开发的时候并没有遇到太多问题。 对一个经典的Android MVC框架来讲,它的结构大概是下面这样(图片来自参考文献)