自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

依生依世

一只纠结的程序猿

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 增量Lint检测实现原理

增量Lint检测实现原理一.基本思路二.实现1.自定义LintClient2.增量检查文件3.其他自定义类4.自定义Gradle插件在Lint实现原理里已经知道,Lint检测的文件,默认是Project的javaSourceFolders和resourceFolders,但是这样会造成每次Lint检测的时间很长,我们pipeline的效率就很低;所以我们设想要做到一种增量检查:每次只检查改动的文件一.基本思路我们先回顾一下获取要检测文件的方式:val files = project.subseti

2020-12-15 16:19:34 864 3

原创 Lint实现原理

Lint实现原理一.LintTask二.LintOptions配置1.创建2.配置3.获取三.Lint执行触发ReflectiveLintRunnerLintGradleExecutionLintGradleClient(extends LintCliClient)四.Lint规则定义DetectorRegistry五.Lint检测流程Scopeanalyze()1.解析自定义规则2.解析所有Detector3.Lint规则检查(1)AndroidManifest.xml(2)Resource .xmli.

2020-12-14 22:07:01 1196

原创 Git Hooks的使用

Git Hooks的使用1.git默认提供2.自定义hook操作(1)直接修改(2)链接自定义文件有时我们想要在git操作时候进行一些定制化操作,比如在git commit时候检查一下提交内容是否合规、git push时候检查一下资源文件大小等等,这些功能需要我们可以在git命令执行前后进行拦截,git hooks提供了这样的能力。1.git默认提供我们每个通过git管理的项目,在.git/hooks/文件夹中,会提供一些默认的git hooks文件,比如pre-commit.sample pre-p

2020-05-26 10:55:30 2758

原创 Android Studio 插件开发实战

Android Studio 插件开发1.搭建IntelliJ IDEA开发环境2.配置插件项目3.开发插件4.发布和安装插件AndroidStudio中有许多插件,比如生成set/get方法、生成toString方法等,这些插件可以辅助我们进行快捷的开发。我们也可以自己开发插件,比如我们想在一个model类中,自动生成所有private变量的get方法,当然AndroidStudio自带插件已经支持了,这里我们只是以这个例子为入手点,看下如何开发一个IDE插件。1.搭建IntelliJ IDEA开

2020-05-25 19:24:18 1230

原创 Android Lint基本使用和自定义规则

Android Lint基本使用和自定义规则一.基本使用1.gradle配置2.指定规则3.执行Lint检测i.实时检测ii.手动检测iii.Gradle命令行执行二.自定义规则1.lint_rules(1)引入依赖(2)定义规则i.需要检测的方法名ii.检测指定方法的调用iii.规则配置(3)注册规则(4)生成jar包2.如何使用jar3.lint_aar4.assemble运行时检测三.调试自定义规则1.运行目标项目的gradle命令2.开启lint项目的debug模式四.检测时机一.基本使用1.g

2020-05-25 19:11:48 3154 2

原创 RxJava2.0 源码剖析

RxJava2.0 源码剖析一.Observable(被观察者/发射器)二.Subscribe(订阅事件)三.Observer(观察者)这里我们先以一个最基础的使用case,来分析RxJava的实现原理。Observable.create(ObservableOnSubscribe<Int> { emitter -> (1..3).forEach { emitter....

2019-12-26 21:53:54 210

原创 Android AnnotationProcessor

Android AnnotationProcessor一.项目结构二.定义注解三.实现注解处理器(一)依赖(二)注解处理器(三)处理注解四.使用注解处理器(一)依赖(二)使用注解(三)生成的代码五.注意事项注解处理器通常可以用在模块间解藕、自动生成代码等地方,比如router路由或者butterknife。效果就是我们在某些地方标注某些注解,在编译时,注解处理器会扫描这些注解的地方,然后生成一些...

2019-12-26 20:59:42 5708

原创 Android Locale语言设置

Android Locale语言设置一.系统设置二.应用级设置(一)更新Locale1.updateConfiguration2.createConfigurationContext(二)获取Locale(三)Locale.getDefault()(四)WebView的坑三.实践Android系统支持多种语言的切换,可以是系统级别的,也可以是应用级别的。一.系统设置系统语言的设置在手机设置页...

2019-12-26 17:34:02 7104 1

原创 Android App Bundle

Android App BundleAABAPKSDynamic Feature ModuleAndroid 5.0以下设备注意事项Android项目中会有针对不同设备的资源文件,比如根据分辨率不同,drawable会分为drawable-ldpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等文件夹;根据系统版本不同,layout会分为layout-...

2019-12-26 17:22:45 1254

原创 Android R文件生成

Android R文件生成AAR主工程Android在打包时,通过AAPT工具,对主工程和引入的依赖里的所有资源文件进行编译压缩,并会对res/里的资源文件如drawable、layout、values等生成唯一的id,同时生成R.java文件,保存所有的id值,以及生成resource.arsc文件,建立id对应资源的值(如string)或文件路径(如png)的关系表。如上图是我们apk中...

2019-12-26 16:36:37 5202

原创 Android SharedPreferences实现原理

Android SharedPreferences实现原理一.简介二.实现原理1.创建2.取值3.更新4.应用(1)commit()(2)apply()三.总结一.简介在Android中,我们通常会需要存储一些数据,有一些大型的数据诸如图片、JSON数据等,可以通过读写File的方式实现;有一些大量级的关系型数据,可以通过数据库SQLite实现;还有一些简单的、无安全风险的键值对数据,可以通过...

2019-09-03 19:11:40 1901

原创 Android 代理拦截系统层代码

Android 代理拦截系统层代码一.手动代理1.溯源2.手动代理二.动态代理1. 溯源2. 动态代理有时我们的项目会遇见如下所示的崩溃堆栈:android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() at android.ap...

2019-08-06 11:31:10 613

原创 ReactNative For Android 之六:组件生命周期

ReactNative For Android 之六:组件生命周期一.周期方法二.基本流程一.周期方法getDefaultProps:在组件类创建的时候调用一次(一般app启动时会加载组件类),里面返回的对象是定义的props的初始值,没有被覆盖时就是用这个默认值;返回的props对象是该组件的props(共用内存空间),每次用到该组件都有这些props的默认值;不能通过thi...

2019-08-01 19:16:47 193

原创 ReactNative For Android 之五:自定义module

ReactNative For Android 之五:自定义module一.创建自定义module类二.创建自定义的Package三.JS中调用四.回调方法和native主动发送消息1.回调方法2.native主动发送消息JS是如何调用到native的特性的,可以通过定义自定义Module和自定义的Component来定义模块和组件在JS中使用,这里以模仿ToastAndroid的组件的功能To...

2019-08-01 18:44:42 532

原创 ReactNative For Android 之四:自定义组件

ReactNative For Android 之四:自定义组件一.自定义View二.添加到自定义package三.JS中调用四.native事件的处理ReactNative已经包含很多常用控件,并在持续更新,但仍然不可能包含全部控件,比如很多第三方的已经我们自定义的控件,不过提供了方法让我们将想使用的控件包装到RN里,就可以在js中使用了,android里常用的Button RN没有包含(有别...

2019-08-01 18:36:18 396

原创 ReactNative For Android 之三:工程结构

ReactNative For Android 之三:工程结构一.目录二.入口三.入口文件四.创建组件(参考上面例子)一.目录初始化项目后会自动带有android文件夹:android项目文件夹ios文件夹:ios项目文件夹node_modules:源码index.android.js:android的js入口文件index.ios.js:ios的js入口文件...

2019-08-01 18:25:59 190

原创 ReactNative For Android 之二:基本组件和API

ReactNative For Android 之二:基本组件和API一.基本组件1.DrawerLayoutAndroid2.Image3.ListView4.Navigator5.ProgressBarAndroid6.PullToRefreshAndroid7.ScrollView8.TextInput9.ToolbarAndroid10.ViewPagerAndroid11.Touchab...

2019-08-01 18:06:56 258

原创 ReactNative For Android 之一:环境搭建

ReactNative For Android 之一:环境搭建一.ReactNative官方文档二.环境搭建三.调试四.升级版本一.ReactNative官方文档英文:https://facebook.github.io/react-native/docs/getting-started.html中文:http://reactnative.cn/docs/android-setup....

2019-08-01 17:46:16 166

原创 Android Gradle Transform使用

Android Gradle Transform使用一.概述二.使用(一)引入(二)API1.QualifiedContent2.TransformInput3.TransformOutputProvider4.TransformInvocation5.ContentType6.SCOPE7.TransformManager8.Transform(三)使用流程1.添加至构建2.构建流程3.tran...

2019-08-01 17:02:45 1407

原创 Android Gradle插件断点调试

Android Gradle插件断点调试一.配置命令行参数二.配置debug三.运行调试有时我们需要调试gradle插件来解决问题,比如我们写了一个gradle插件的项目,还有一个引用该插件的项目,需要在编译该项目时断点调试插件项目的流程,应该怎么办呢?一.配置命令行参数在我们执行项目的某个gradle命令时,后面加上-Dorg.gradle.daemon=false -Dorg.gradl...

2019-08-01 16:43:21 1316

原创 Android Gradle 使用

Android Gradle 使用一.Gradle(一)简介(二)项目结构(三)基本概念(四)脚本执行过程1.配置阶段2.执行阶段二.Task(一)创建(二)定义执行代码1.配置阶段代码2.doFirst3.doLast(三)配置1.property2.configure3.Project的配置(四)Task依赖关系(五)自定义Task1.Task的类型2.自定义Task三.Plugin(一)定义...

2019-08-01 16:39:27 362

原创 Javassist使用

Javassist使用一.简介二.使用(一)class1.获取2.新建3.内部类4.更新(二)constructor1.获取2.新建3.修改方法体(1)insertBefore/insertAfter(2)setBody(3)修饰符(三)field1.获取2.新建3.setter/getter(四)method1.获取2.新建3.setter/getter(五)参数使用(六)static1.获取2...

2019-08-01 15:51:50 1259

原创 AspectJ 使用及原理

AspectJ 使用及原理一.简介二.原理三.使用(一)基本概念1.连接点(JoinPoint)2.切点(PointCut)3.插入逻辑(Advice)4.切面(Aspect)(二)类型匹配表达式1.注解2.修饰符3.返回值4.类5.方法名6.方法参数7.组合使用(三)切入点组合表达式1.call/execution2.this3.target4.within5.args6.注解支持7.组合使用8...

2019-08-01 15:08:57 5043

原创 Android 6.0 View行为变更适配

Android 6.0 View行为变更适配一.相关知识参考二.异常现象分析(一).正常情况(二).异常情况(三).异常行为分析1.为何ScrollView滑动不上去了,而RecyclerView可以自己滑动2.为何RecyclerView的高度发生改变3.UNSPECIFIED的size如何影响RecyclerView测量4.UNSPECIFIED的size为何不为0(1)6.0之前的Scrol...

2019-08-01 11:33:05 211

原创 Android 8.0/8.1 screenOrientation适配

Android 8.0/8.1 screenOrientation适配一.问题二.原因1.Android 8.02.Android 8.13.Android8.0以下和Android9.04.总结三.解决1.设置targetSdkVersion为26及以下2.修改Activity的style3.修改Activity的screenOrientation一.问题在适配完Android9.0,即ta...

2019-08-01 10:29:57 1469 1

原创 Android 8.0/8.1 channel适配

Android 8.0/8.1 channel适配一.背景二.问题三.原因8.0系统源码8.1系统源码四.解决一.背景Android 8.0(target=26)的适配中,有一个关于Notification的适配点:8.0开始使用Notification时候,需要指定一个渠道channel,用来将不同的通知类型分类管理,通常我们的代码会如下处理//service.startForegroun...

2019-08-01 10:16:01 5334 1

原创 Android 9.0适配

Android 9.0适配一.新功能1.WiFi RTT室内定位2.刘海屏支持(1)调试(2)页面的刘海使用模式(3)刘海相关API(4)适配方式3.解码图片4.动画二.所有应用的变更1.访问受限2.非SDK接口访问限制3.安全行为变更4.UTF解码5.xt_qtaguid文件访问6.FLAG_ACTIVITY_NEW_TASK7.屏幕旋转8.相机枚举三.目标(target)API28的变更1.前...

2019-08-01 10:08:26 1584

原创 Android launchMode的特殊行为

Android launchMode的特殊行为1.被其他app调起时,launcheMode的行为2.点击Home键,再点击app图标,回到app的行为1.被其他app调起时,launcheMode的行为被调起的app如果没有初始化,那么Application一定会被初始化,且一定为新的进程如果launceMode是standard或者singleTop的,那么Activity是在当...

2019-07-31 19:42:45 166

原创 Android View位置跳动问题

Android View位置跳动问题有时我们会遇到当页面刷新后,类似NestedScrollView和RecyclerView这种可滑动View的滚动位置会变化一下,和原先不一致通过调试我们发现,是因为页面里有RecyclerView这种可以获取焦点的View,跟踪代码得知,当这种View的一些flag属性变化时:如Visibility、focusable、enable等,会尝试去re...

2019-07-31 19:34:46 741

原创 Android View 获取焦点

Android View 获取焦点有时我们需要某些View获取焦点,比如EditText获取焦点弹出键盘,我们有以下几种方式可以做到1.在页面初始化的时候调用view.requestFocus()override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ...

2019-07-31 19:26:52 3258

原创 Android AppBarLayout吸顶位置错误问题

Android AppBarLayout吸顶位置错误问题我们通常会用AppBarLayout来做一些复杂滚动和吸顶的效果,比如如下代码:<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.and...

2019-07-31 19:22:01 1890

原创 Android 添加系统级窗口

Android 添加系统级窗口1.通过WindowManager可以添加一个系统层的window,覆盖在整个屏幕的最上层,可以用来实现悬浮窗、覆盖层等功能,但是不同android系统行为不一致系统版本type权限<23(6.0)TYPE_SYSTEM_ALERT不需要23~25(7.1)TYPE_SYSTEM_ALERTSYSTEM_ALERT_WIN...

2019-07-31 18:22:00 1110

原创 Android View clipChildren属性

Android View clipChildren属性ViewGroup的clipChildren属性,决定其children是否要绘制超过其区域的部分默认为true:意为裁剪children,如果children边界超出parent,则会被裁减掉不显示,和正常一样设置为false:如果设置该属性的ViewGroup-A,其有一个ViewGroup的child-B,那么B的chil...

2019-07-31 18:10:52 421

原创 Android View clipToPadding属性

Android View clipToPadding属性view的clipPadding属性,决定绘制时,是否将其content(自身内容、children),绘制到其padding位置默认为true:意为裁剪padding,绘制时padding区域的content将会被裁剪掉,也就是会正常显示padding设置为false:如果content达到padding区域,会覆盖pad...

2019-07-31 17:55:06 568

原创 Android WebView加载本地url

Android WebView加载本地url通常我们使用WebView的loadUrl()方法加载一个远程html,也可以加载一个本地html文件,通常我们把本地html会放在assets目录下。加载assets文件夹下的文件:webview.loadUrl(" file:///android_asset/index.html ");如果Html中有script,我们需要开启js功能,否...

2019-07-31 17:19:56 3496

原创 Android H5调用WebView选文件

Android H5调用WebView选文件H5页面可以通过< input type=‘file’ accept=‘image/*’/>来调用WebView的方法,进行图片选择,这里调用的方法在WebChromeClient中,不同版本系统需要做兼容系统版本override methodnote<21(5.0)openFileChooser(Value...

2019-07-31 17:15:44 1813

原创 Android 调用系统应用选文件

Android 调用系统应用选文件我们通常会通过Intent调起系统应用进行选择文件,包括图片、视频、音频等,但是需要考虑不同系统版本的兼容性问题系统版本actionaccept_type(选择文件类型)<19(4.4)Intent.ACTION_GET_CONTENT通过intent.setType,设置一个字符串表示MIMEType:“image/*, vi...

2019-07-31 17:04:30 3476

原创 Android 动画 原理解析

Android 动画 原理解析一.View动画(一)基本使用1.代码实现2.xml实现(二)原理解析1.实现原理2.源码分析(1)Animation类(2)流程分析二.布局动画(一)基本使用1.xml实现2.代码实现(二)原理解析1.实现原理2.源码分析(1)解析设置LayoutAnimationController(2)dispatchDraw()三.属性动画(一)基本使用1.代码实现2.xml...

2019-07-31 16:35:00 343

原创 Android 动态权限机制详解

Android 动态权限机制详解一.权限系统(一)6.0之前(二)6.0之后(三)8.0二.兼容适配(一)TargetSdkVersion(二)适配方法1.检查权限2.请求权限3.请求权限的结果4.适当的提示5.Fragment的权限请求6.流程图总结一.权限系统(一)6.0之前Android为一些操作提供了必要的权限,比如我们的app想访问网络,就需要有网络权限android.permis...

2019-07-31 15:47:45 2376

原创 Android 编码解码的原理解析

Android 编码解码的原理解析一.字符集1.字符集的由来2.字符集的演变(1)ISO-8859-1字符集(2)GB2312/GBK字符集(3)Unicode字符集(4)UTF-8编码方式二.编码解码1.编码和解码2.Java中的编码解码3.URL的解码编码三.android中的编码解码一.字符集1.字符集的由来计算机识别、处理、传递、存储数据,都是基于一个个的字节,一个字节有8为,每...

2019-07-31 15:33:49 1578

安卓笔记文档

安卓的一些常用控件代码的笔记,不是很全,但应该有用

2014-05-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除