自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

stven_king的专栏

自信人生两百年、会当击水三千尺

  • 博客(427)
  • 资源 (16)
  • 问答 (2)
  • 收藏
  • 关注

原创 Java继承中的隐藏和覆盖

Java中变量与方法在继承中的隐藏与覆盖规则:1. 父类的实例变量和类变量能被子类的同名变量隐藏。 2. 父类的静态方法被子类的同名静态方法隐藏,父类的实例方法被子类的同名实例方法覆盖。 3. 不能用子类的静态方法隐藏父类的实例方法,也不能用子类的实例方法覆盖父类的静态方法,否则编译器会异常。4. 用`final`关键字修饰的最终方法不能被覆盖。 5. 变量只能被隐藏不会被覆盖,子类的实例变量可以隐藏父类的类变量,子类的类变量也可以隐藏父类的实例变量。

2023-12-25 12:06:58 44

原创 Plugin [id: ‘org.jetbrains.kotlin.jvm‘, version: ‘1.8.21‘] was not found

Plugin [id: 'org.jetbrains.kotlin.jvm', version: '1.8.21'] was not found in any of the following sources:

2023-06-06 17:28:02 2670

原创 Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞

Bundle 风水(Bundle Fengshui)是指在 Android 应用开发中,使用 Bundle 类传递数据时,需要注意一些优化技巧,以避免在传递数据过程中出现性能问题。

2023-04-25 11:05:43 563

原创 Bundle数据结构和反序列化分析

Android Binder是知名女程序员Dianne Hackborn基于自己开发的OpenBinder重新实现的Android IPC机制,是Android里最核心的机制。不同于Linux下的管道、共享内存、消息队列、socket等,它是一套传输效率高、可操作性好、安全性高的Client-Server通信机制。Android Binder通过/dev/binder驱动实

2023-04-23 11:54:02 341

原创 launchAnyWhere: Activity组件权限绕过漏洞解析

1、通过了解漏洞原理,开发者可以更好地了解漏洞的产生机理,进而在应用开发过程中采取相应的安全措施,避免漏洞的产生,提高应用的安全性。2、学习漏洞原理可以帮助开发者更好地理解 Android 平台的工作原理,深入了解操作系统的内部机制,有助于开发高质量的应用程序。3、学习漏洞原理可以帮助开发者更好地理解代码的运行方式和效果,从而提高代码的可读性和可维护性。4、学习漏洞原理可以帮助开发者了解目前主流的安全防护技术,掌握安全防护的最佳实践,从而更好地保障应用程序的安全性。总之,了解和学习Android漏洞原理可以

2023-04-20 10:22:11 655

原创 由View的onAttachedToWindow引发的图片轮播问题探究

本篇文章是在View的postDelayed方法深度思考这篇文章的所有的基础理论上进行研究的,可以说是对于View的postDelayed方法深度思考这篇文章知识点的实践。某天同事某进在做一个列表页添加轮播Banner的需求的时候,发下偶尔会出现轮播间隔时间错乱的问题。我看了他的轮播的实现方案:利用间隔轮播时长每次执行完轮播之后再次循环发送;代码貌似没有太大问题,但通过现象看来应该是失效了~!

2023-01-13 16:50:33 204

原创 Android代码静态检查(lint、Checkstyle、ktlint、Detekt)

不同团队的代码的风格不尽相同,不同的项目对于代码的规范也不一样。目前项目开发中有很多同学几乎没有用过代码检测工具,但是对于一些重要的项目中代码中存在的缺陷、性能问题、隐藏bug都是零容忍的,所以说静态代码检测工具尤为重要。

2022-12-26 19:50:30 854

原创 AndroidR兼容性适配指南

Android 11基于Android早期版本构建,增加了多种功能和更新,以保障用户安全并提高透明度和可控性。所有开发者都应查看隐私功能并测试他们的应用。具体影响可能会因每个应用的核心功能、目标平台和其他因素而异。

2022-12-24 17:13:15 1502

原创 AndroidQ兼容性适配指南

Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。

2022-12-24 17:06:25 2169

原创 分析java.lang.IncompatibleClassChangeError

【get】java.lang.IncompatibleClassChangeError:在某些类定义发生不兼容的类更改时发生,当前执行方法所依赖的某个类的定义已更改。

2022-09-30 16:45:11 1901

原创 Android逆向第一步之开启root权限

最近看了一些Frida相关的文章,自己也想实际手动来几个逆向操作_。恰巧手头有一款小米8的Android手机(PS:听说是最容易能拿到Root权限的国产机),想着用个把小时搞一下。没到想看了很多文章最终还是搞了一下午。没有一篇文章能让我完完整整的操作下,此刻趟的坑的心情复杂至极,留一片文章淡化一下~!最后说一下root权限和电脑上的管理权限意向,软件获得root权限后,理论上讲可以在手机已安装的软件的权限范围内进行任何操作,记住是任何操作。不要轻易授予应用软件root权限。

2022-08-19 20:30:15 1905

原创 JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换)

文章指在学会使用JNI方法动态注册,静态注册,方法替换,且在这个过程中稍微了解一下`native`层的动态库加载,方法加载等知识。

2022-04-28 20:13:32 1833

原创 非SDK接口自动化检测工具--veridex

在Android P版本,Google对非SDK接口增加了管控。Google提供了一个静态检测工具veridex,工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。

2022-03-04 10:27:41 9598

原创 实测Android音频的焦点获取和归还

最近老板想在产品中的短视频后者直播播放的时候对于手机中的音乐播放器进行暂停播放,并且退出视频播放后手机的音乐播放器还能继续播放之前的音乐。

2022-02-09 09:26:09 4909

原创 从硬件角度去理解协程

从硬件角度理解协程,电脑、主板、cpu、cpu核数、多线程。。。。。协程。

2022-02-07 16:19:53 1894

原创 【亲测】Shell日期时间和时间戳相互转化

先说一下为什么写这篇文章,因为目前没有一篇文章能让我在Mac上成功执行的脚步。

2022-01-16 16:10:58 4711 1

原创 aapt与aapt2--资源id固定和PUBLIC标记

目录前言AAPT概述资源CompileLink查看编译后的资源资源共享ids.xml概述public.xml概述资源id固定`aapt`进行`id`的固定`aapt2`进行`id`的固定R.txt转public.txtPUBLIC标记回顾思考动手实践参考:前言整片文章是围绕 tinker 的 TinkerResourceIdTask 里的知识点进行扩展的。aapt 和 aapt2 的差异(运行环境和运行结果);资源 id 的固定;进行 PUBLIC 的标记;aapt 运行环境为 gradl.

2021-07-14 20:12:58 843 1

原创 将构建配置从 Groovy 迁移到 KTS

将构建配置从 Groovy 迁移到 KTS前言作为Android开发习惯了面向对象编程,习惯了IDEA提供的各种辅助开发快捷功能。那么带有陌生的常规语法的Groovy脚本对于我来说一向敬而远之。Kotlin DSL的出现感觉是为了我们量身定做的,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。名词概念解释Gradle: 自动化构建工具. 平行产品: Maven.Groovy: 语言, 编译后变为JVM byte code,

2021-06-28 19:29:19 443 3

原创 ViewPager2+Fragment操作笔记

ViewPager2+Fragment操作笔记文章目录ViewPager2+Fragment操作笔记ViewPager2简介实际操作效果RecycleView和Viewpage2的滑动冲突ViewPager2中Fragment的懒加载懒加载预加载FragmentStateAdapteronCreateViewHolderonBindViewHolderonViewAttachedToWindowFragmentStateAdapter使用获取Fragment实例异常处理ViewPager2滑动监听Tab

2021-05-14 10:17:28 1687

原创 Java线程池实现原理和源码分析

本文章是从2019年11月下旬开始打开写的,一直拖到2020年的年尾才开始写,直到2021年年初才写完。时间太快也太慢~!依稀记得2019年10月份的时候某东从创业公司离职打算面试找工作,他问我线程池你会么?然后给我他发了一篇我2017年写的笔记《Java并发编程之线程池必用知识点》,他说就这么点?我当时想线程池也差不多就这么多吧~!2019年11月9号我和某东一起从大望路做815公交去燕郊。当时只是因为我正在学习一部分多线程相关的知识点,刚好公交车上没啥事情我俩就唠了唠。

2021-02-19 19:24:49 403 1

原创 修改AAR和Jar中class文件

前言最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个Android项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题需求:Web页面中H5和native交互,保存base64图片。问题:使用现有的已经封装好的Hybrid协议,在最后集成测试发现部分手机无法保存成功。调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。怀疑原有的协议格式问题,当.

2021-01-26 19:28:11 960

原创 Android8.0隐式广播和自定义签名权限

前言记录一下今天同事给我分享的比较有意思的Bug,在已有的已经在AndroidManifest.xml中注册的广播在部分手机上无法通过Action隐式启动。上网搜搜资料自己写了个Demo,Mark一下!!Android官网:Oreo后台执行限制我们这里主要看对于广播的影响,摘抄一段官网上的介绍:广播限制如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验.

2021-01-26 09:30:19 1080

原创 Qigsaw源码之Gradle插件解析

Android App Bundle为Qigsaw的前置依赖知识点。Android App Bundle 是Android新推出的一种官方发布格式.aab,可让您以更高效的方式开发和发布应用。借助 Android App Bundle,您可以更轻松地以更小的应用提供优质的使用体验,从而提升安装成功率并减少卸载量。转换过程轻松便捷。您无需重构代码即可开始获享较小应用的优势。改用这种格式后,您可以体验模块化应用开发和可自定义功能交付,并从中受益(PS:必须依赖于GooglePlay)。qigsaw基于AA.

2021-01-25 19:23:50 1619 5

原创 Android中R文件ID值

Android中R文件ID值文章目录Android中R文件ID值前言知识回顾在代码中访问资源语法R文件Lib库的R文件AAR中的R文件依赖库R文件的生成R文件的数量后续疑问官网参考资料前言前端时间在学习 Qigsaw 相关的源码,思考到一个问题。动态加载的feature 包里的 资源id 是否会与主包中的 资源id 冲突。因为主包的 apk 文件不一定是和加载的feature 包是一起打包生成的,feature 包是可以进行升级的。查看 Qigsaw编译脚本对 old.apk 进行增量编译 feat

2021-01-11 17:21:35 9050

原创 DiffUtil和它的差量算法

DiffUtil和它的差量算法前言学习Myers'Diff 算法是从 DiffUtils 源代码开始的,但DiffUtil和它的差量算法这篇却是文章是在写完 Myers‘Diff之贪婪算法 和 Myers‘Diff之线性空间细化 这两篇算法文章之后着手的。比较先需要学会算法才能理解代码实现并更好的进行使用。文章目录DiffUtil和它的差量算法前言DiffUtil介绍DiffUtil.DiffResultDiffUtil.DiffResultDiffUtil使用DiffUtil中Myers算法代码

2020-10-16 20:08:49 1638

原创 Myers‘Diff之线性空间细化

Myers’diff前言在学习完上一篇文章Myers’Diff之贪婪算法 之后,我对Android源码中的DiffUtil类进行了阅读发现其算法的实现和文章中的方式并不尽相同,而是在其基础之上再次进行的优化。所以本篇文章是以上一篇Myers’Diff之贪婪算法 文章内容基础之上对它的变体进行再次研究的过程。上一篇文章Myers’Diff之贪婪算法 讲述diff怎么从一个抽象的问题转化为数学问题,并对一些名词做了专有的定义(为解决问题的过程提供辅助),Myers'Diff之贪婪算法讲述了利用辅助的k线进

2020-10-12 10:46:22 1277 1

原创 Myers‘Diff之贪婪算法

Myers’ Diff前言写这篇文章已经拖了很久了,因为一直在看它后续的 Myers’ Diff 的变体 。最初不知道是什么时候发现 DiffUtil 对比列表 item 数据进行局部刷新,git 文件对比都用到了这个算法。上个月刚好再一次看到了就想深入了解一下。但发现发现国内的博客和帖子,对这个算法的讲述内容比较少,每篇文章都讲述了作者自己认为重要的内容,所以有一个点搞不懂的话没法整体性的进行理解。刚开始我自己就有一个点没想清楚想了好几天,我觉得程序员不能怕算法,书读百遍其义自现,阅读算法代码也是如此

2020-10-10 14:06:13 2327 2

原创 App Startup 源码分析

文章目录集成接入实现初始化组件设置AndroidManifest条目手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化程序运行Lint检查源码分析lint.jarAndroidmanifest.xmlInitializationProviderAppInitializerApp Startup总结上篇文章 非侵入试获取Context进行SDK初始化 讲述了通过ContentProvider 进行 SDK 的初始化,文章末尾引出了 App Startup 。如果一个 app .

2020-07-07 19:52:10 835

原创 非侵入式获取Context进行SDK初始化

文章目录非侵入试获取Context进行SDK初始化picasso 初始化InstantRunLeakcanaryApp Startup非侵入试获取Context进行SDK初始化当我们在使用第三方SDK,或者自己进行SDK封装时,如果需要需要用到 Context 进行初始化时,一般做法就是将初始化方法暴露给调用方,让调用方在初始化SDK时,传入上下文环境。publi class App extends Application { @Override public void onCrea.

2020-07-07 19:42:19 777

原创 Android内存泄漏检测工具使用手册

性能优化除过我们平时自己设计和开发之外就得考虑使用工具进行检测。Android关于能够定位和剖析问题的内存工具有很多,但不是每个工具所有场景都能覆盖到。这篇文章主要介绍LeaKCanary、shark、Android Profile、MAT、Jhat、dumpsys meminfo、GC Log等。

2020-06-05 20:01:50 2755

转载 图片不需要完全加载就能获取宽高

转载地址:http://blog.jdk5.com/zh/java-get-image-size-without-loading-the-whole-data/前几天写的 Bitmap图片压缩,大图加载防止OOM 文章中讲到了图片加载到内存之前先获取图片的宽高,然后判断是否加载后会占用内存过大。这种加载前获取图片宽高的是使用 Android自带的Bitmap 提供的功能,底层是 C++ 的实现。...

2020-04-27 11:40:50 842

原创 Bitmap图片压缩,大图加载防止OOM

文章目录前言RGB介绍图片占用内存的计算读取位图尺寸和类型内存中如果加载一张 `500*500` 的 `png` 高清图片.应该是占用多少的内存?如果这个图片为本地资源图片,是否还是0.95MB呢?Bitmap压缩压缩原理压缩Bitmap磁盘占用空间的大小压缩Bitmap占用内存的大小使用inSampleSize进行压缩使用createScaledBitmap或MatrixBitmapFacto...

2020-04-22 15:08:58 1849 4

原创 Gradle自定义Plugin插件和ASM修改字节码

前言先介绍一下 AOP 和 ASM 的概念,AOP 是一种面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。和面向对象编程 的 OOP 相同。ASM 是一个框架可以看作 AOP 的工具,当然 AOP 也有其他工具,比如用的比较多的 AspectJ 、Javassist 、Xposed 和 Dexposed 等。这里我们主要介绍一下在自定义Plugin 使用的 ASM...

2020-03-04 16:21:25 1358

原创 Picasso源码分析和对比

前面的Android-Universal-Image-Loader源码分析和Glide源码阅读理解一小时分别讲述了五年前和现在最受欢迎的`Android`图片加载库。今天讲述的picasso是Square公司开源的一个Android图片加载

2019-12-30 17:50:18 474 1

原创 Glide源码阅读理解一小时

这篇图、文、表、代码一起组成的Glide源码分析。这篇Glide的代码分析量可以说至少是ImageLoader的3倍多,本来想对Glide代码进行拆分,细化每个部分进行讲解这个每个部分讲的更加清楚一些。但最终还是打算整体一篇文章讲完,因为我觉得整体性的学习能更深的的了解到Glide的框架的设计之美。阅读本文需要大量的时间,最好选择对应的目录进行逐步阅读。

2019-12-20 19:27:01 568

原创 【历史总结】Android-Universal-Image-Loader源码分析

前言ImageLoader 是 android 使用中出现比较早(PS:即的刚接触安卓项目的时候就用的是这个图片加载图,算算已经快5年了),使用最多的一个开源图片加载库了。随着glide , fresco 和 picasso等图片加载的库出现,ImageLoader使用变得越来越少。最近在看其他图片加载库的源码,顺便补补之前错过的一些事情。代码仓库地址:Android-Universal-Im...

2019-11-26 15:11:38 2098 2

原创 Android数据库开源框架GreenDao分析

前段时间写Demo的时候遇到了数据库的并发问题 Android数据库多线程并发操作异常 ,然后研究了一下 Android中的数据库连接池 。在看相关代码的时候阅读了我们项目使用的数据库框架GreenDao 。哈哈,挺有意思的^ _ ^。Android原始数据库的使用创建数据库public class DatabaseHelper extends SQLiteOpenHelper { ...

2019-11-06 20:52:47 630

原创 Android数据库多线程并发操作异常

在我们做项目的过程中经常会有多线程异步处理的情况,那么Android中多线程操作数据我们一般会遇到什么样的问题?多个数据库对象执行并发指由不同的SQLiteOpenHelper打开的相同数据库对象,默认enableWriteAheadLogging=false。多线程单进程和多进程结果一样。同时进行数据库的读操作不会产生任何问题;如果都需要创建表,那么多次创建可能会出现问题;...

2019-11-06 20:47:06 2195

原创 Android中的数据库连接池

最近在看数据库相关的三方库的时候,我发现在Android应用开发的时候是可以并行操作数据库的读写,但Android默认的数据连接池中只有一个数据库链接。一个数据库连接能实现并发么?要是一个数据库链接可以实现并发,那么为什么需要数据库连接池?数据库连接池介绍每次提到连接池我们很快能想到线程池。线程池的创建可以减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。数据库连接...

2019-11-02 20:20:31 2938 3

原创 View的postDelayed方法深度思考

突然某天好友老瑞问我。当时听到这个问题时候我只能联想到,与此同时让我回想起了之前的一些疑问?如果上面的问题大家知道答案,那么文章大家可以快速阅读。如果不是,那么我们脑海中可以带着问题跟着我的思路去一步步学习和理解相关的知识点,最后回过头来自己再回答这些问题。网上搜索资料找到一篇 [] 文章,自己感觉从中学到很很多知识。本篇文章是我结合Android源码在此基础之上进行了思考和分析,文章内容也包含这篇资料所讲的内容。关于Handler和Looper的大部分知识在以前的文章讲的比较详细,这里讲的比较省略。

2019-10-25 16:26:29 3744 4

tonic-refs_heads_master.tar.gz

Google开发的新的操作系统Fuchsia其中的tonic相关的代码,在学习flutter和dart源码的时候里面会用到部分代码。

2019-08-09

微信webview唤起外部客户端接入说明2018版

微信webview唤起外部客户端接入说明2018版。 为提升微信 webivew 中网页打开其他应用的体验,防止诱导点击、强制跳出等不合理行为, 我们的“唤起外部客户端”的能力统一调整为: 1、 在 6.5.16 及以上版本的微信客户端中,贵方网页将只能使用 launchApplication 接口,打 开其他应用。该接口会在唤起前要求用户接受弹窗确认。 2、 在 6.5.16 以下版本的微信客户端中,贵方网页可以继续使用现有方式,打开其他应用。

2019-02-21

gradle_2.0.0-instant-run源码

gradle_2.0.0-instant-run源码,可查看BootstrapApplication,IncrementalClassLoader等类。

2018-05-10

红黑树相关代码以及解析

红黑树的添加、删除、遍历等代码&以及注释,提供测试样例~!

2018-03-12

深入探索Android热修复技术原理

阿里巴巴开源的《深入探索Android热修复技术原理》,其中讲述了热修复技术以及原理。

2017-11-09

BinaryTree二叉树操作相关代码

二叉树相关操作:判断是否为二叉排序树、完全二叉树、二叉平衡树;翻转二叉树,求树的深度、叶子节点个数,某节点到根节点的路径,两个节点的最近公共节点等等。

2017-10-19

IntelliJ IDEA入门图文教程整理(全部)

史上最全的的Intellij IDEA使用文档,图文结合正确的描述个性化的设置。适用于Intellij IDEA,Android Studio,Web Storm等等。

2016-10-17

org.apache压缩工具包

由apache提供的压缩解压工具类,比JDK原生类库中的方法更好使用。

2015-04-02

Java中的pingying工具包pinyin4j-2.5.0.jar

汉子转化拼音的工具包,可以把汉子的字母提取出来,这样方便与做类似于通讯录的Demo。

2014-08-08

Eclipse智能提示删除空格,等于,分号键,点上屏

Eclipse其Version: 4.2.2的去掉不需要的(eg:空格或等号或其他)按键上屏提示,增加自己需要的按键提示。

2014-08-07

动态绘制图片

BitMap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象,开发者被一个Bitmap对象包装成BitmapDrawable对象,可以调用BitmapDrawable的构造器。再者对它进行平移,缩放,旋转等。

2014-07-23

NotificationDemo

调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的NotifacationManager服务 通过构造器创建一个Notification对象 为Notification设置各种属性 通过NotificationManager发送Notification。

2014-07-16

FTP套接字编程

在前三个实验的基础上,将其改造为一个能传输指定文件名称的点对点文件传输软件 设计并实现一个支持多个客户端的文件传输服务器 客户端等待键盘输入文件名称,然后将文件名称传输给服务器,服务器在预先设置好的文件夹下查找该文件,如果发现同名文件,开始传输回客户端,客户端接收完文件后将文件以输入的文件名称保存在本地某个目录即可,否则告诉客户端文件不存在。

2014-04-23

Windows下多线程套接字编程

windows下的多线程的并发的套接字编程

2014-04-09

Windows平台简单socket编程

(1)在Windows上,编写、编译1个客户机端程序和1个服务器端程序。要求客户机端程序能发送请求给服务器端程序,服务器端程序收到后能发送本机时间给客户机端程序。 (2)在相同或不同机子上,先运行服务器端程序可执行文件,后运行客户机端程序可执行文件。

2014-03-27

内排序算法比较

1) 对以下 6 种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排 序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于 1000( 其数据用伪随机数产生 ),至少用5 组不同的 输入数据作比较;比较的指标为关键字的比较次数和关键字的移动次数(一次关键 字交换计为3 次移动)。 3) 统计在完全正序、完全逆序及无序情况下的关键字比较次数和移动次数。 4) 对结果作简单分析,包括对各组数据得出结果波动大小的解释。

2013-03-14

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

TA关注的人

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