学习
小木箱
一命二运三分水,四积阴德五读书,六名七相八敬神,九交贵人十养生
展开
-
APM性能监控
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!APM 简要介绍APM 全称 Application Performance Management & Monitoring (应用性能管理/监控)性能问题是导致 App 用户流失的罪魁祸首之一,如果用户在使用我们 App 的时候遇到诸如页面卡顿、响应速度慢、发热严重、流量电量消耗大等问题的时候,很可能就会卸载掉我们的 Ap.原创 2020-11-26 22:36:45 · 19946 阅读 · 0 评论 -
Android耗电量线下监控: Battery Historian
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~一. 发热案例分析Android 框架层通过一个名为 batterystats 的系统服务,电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的。电池的这些信息是BatteryService通过广播主动把数据传送给所关心的应用程序。实现了电量统计的功能,batterystats实现原理可以.原创 2020-11-26 14:17:09 · 572 阅读 · 0 评论 -
Android悬浮窗基础: Window 和 WindowManager
引言Window 是类似悬浮窗的东西WM 参与 Window 的 Create 和 管理, WMS 和 WM 共同完成 Window 的 IPC交互Window 是 View 直接 管理者Activity 的 setContenView 底层是由PhoneWindow的installDecor绘制的.1. 如何使用 WM 添加一个 Window?// 将一个Button添加到屏幕位置(100,300)的位置Button button = new Bu原创 2020-11-25 17:18:57 · 474 阅读 · 0 评论 -
Kotlin热身篇: 简介与基本用法
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~一. kotlin概念Kotlin 拥有强大的生态,不仅支持 Android开发,服务端,前端和原生环境,同时Kotlin是一门跑在Java虚拟机上的函数式语言。并符合JVM的设计规范,如: 类型擦除,装箱和拆箱,那么Kotlin和Java有什么共同点呢?二. kotlin和java8的相同点说完共同点我们再聊.原创 2020-11-25 16:44:32 · 243 阅读 · 0 评论 -
Android网络框架系列: Retrofit2.5
引言 Retrofit 是 Square 公司开发的一款针对 Android 网络请求的框架,遵循 Restful 设计风格,我们查看 invoke 可以发现:底层基于 OkHttp 实现的,相比其他网络请求框架,有以下优势:性能最好,速度最快(动态代理优势)简洁易用,代码简化解耦彻底,职责细分易与其他框架联用(Rxjava)当然也有弊端:因为高度封装,相对于 OkHttp ,扩展性变差了,不过整体能满足项目需求.今天我就带大家来看一下 Retrofit 究竟是如何使用,以及内部工作原理一.概原创 2020-11-23 05:45:01 · 377 阅读 · 0 评论 -
App极限瘦身: png 打包前自动化转换 webp
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!前言大家都知道 png 是比较占用App体积的,有没有工具可以在打包前(比如 assembleDebug、assembleRelease)自动去转化所有的 png 图片,包括第三方依赖库里面的呢?之前不经意间发现有一个神器cwebp 转化工具,是不是可以借鉴这种工具自己写个Plugin完成图片转换,同时支持检查大图片,图片大小可配置。话不.原创 2020-11-23 05:09:22 · 501 阅读 · 0 评论 -
App极限瘦身: 动态下发so
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!前言一般来说,作为一个成熟的应用,native 文件会越来越多,资源文件过大安卓的包体越来越大,包体积的增长,逐渐带来了一些不利影响,比如用户安装成功率降低,CDN 流量费用增加,流失部分付费渠道方,新拓展的渠道方抱怨包体过大,限制了渠道拓展,那么如何解决这种业务痛点呢? 今天就详细给大家介绍一下 Android 动态化管理 so比如 .原创 2020-11-21 19:17:38 · 1332 阅读 · 0 评论 -
插件化Activity: 技术方案分享
前言插件化技术从 2016 年开始就开始百花齐放,如: 奇虎 360 的 replugin,滴滴的 VirtualAPK,到现在的 VirtualApp,插件化经历了市场考验,也算逐步成熟,今天就带大家手把手实现一个插件化框架,希望对你有所帮助~插件化概念插件化是一种动态加载四大组件的技术。最早是为了解决 65535 限制的问题,后来 Google 出来了 multidex 来专门解决现在市面使用插件化一定程度上可以减少安装包大小,实现项目组件化,将项目拆分方便隔离,降低组件化耦合度太高的问题当然插件原创 2020-11-21 19:09:19 · 385 阅读 · 0 评论 -
字节码插桩(四): AST
我们通过 AndroidStudio 生成Bean对象一般是通过注解来实现自动生成getter/setter方法、equals()和hashCode()方法,其中类(或接口)要符合驼式命名法,首字母大写。方法要符合驼式命名法,首字母小写,类或实例变量要符合驼式命名法,首字母小写。常量要求全部由大写字母或下划线构成,且第一个字符不能是下划线,否则编译器会报警告那么: 编译器是怎么解析到这些不规范的命名方式呢?这里不得不提到一个很重要的字节码插桩技术AST,什么是AST?一. AST概念AST 是 Abs原创 2020-11-16 06:41:07 · 582 阅读 · 0 评论 -
网络传输: 序列化与反序列化
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!一. 定义以及相关概念由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,而为了达到进程通讯的目的,需要先将数据序列化,而序列化就是将对象转化字节序列的过程。相反地,当字节序列被运到相应的进程的时候,进程为了识别这些数据,就要将其反序列化,即把字节序列转化为对象无论是在进程间通信、本地数据存储又或者是网络数据传输.原创 2020-11-16 06:39:09 · 1848 阅读 · 0 评论 -
Android框架系列: Retrofit
引言 Retrofit 是 Square 公司开发的一款针对 Android 网络请求的框架,遵循 Restful 设计风格,我们查看 invoke 可以发现:底层基于 OkHttp 实现的,相比其他网络请求框架,有以下优势:性能最好,速度最快(动态代理优势)简洁易用,代码简化解耦彻底,职责细分易与其他框架联用(Rxjava)当然也有弊端:因为高度封装,相对于 OkHttp ,扩展性变差了,不过整体能满足项目需求.今天我就带大家来看一下 Retrofit 究竟是如何使用,以及内部工作原理一.概原创 2020-11-14 06:24:51 · 707 阅读 · 0 评论 -
音视频基础(网络传输):视频编码推流
一. 前言 一个 I420 格式的图像大小为: 宽 x 高 x3/2 ,这意味着 640x480 的分辨率,10 fps 的视频,我们 1s 也会 产生 4M 左右的数据。因此我们需要使用编码算法对这个图像数据进行编码,让其数据量变小。还记得我们交叉编 译的 x264 库吗?接下来我们将使用 x264 对摄像头采集的图像进行编码。当然这里考虑到程序性能等问题,我们首 先需要进行一些设计。二. RTMPClient 在从 Image 获取到 I420 数据的过程中,我们会执行一系列的方法。 那么在直原创 2020-11-11 23:31:34 · 507 阅读 · 0 评论 -
组件化: Android动态权限
权限组件设计背景历史版本权限组件使用的是AndPermission,长期无人维护,历史代码臃肿,不便拓展,考虑使用PermissionsDispatcher,但是PermissionsDispatcher APT插件会影响编译效率,easypermissions侵入性太强,会影响整个工程,RxPermissions 貌似是最佳选择,但是RxPermissions需要高度自定义符合自己项目特色的UI,所以干脆自己写个权限组件好了,希望大家喜欢权限组件设计需求自定义炫酷权限弹框不入侵工程Activity原创 2020-11-11 23:30:00 · 197 阅读 · 0 评论 -
音视频基础(网络传输): RTMP封包
RTMP 基础RTMP 概念与 HTTP(超文本传输协议)同样是一个基于 TCP 的 Real Time Messaging Protocol(实时消息传输协议)。由 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的一种开放协议 。在国内被广泛的应用于直播 领域。HTTP 默认端口为 80,RTMP 则为 1935。 我们通过阅读 Adobe 的协议规范,通过与服务器建立 TCP 通信,根据协议格式生成与解析数据即可使用 RTMP 进行 直播。当然我们也可以借原创 2020-11-11 23:27:44 · 814 阅读 · 0 评论 -
APT开发指南
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域;只做全网最Geek的公众号,欢迎您的关注!之前在学习组件化的时候,有一个组件生命周期插件源码让我百思不得其解,究其原因Annotation Processing Tools)基础没过关,之前的两篇文章,一篇是ASM一篇是AspectJ,还有关如何自定义Plugin系列,反响还不错,果然理论 + 实践才是王道。现在准备将APT也补上,希望以后也能像大佬一样随意定制化插件。一.APT概述APT 是 Annot.原创 2020-11-11 23:16:46 · 721 阅读 · 0 评论 -
Android View的绘制和动画效果的实现
在 Android 应用开发里面,UI是非常重要的一部分,一般情况下,你使用自带控件,再加上一些开源库,已经能够实现大部分的UI效果了,但是对于一些比较花哨比较新颖的效果,,往往需要通过自定义view来实现,自定义View 每个人多多少少都会一点,,但是完全掌握的人却不多,在这我说的这个完全掌握,指的是给你一个任意的设计,只要这个设计是Android能够做到的,你只要能够给做出来,全能给实现,那么...原创 2019-03-15 21:39:19 · 1690 阅读 · 2 评论 -
Android 动画简单理解
动画这个东西,他和前几期,有一个很大的不同的是,概念很简单,动画,不就是动一动嘛首先说一下动画的本质:动画是什么呢?动画就是将两个内容平滑的移动,而不是直接切换,所谓的平滑移动就是在一段时间里面,不断地用View.setTranslationX去更新他的位置,一点一点地向目标靠近,直到到达目标为止,这个渐变的过程要通过其他线程来控制.因为如果用主线程的话,他就卡住了,对吧,用线程的操...原创 2019-03-15 21:39:36 · 286 阅读 · 0 评论