![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发
文章平均质量分 80
咖啡老师
爱看书,喜欢的计算机
展开
-
Java SPI 技术在Android上的应用与原理分析
一、前言今年初,我在做需求时一位好友告诉我,有一种非常高明的技术方案可以将现有的现有项目中的代码变的更加精简、漂亮,它的名字叫SPI,问我想不想搞。由于我当时忙着搞一堆紧急需求,实在没心思搞新技术,于是含糊的婉拒了。现在想想他,有点后悔,若当时挤出时间搞搞,说不定我后来再要工资时还能再多加点,哈哈哈哈哈。二、SPI 技术原理剖析2.1 传统面向接口编程的局限性在正式讲SPI 编程前,先用一个接口编程举个例子作为话题的引入。现在出一个关于播放音乐的业务接口:Business.ktinterfa原创 2021-11-16 19:43:36 · 2579 阅读 · 2 评论 -
Android 自定义View实现TextInputLayout——CofferTextInputLayout
一、简介很久没有写博客了,前段时间一直忙着找工作面试,上个月总算找到了合适的工作,算是稳定下来了。也有时间去总结学习些东西。二、需求最近刚刚接到一个需求,交互那边要求实现一个类似于Android Material Design 里的一个TextInputLayout 的输入框动效交互。涉及到提示文字的动效、输入框的焦点变化导致的文字、输入框的UI变化等,看了下原生的TextInputLayout 的API,发现留给开发者自定义扩展API的太少了,无法满足设计那边设定的颜色、大小等一堆定制点的改造。本想原创 2021-08-28 19:10:15 · 395 阅读 · 0 评论 -
关于Okhttp 报javax.net.ssl.SSLHandshakeException: Handshake failed
一、问题最近把环境切换到灰度环境,有一个接口一直报“javax.net.ssl.SSLHandshakeException: Handshake failed”。二、分析看这个描述,是网络连接时握手失败。这下不得不跟到源码里看了,联想到OkHttp的网络请求流程,出问题的地方应该是网络连接的地方出了问题,即ConnectInterceptor,打断点跟进去,果然,在执行到 HttpCodec httpCodec = streamAllocation.newStream(client, chain,原创 2021-05-24 17:38:45 · 6400 阅读 · 2 评论 -
关于gradle 升级导致aar包无法打入的问题
一、问题描述受升级SDK影响,需要将项目中的tools.build:gradle 进行升级,原先的版本3.2.0 升级,否则就会出现找不到 <queries>元素的问题。这个是由于Android Gradle插件版本不匹配,可按照谷歌官方推荐升级到以下某个版本解决。于是我选择升级到3.6.4。二、现象由于我的项目最终是出一个aar包,所以最终在打release包时,发现里面并没有将项目的中的支付宝SDK打入(新版本支付宝SDK是以aar形式出现),别的jar包全部都正常打入,唯原创 2021-04-01 18:29:59 · 1070 阅读 · 0 评论 -
漫聊 Android 插件化
前言聊完了热修复,那么它的好姐们插件化怎么能不说。原理剖析一、加载类即加载外部的dex,这里有两步操作第一步:安装即把外部的apk里的dex拷贝系统目录下。(这里以掌阅为例)掌阅的apk 来源分两种,一种来自内置在Assert目录下的插件,一种是来自网络下载的。拷贝包含三个部分:将插件(apk)拷贝到创建的存储插件的文件夹下,data/data/包名/插件名创建一个dex 输出文件夹,即dexOutputDir ,这个在创建加载插件的ClassLoader时需要需要(在构造这个Class原创 2021-01-10 22:33:09 · 395 阅读 · 0 评论 -
漫聊Android 热修复原理
一、简介1、分类:代码修复资源修复动态链接库修复2、修复框架:阿里系的AndFix、Sophix;不支持类替换,支持即时生效,方法替换腾讯系的Tinker、QFix;不支持即时生效,其他的都支持美团的Robust等;不支持类替换,支持即时生效,方法替换二、资源修复很多资源修复的框架都参考了Instant Run 原理。因此Instant Run 原理需要先搞明白。1、Instant Run 原理Instant Run是Android 2.0引入的运行机制,可以减少二次构建的原创 2021-01-09 19:38:46 · 316 阅读 · 0 评论 -
漫聊Android Binder那些事
前言前两个月去了祖国的三个城市旅游,分别是呼伦贝尔、重庆、三亚,感受下了下祖国的大好山河,舒服惬意。读万卷书,行万里路。有机会和还是要多出去看看外面的世界,长长见识,这些旅行阅历对个人的成长是非常有帮助的。这段时间的旅游,最大的收获就是感受大自然的美景,草原、山川、大海。也刷新了我的旅游空间范围,目前,去过的最东边是大阪(日本)、最西边是重庆、最北边是呼伦贝尔、最南边是三亚,后续有时间我也会写点“游记”分享下。频繁的旅游,让我在专业学习上荒废了不少,看到之前定制的计划的月度计划没有完成,倍感罪孽深重。那原创 2020-10-06 00:42:32 · 365 阅读 · 0 评论 -
android 资源那些事(一)编译 与 打包
最近在整理自己项目中关于插件框架的技术文档。写着写着发现自己有很多知识了解的不是很全,为此花了大把时间学习。今天先聊聊关于Android Resource 知识。原创 2020-08-01 16:33:50 · 484 阅读 · 0 评论 -
漫聊开源源码——Okhttp3 (上篇), 缓存那点儿零碎
概述Ok3 源码学习是我去年给自己立的flag,同时也是我去年难得兑现的几个flag之一,这里我想再重温下之前的学习状态,整理下我当时学习的思路。OK3的源码非常多,如果算上Okio,那就更多了,而且还涉及到很多我了解很少的网络知识(比如这篇要讲的OK3 缓存,前半部分我几乎先把http 的缓存套路说明白),庆幸的是OK3 的源码注释写的非常详尽,代码结构设计的也不错,理解起来不难,学起来收获满满。这个系列我准备分三篇博客来讲,今天先聊缓存。...原创 2020-07-26 16:23:01 · 331 阅读 · 0 评论 -
Android系统源码分析-Bitmap系列
概述Bitmap 在我们日常开发过程中使用频次非常高,因为和它经常关联的关键词要么是图片,要么就是内存,有时甚至还会谈到OOM。大家在谈论关于内存优化,一定绕不开关于Bitmap 的使用优化。因此今天就来和大家聊聊Bitmap 的源码,了解它,所谓知彼知己,百战不殆。再次重申,看源码一定要有目的性,否则你一定很难坚持下去。我的目的,1、学习源码的设计精髓,2、解BUG(或者说避免开发阶段踩坑),其中2的占比比较多,哈哈哈哈。...原创 2020-06-27 19:10:21 · 930 阅读 · 0 评论 -
java.lang.IllegalArgumentException: x + width must be 小于等于 bitmap.width()错误的分析,解决
场景最近在写一个滑动验证登录的View,遇到了一个很有趣的BUG我需要从背景图中1处扣除一个小图,放在2处。在抠图的时候,遇到了BUG。java.lang.IllegalArgumentException: x must be < bitmap.width()这个报错的意思是,当前我要扣的图尺寸要比原图比背景图大。这就很奇怪,小方块的尺寸明明比背景图小啊。分析记住,一切报错的问题的答案,在源码中一定可以找到!因此我们来看看是源码中哪里抛出了这个异常public static Bitm原创 2020-06-21 11:12:11 · 5200 阅读 · 0 评论 -
RecycleView禁止滑动原理的分析、实现
需求:有的时候在需要解决嵌套滑动冲突,需要禁止父View(也就是RecycleView)禁止滑动。分析:关于RecycleView的滑动,在RecycleView的源码中有这么一个函数: /** * Query if vertical scrolling is currently supported. The default implementation * returns false. * * @return True if原创 2020-05-31 15:03:36 · 645 阅读 · 0 评论 -
自定义控件 - 流式布局(CofferFlowLayout)
自定义控件 - 流式布局(CofferFlowLayout)先看效果图:简介为了方便大家理解自定义View里的一些细节点,我这里把开发者模式里的“显示布局边界”打开了。这个Demo功能很基础简单,就是显示标签,然后给每一个标签添加点击事件,长按删除事件。如果后续想加其他功能,可以不断的完善,这种瀑布流布局实现非常成熟,花样也很多。写这个主要就是练手,加深对Measure 和layout的理...原创 2020-05-04 13:10:19 · 289 阅读 · 0 评论 -
android网络请求组件(一)OkHttp3的封装使用
现在程序员的能力是越来越强了,新技术新想法不断的涌现,然后并应用于实战上,有时候自己会不经意的发现手头上用的技术好老,有点脱节的感觉。为了摆脱这种不爽的感觉(其实就是怕被同行歧视),咋办?唯一的出路就是不断的学习!学习!!学习!!!一、概述现在的手机APP,能在应用商店上看到的APP,差不多有95%以上都需要网络需求。进而得出网络组件在APP中的重要性是非常高的!既然如此重要,我们战斗强悍原创 2017-08-05 17:29:24 · 5384 阅读 · 1 评论 -
漫聊android适配动态权限机制
近期利用工作空闲之际,学习了些新的知识,为了更好的消化他们,我觉得把他们写出来能更好的帮我理解知识,也希望我的知识总结能方便大家学习,共同探讨和交流。 我先谈点儿题外话,要说做android开发遇到最麻烦无语的事儿,我个人认为是“给手机做适配”。由于android的开源性的特点,还有近年来非常火热的“互联网思维之个性化私人定制”。现在的android手机系统越来越多样化,比方说我最喜欢的小原创 2017-08-04 15:45:00 · 446 阅读 · 0 评论 -
Android蓝牙API使用指南
蓝牙本文内容基础知识蓝牙权限设置蓝牙查找设备查询配对的设备发现设备连接设备连接为服务器连接为客户端管理连接使用配置文件供应商特定的 AT 命令健康设备配置文件关键类BluetoothAdapterBluetoothDeviceBluetoothSocketBluetoothServerSocket相关示例转载 2017-08-21 17:00:51 · 1463 阅读 · 0 评论 -
android 异步图片加载组件ImageLoader封装使用
一、概述现在开发界的图片加载使用框架真是越来越丰富了,例如ImageLoader、Glide、Picasso、Fresco等,选择非常多,而且都还不错。当然对于那些患有严重的“选择恐惧症”的人来说,到底用那个是一个相当头疼的问题。为了减轻大家的选择痛苦,我今天就选这里面的其中一个ImageLoader讲,如果大家觉得我封装的这个很好用,那就用它吧。若不好的话,那我下次换一个讲。原创 2017-08-07 14:21:11 · 531 阅读 · 0 评论