
Android
a296777513
这个作者很懒,什么都没留下…
展开
-
Lottie 浅析
Lottie 简介Lottie是是一个可以解析Adobe After Effects使用BodyMovin插件导出的动画json文件,并且渲染到手机和网页上的库,Lottie支持Android,iOS,Web和Windows。Lottie Android如何使用Lottie在Android仅支持Gradle的形式依赖,需要在你的build.gradle中添加以下的依赖dependenci...原创 2019-11-29 18:56:39 · 3329 阅读 · 0 评论 -
OkHttp3源码分析
重点本文打算从三点来剖析OkHttp3: * 网络请求的整理流程-会使用 * 拦截器模式-易扩展 * 缓存和连接池-高性能整体流程我们在阅读某一类源码之前,首先要学会怎么使用,其次才是去了解内部的实现原理,实现方案上有什么技巧。okhttp的一张流程图: 官方用例get使用方式OkHttpClient client = new OkHttpCli...原创 2018-06-28 14:40:10 · 4100 阅读 · 0 评论 -
绘制性能优化-ConstraintLayout
ConstraintLayout是2016年Google发布的,这种新的布局方式支持了编辑器的方式,从布局和性能上都做了一定的优化,同时也增加了一些新的概念,例如约束链和设置大小比例。本文从将会从性能上与传统的布局进行比较,并且给出使用在项目上的建议。Android的绘制流程首先回顾一下Android的绘制流程,方便我们更好的理解ConstraintLayout的性能。Androi...原创 2018-05-31 20:48:26 · 2589 阅读 · 0 评论 -
Android 投影MAC,Vysor pro 破解
投影工具当我们需要做产品演示,或者需要在手机上做一些讲解时,需要让大家看到手机屏幕,这个时候就需要一款好的投影工具。 现在比较好用的是:Vysor是一款可以使用电脑操作安卓手机的谷歌浏览器插件,非常流程和方便,但是免费版的话,画面质量非常差,后面会介绍怎么破解。AirDroid 是一款可以通过PC浏览器来管理Android手机的应用,Web网易和应用软件都可以做投影,也是非常方便。...原创 2018-04-24 16:49:39 · 4560 阅读 · 0 评论 -
Gradle学习笔记
gradle学习笔记(一)概念Gradle本身是基于Groovy脚本语言进行构建的,并通过Domain Specific Language(DSL语言)进行描述和控制构建逻辑的。 参考的文档:官方文档中文翻译文档Gradle用户指南Android Studio构建指南Android Studio Gradle,插件使用指南Gradle DSL语言APIgra...原创 2018-03-30 19:19:08 · 718 阅读 · 0 评论 -
AOP在Android中最佳用法
AOPAOP(Aspect Oriented Programming)是面向切面编程,AOP和我们平时接触的OOP编程是不同的编程思想,OOP是面向对象编程,提倡的是将功能模块化,对象化。而AOP的思想则是提倡针对同一类问题统一处理,当然,我们在实际编程过程中,不可能单纯的AOP或者OOP的思想来编程,很多时候,可能会混合多种编程思想。 代码注入是AOP中的重要部分:AOP可用于日志埋点、性...原创 2018-02-28 16:58:51 · 8596 阅读 · 0 评论 -
基于Kotlin实现注解生成器(Annotation Processor)
随着一些使用注解生成器(annotationProcessor)的框架的流行,例如ButterKnife、dagger2、EventBus 3.0。我需要了解注解生成器的相关知识。APTAPT(Annotation Processing Tool)是一种处理注解的工具,它对源代码文件进行检测,找出其中的Annotation。根据注解自动生成代码。Annotation处理器在处理Anno原创 2018-01-30 14:38:04 · 5152 阅读 · 7 评论 -
解决 android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcesso
在使用EventBus 3.0的时候,在Android Studio 执行Sync Project的时候出现了这个错误 android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor'由于网上很多介绍EventBus 3.0 是基于gradle 2.2.0原创 2018-01-29 15:40:25 · 5286 阅读 · 0 评论 -
Gradle发布Library到JCenter
之前工作的时候,认为只用关注代码本身就可以,将代码写好,其他的都不需要关心,但是这个认识的狭隘的,任何可以提升我们开发效率的工具或者语言我们都应该适当的去关注一下。 平常在工作中我们常常会引用到第三方的开源库,比如Fresco、EventBus等。在gradle中用compile引用:compile 'io.reativex:rxjava:1.1.3'是不是感觉这样非常方便,如果我们有自己维护的工原创 2017-12-31 16:27:17 · 479 阅读 · 0 评论 -
自定义气泡,适配项目中的所有气泡
前言为什么要做这个工作呢?气泡的意义在于引导用户去使用应用中的新功能,所以版本迭代添加新功能的时候,就是使用气泡来引导用户去使用新功能。但是每次写气泡这个功能的时候,就需要重新去写一套代码去实现,这是十分浪费时间,而且不能统一管理气泡,因此需要将气泡做成一个工具,每次实现只需要变更内容、位置和尖角的位置就好了。实现自定一个View去绘制气泡的背景和尖角,当然背景大小和尖角的位置需要适配。然后使用pu原创 2017-11-30 20:35:32 · 2100 阅读 · 0 评论 -
带你简单理解Binder
前言我们看过很多关于Binder的文章,但是看完大多数文章后,都会有不知所云的感觉,是因为那些文章不够好吗?不是那些文章讲得不够好,我们看的不明白主要是存在两种情况,一种深入代码细节不能自拔,从FrameWork到Kernel层,长篇累牍,让人很难理解Binder;另一种是只讲framework层,Binder驱动并没有具体提到,导致我们会用Binder,也大致能说的出一些原理,可并没有一个完整的深原创 2017-08-29 18:23:19 · 1514 阅读 · 0 评论 -
RxJava学习笔记
RxJavaRxjava的GitHub官网上是这样介绍rxjava的:RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programes by using observable sequences(RxJava是一个基于Rea原创 2017-07-30 10:12:49 · 908 阅读 · 0 评论 -
Android Service服务如何不被杀死
第一章 Service介绍service服务是一个应用程序的四大组件之一,可以再后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至执行进程间的通信(IPC)。1.1 基础介绍Service中比较重要的方法有以下几个: * onStartCommand() 当其他组件,如Acti原创 2017-02-11 16:38:29 · 20563 阅读 · 4 评论 -
Retrofit2源码阅读
本次分析的要点: 1. Retrofit中的动态代理和整个流程(Proxy、ServiceMethod、OkHttpCall) 2. Retrofit中的转换器和适配器(Converter、CallAdapter)Retrofit整体流程和动态代理首先我们回顾一下retrofit的使用demo Retrofit retrofit = new Retrofit.Build...原创 2018-07-31 10:59:56 · 1928 阅读 · 0 评论 -
优雅的监听软键盘隐藏
背景Android软键盘的显示和隐藏,从开始做直播这块,就一直困扰着我。从布局挤压,到输入区显示不全,再到闪屏以及卡顿,这里的坑让我跌倒无数次。各种布局监听,回调,代码冗余、复杂、与业务强耦合无法复用,还是没有很好的解决键盘的弹出和隐藏为了给用户更好的操作体验,决定找到一种最优解决方案。科普基础知识-WindowSoftInputModeActivity 的主窗口与包含屏...原创 2018-08-11 16:43:28 · 8522 阅读 · 6 评论 -
Gradle Task Configuration Avoidance
这个章节介绍了处理任务时"避免配置",并且解释了迁移构建以有效实用配置避免api的一些指导原则,这里描述的API与现有的API共存,但是现有的API将在以后的几个重要版本中被代替。在Gradle 5.1中,我们建议使用配置避免的API来创建自定义的Plugins。配置避免API是如何工作的?在nutshell中,该API允许构建避免在Gradle的配置阶段创建和配置任务的成本,而这些任务永远不...翻译 2019-09-29 19:46:43 · 2562 阅读 · 0 评论 -
优雅的减小包体积-优化图片
前言老话常谈,我们每次引入新的优化手段,都需要详细调研,明确优缺点,以及引入这项技术或者功能,能给现有的项目带来什么收益以及带来哪些不便。首先我们要搞明白为什么要优化包体积?普遍认为的减少包体积有以下几个好处:下载转换率,体积越小下载率越高如果需要和厂商合作进行预装,由于预装空间是有限的,体积越小,成本越低推广一般按照流量收费,同理,安装包体积越小,成本越低减少应用占用手机的储存空间...原创 2019-08-30 19:26:45 · 3122 阅读 · 0 评论 -
Paging Library-初探分页库
简介在2018年5月9日的谷歌开发者大会(Google I/O 2018) 中提出在去年发布的广受欢迎的架构组件上,进一步改进并推出了Jetpack。Jetpack能帮助我们更专注提升应用体验,加快应用开发速度,处理类似后台任务、UI 导航以及生命周期管理等。发布的新版 Android Jetpack 组件中更新的内容包括 4 个部分:WorkManager、Paging、Navigation...原创 2019-07-26 19:42:56 · 2288 阅读 · 1 评论 -
Gradle-初探代码注入Transform
简介本文主要介绍gradle打包过程中transform阶段,这里大概说下AOP(Aspect Oriented Programming),这是一种面向切面的思想,预支对应的是OOP(Object Oriented Programming)面向对象编程,这里不展开说明。可以看下对AOP总结的思维导图划重点本篇文章主要介绍下面的几点:Transform可以做什么简单了解App打包过程,...原创 2019-05-29 09:33:50 · 8825 阅读 · 3 评论 -
浅析Android插件化
前言在Android 9.0的jar包中,可以发现很多函数添加了@hide,这表示google显示了对@hide api的反射调用,上有政策,下有对策,我天朝人民的智慧是无穷尽的,具体的方案可以参考一种绕过Android P对非SDK接口限制的简单方法。按理说只要在Android 9.0的手机反射调用了@hide的api都不会work。但是我在华为的p20上测试,还是可以使用的,说明华为对goo...原创 2019-04-28 21:42:14 · 3555 阅读 · 0 评论 -
基于ASM的组件化框架
背景我们在开发一个应用时,会随着时间、人员和需求的增多,我们的代码也会以一个非常快的速度在迭代,同时由于每个人的开发水平不一样,就会有各种各样的问题,如果一直在一个project中开发,很快演变成一个高耦合、臃肿和复杂的项目,所以我们就需要对项目进行优化,我们经常听的有模块化、组件化和插件化,这三者的差异可以看下这篇文章本文主要介绍组件化,现有的组件化方案:SPI(Service Prov...原创 2019-03-25 14:06:07 · 3838 阅读 · 0 评论 -
apk打包流程
aapt资源编译编译assets目录和res/raw目录下的资源编译res目录下的资源文件给res目录下的每个资源赋予一个资源ID,生成resource.arsc资源索引文件解析并编译AndroidMainifest.xml资源打包成*.ap_,资源ID常量定义自R.java资源索引aapt给每一个非assets目录的资源定义一个资源ID,它是一个4字节(byte = 32bit...原创 2019-02-25 13:44:13 · 2851 阅读 · 0 评论 -
字节跳动屏幕适配方案解读
说来惭愧,这个方案在微信公众号推出来的时候,我才去了解我司自己的适配方案。字节跳动屏幕适配方案重点为什么要做屏幕适配从数据上告诉你安卓手机屏幕的碎片化我司的适配方案适配中出现的问题实际演练为什么要做屏幕适配在Android开发中,由于Android的碎片化严重,屏幕分辨率千奇百怪,想要在各种分辨率的设备上显示一致的效果,适配成本越来越高。虽然Android官方提供了dp单位来...原创 2019-01-19 12:57:25 · 6192 阅读 · 1 评论 -
手摸手带你走进Kotlin Coroutine
参考文章kotlin官网kotlin githubRoman Elizarov 视频(基于1.3之前的,一些用法已经改变,但是主要看原理和思想)Roman Elizarov 视频深入(基于1.3之前的,一些用法已经改变,但是主要看原理和思想)Roman Elizarov 基于1.3讲解jakeWharton 的适配Retrofit的adapterCoroutine的优势简化异步编...原创 2018-12-24 11:33:37 · 3561 阅读 · 0 评论 -
轻量级的MVVM
背景现在的项目中各种开发框架都有,MVC,MVP,MVVM。比较混乱,虽然也推出了MVVM,但是由于没有强制和代码历史的问题,大部分的时候还是使用之前的开发框架进行开发,所以现在整个项目的结构比较复杂和混乱。先设立一个小目标,先在咱们组内,统一开发框架,实践出真知,在实践中检测这个框架的易用性,然后加以改造,在推广出去。目标老话再谈,在已有的项目中引入、更新框架,都是有成本的,这就需要分析...原创 2018-11-25 17:11:01 · 2933 阅读 · 0 评论 -
Gradle-自定义plugin
为什么要学习GradleGradle目前已经应用于多个Android开发的技术体系中,比如构建系统、插件化、热修复和组件化,如果不了解Gradle,那么对于上述技术体系的了解会大打折扣上述一段文字是比较传统的解释,我开始系统的学习gradle是因为,项目由于引入了组件化的开发模式,模块之间的通信就需要引入一种新的方式,之前一直使用的是SPI,但是在service比较多的时候会影响到冷起的时...原创 2018-10-28 13:57:14 · 2902 阅读 · 0 评论 -
优雅的使用Kotlin
优雅的使用Kotlin这篇文章并不会从零开始来教你怎么使用Kotlin,Kotlin对于笔者来说也是一个新概念,由于大势所趋(Google所有的官方Demo都开始用Kotlin,各大第三方Library也开始适配Kotlin),所以不会Koltin寸步难行呀~,经过一段时间的学习和练习,对Kotlin有了一点浅薄的理解,在此记录下来,希望能给大家带来帮助。开始进入主题,我打算从下面几个方面来给...原创 2018-09-26 11:31:13 · 5464 阅读 · 0 评论 -
Android进阶之路——自定义NumberPicker
在之前的博客中写过一遍也是关于自定义NumberPicker的文章,不过上篇是基于系统的NumberPicker做了一些外观上的更改,现在要完全手写一个类似NumberPicker的控件,先上看一下效果图: 点击下载 首先介绍两个大家不常用的类OverScroller和VelocityTracker。OverScroller 首先要介绍OverScroller,那就不得不说Scroller,以原创 2016-01-30 10:45:06 · 7064 阅读 · 1 评论 -
Android多媒体应用:视频录制-MediaRecorder
我们一般直接从摄像头和麦克风取数据,经过编码,保存为文件。android的视频录制需要使用到MediaRecorder,MediaRecorder除了可以用于录制音频,还可用于录制视频。效果图如下图所示:一个为录制过程中,可以看到屏幕上方的录制时间显示,后一个为停止录制视频。然后录制好的视频可以在手机的SD卡中找到,如下图所示:原创 2015-02-04 16:40:39 · 1869 阅读 · 2 评论 -
Android进阶之路——NDK(二)
上一篇博客介绍了NDK简介和环境的搭建以及一个简单的Demo,这篇准备总结一下JNI调用Java对象以及在JNI中开启线程。 ps:这里说明一下,我是用Android Studio开发的,如果是用Eclipse开发的朋友,是不能直接导入我的程序,而且项目的结构和我的是有区别的。点击下载一、JNI实现回调 通过JNI在Native层调用JAVA层的方法,来实现Native层向JAVA层传递消息原创 2015-12-03 18:03:18 · 4582 阅读 · 0 评论 -
Android进阶之路——NDK(一)
一、NDK产生背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库原创 2015-11-29 13:24:43 · 1285 阅读 · 0 评论 -
Android进阶之路——AIDL
一、AIDL AIDL(Android Interface Definition Language)android接口定义语言,它可以用于让某个service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享一个service的功能。官方的文档是这样解释AIDL的: Note: Using AIDL is necessary only if you allow c原创 2015-10-27 18:57:41 · 880 阅读 · 0 评论 -
Android进阶之路——Flurry的使用
简介 Flurry是一家专门为移动应用提供数据统计和分析的公司。他们的数据统计分析SDK支持的平台包括iPhone, iPad, Android, Windows Phone, Java ME和BlackBerry。使用Flurry服务的公司包括eBay、Yahoo、Hulu和Skype等超过11万家公司,涉及的应用超过54万个,目前有17万名开发者使用名为“Flurry-Analytics”的分原创 2016-01-26 12:04:10 · 6459 阅读 · 1 评论 -
Android人脸对比
由于个人的兴趣,自己写了一个人脸识别、对比的demo,这个demo中用到的人脸识别不是Android SDK中自带的FaceDetector而是使用的Face++提供的人脸识别和人脸探测的API,这个demo不仅实现了人脸探测和人脸对比,而且实现的效果是比较绚丽的,先给大家看一下效果图。 **点击下载**一、基础知识 Face++人脸识别的三个核心概念:Image,Face和Face原创 2015-11-29 13:37:49 · 8127 阅读 · 3 评论 -
Android百度地图(地位和POI附近搜索)-仿微信、QQ地理位置的分享
因为到了新公司,比较忙加上又快6级考试,所以一个月没有更新博客。废话不多说,进入今天的主题。 要进行百度地图的开发首先要在百度地图官网进行密钥的申请,因为百度网站对于密钥的申请已经非常详细,我这里不再说明(详细介绍点击这里)原创 2015-06-06 09:49:13 · 6982 阅读 · 11 评论 -
Android自己定义NumberPicker
在项目中使用要使用滑轮来选择时间,而android系统自带的NumberPicker样式和需求不一样,而且颜色默认的是蓝色的,字体只能为黑色,上下只能显示1个,效果如下图: 这样子满足不了我们的需求,但是大体功能还是和我们需求一样的,只是外貌不是我们想要的。我在网上看过一些资料后,和一些开源的项目,最终还是决定从numberPicker的源码下手,修改一些属性,以满足需求。经过一番原创 2015-04-24 09:47:07 · 6655 阅读 · 1 评论 -
Android手机通讯录
1、概述最近由于项目需求,需要做一个查看手机通讯录,并且取出相应的数据。类似于下图:用到的一个主要的知识点:SectionIndexer——能够有效地帮助我们对分组进行控制,由于SectionIndexer是一个接口,你可以自定义一个子类来实现SectionIndexer,不过自己再写一个SectionIndexer的实现太麻烦了,这里我们直接使用Android提供好的实现原创 2015-04-06 15:10:28 · 3033 阅读 · 1 评论 -
Android实现按A-Z字母排序和模糊查询
由于这段时间工作上比较忙,就一直没有更新博客,这毕竟是第一份实习,当然要尽心尽力,但是做了很多努力和付出,感觉得不到重视,毕竟低沉。发了几句牢骚,接下来进入主题,今天给大家带来ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,这篇博客是前一篇的升级版,前一篇只是实现了联系人的排序和查询,因为Android系统中的联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而原创 2015-04-21 21:24:18 · 6101 阅读 · 0 评论 -
Android自定义统计图(柱状图,折线图,饼状图)
最近由于项目需要,研究了一些统计图的做法,开始时,看了很多博文,大部分都是引用第三方的库,虽然简单,易上手,但是功能太死板,有很多要求都是不能满足的,所以经过研究,自己使用View中的canvas重新绘图制作统计图。首先上一张gif的效果图吧。点击这里下载(0分下载)一、demo的结构一个activity中嵌套了三个fragment(v4),是用viewpager对页面进行滑动原创 2015-03-23 14:58:34 · 5660 阅读 · 0 评论 -
Android的自定义Menu使用PopupWindow实现
Android的对话框有两种:PopupWindow和AlertDialog。 它们的不同点在于: 1)AlertDialog的位置固定,而PopupWindow的位置可以随意 2)AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的 3)PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相原创 2015-03-10 21:53:00 · 1616 阅读 · 0 评论