- 博客(426)
- 资源 (16)
- 问答 (2)
- 收藏
- 关注
原创 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
904
原创 Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞
Bundle 风水(Bundle Fengshui)是指在 Android 应用开发中,使用 Bundle 类传递数据时,需要注意一些优化技巧,以避免在传递数据过程中出现性能问题。
2023-04-25 11:05:43
316
原创 Bundle数据结构和反序列化分析
Android Binder是知名女程序员Dianne Hackborn基于自己开发的OpenBinder重新实现的Android IPC机制,是Android里最核心的机制。不同于Linux下的管道、共享内存、消息队列、socket等,它是一套传输效率高、可操作性好、安全性高的Client-Server通信机制。Android Binder通过/dev/binder驱动实
2023-04-23 11:54:02
169
原创 launchAnyWhere: Activity组件权限绕过漏洞解析
1、通过了解漏洞原理,开发者可以更好地了解漏洞的产生机理,进而在应用开发过程中采取相应的安全措施,避免漏洞的产生,提高应用的安全性。2、学习漏洞原理可以帮助开发者更好地理解 Android 平台的工作原理,深入了解操作系统的内部机制,有助于开发高质量的应用程序。3、学习漏洞原理可以帮助开发者更好地理解代码的运行方式和效果,从而提高代码的可读性和可维护性。4、学习漏洞原理可以帮助开发者了解目前主流的安全防护技术,掌握安全防护的最佳实践,从而更好地保障应用程序的安全性。总之,了解和学习Android漏洞原理可以
2023-04-20 10:22:11
342
原创 由View的onAttachedToWindow引发的图片轮播问题探究
本篇文章是在View的postDelayed方法深度思考这篇文章的所有的基础理论上进行研究的,可以说是对于View的postDelayed方法深度思考这篇文章知识点的实践。某天同事某进在做一个列表页添加轮播Banner的需求的时候,发下偶尔会出现轮播间隔时间错乱的问题。我看了他的轮播的实现方案:利用间隔轮播时长每次执行完轮播之后再次循环发送;代码貌似没有太大问题,但通过现象看来应该是失效了~!
2023-01-13 16:50:33
127
原创 Android代码静态检查(lint、Checkstyle、ktlint、Detekt)
不同团队的代码的风格不尽相同,不同的项目对于代码的规范也不一样。目前项目开发中有很多同学几乎没有用过代码检测工具,但是对于一些重要的项目中代码中存在的缺陷、性能问题、隐藏bug都是零容忍的,所以说静态代码检测工具尤为重要。
2022-12-26 19:50:30
512
原创 AndroidR兼容性适配指南
Android 11基于Android早期版本构建,增加了多种功能和更新,以保障用户安全并提高透明度和可控性。所有开发者都应查看隐私功能并测试他们的应用。具体影响可能会因每个应用的核心功能、目标平台和其他因素而异。
2022-12-24 17:13:15
801
原创 AndroidQ兼容性适配指南
Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。
2022-12-24 17:06:25
1047
原创 分析java.lang.IncompatibleClassChangeError
【get】java.lang.IncompatibleClassChangeError:在某些类定义发生不兼容的类更改时发生,当前执行方法所依赖的某个类的定义已更改。
2022-09-30 16:45:11
1571
原创 Android逆向第一步之开启root权限
最近看了一些Frida相关的文章,自己也想实际手动来几个逆向操作_。恰巧手头有一款小米8的Android手机(PS:听说是最容易能拿到Root权限的国产机),想着用个把小时搞一下。没到想看了很多文章最终还是搞了一下午。没有一篇文章能让我完完整整的操作下,此刻趟的坑的心情复杂至极,留一片文章淡化一下~!最后说一下root权限和电脑上的管理权限意向,软件获得root权限后,理论上讲可以在手机已安装的软件的权限范围内进行任何操作,记住是任何操作。不要轻易授予应用软件root权限。
2022-08-19 20:30:15
1357
原创 JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换)
文章指在学会使用JNI方法动态注册,静态注册,方法替换,且在这个过程中稍微了解一下`native`层的动态库加载,方法加载等知识。
2022-04-28 20:13:32
1720
原创 非SDK接口自动化检测工具--veridex
在Android P版本,Google对非SDK接口增加了管控。Google提供了一个静态检测工具veridex,工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。
2022-03-04 10:27:41
9312
原创 实测Android音频的焦点获取和归还
最近老板想在产品中的短视频后者直播播放的时候对于手机中的音乐播放器进行暂停播放,并且退出视频播放后手机的音乐播放器还能继续播放之前的音乐。
2022-02-09 09:26:09
4489
原创 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
719
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
358
3
原创 ViewPager2+Fragment操作笔记
ViewPager2+Fragment操作笔记文章目录ViewPager2+Fragment操作笔记ViewPager2简介实际操作效果RecycleView和Viewpage2的滑动冲突ViewPager2中Fragment的懒加载懒加载预加载FragmentStateAdapteronCreateViewHolderonBindViewHolderonViewAttachedToWindowFragmentStateAdapter使用获取Fragment实例异常处理ViewPager2滑动监听Tab
2021-05-14 10:17:28
1469
原创 Java线程池实现原理和源码分析
本文章是从2019年11月下旬开始打开写的,一直拖到2020年的年尾才开始写,直到2021年年初才写完。时间太快也太慢~!依稀记得2019年10月份的时候某东从创业公司离职打算面试找工作,他问我线程池你会么?然后给我他发了一篇我2017年写的笔记《Java并发编程之线程池必用知识点》,他说就这么点?我当时想线程池也差不多就这么多吧~!2019年11月9号我和某东一起从大望路做815公交去燕郊。当时只是因为我正在学习一部分多线程相关的知识点,刚好公交车上没啥事情我俩就唠了唠。
2021-02-19 19:24:49
293
1
原创 修改AAR和Jar中class文件
前言最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个Android项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题需求:Web页面中H5和native交互,保存base64图片。问题:使用现有的已经封装好的Hybrid协议,在最后集成测试发现部分手机无法保存成功。调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。怀疑原有的协议格式问题,当.
2021-01-26 19:28:11
830
原创 Android8.0隐式广播和自定义签名权限
前言记录一下今天同事给我分享的比较有意思的Bug,在已有的已经在AndroidManifest.xml中注册的广播在部分手机上无法通过Action隐式启动。上网搜搜资料自己写了个Demo,Mark一下!!Android官网:Oreo后台执行限制我们这里主要看对于广播的影响,摘抄一段官网上的介绍:广播限制如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验.
2021-01-26 09:30:19
862
原创 Qigsaw源码之Gradle插件解析
Android App Bundle为Qigsaw的前置依赖知识点。Android App Bundle 是Android新推出的一种官方发布格式.aab,可让您以更高效的方式开发和发布应用。借助 Android App Bundle,您可以更轻松地以更小的应用提供优质的使用体验,从而提升安装成功率并减少卸载量。转换过程轻松便捷。您无需重构代码即可开始获享较小应用的优势。改用这种格式后,您可以体验模块化应用开发和可自定义功能交付,并从中受益(PS:必须依赖于GooglePlay)。qigsaw基于AA.
2021-01-25 19:23:50
1549
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
7779
原创 DiffUtil和它的差量算法
DiffUtil和它的差量算法前言学习Myers'Diff 算法是从 DiffUtils 源代码开始的,但DiffUtil和它的差量算法这篇却是文章是在写完 Myers‘Diff之贪婪算法 和 Myers‘Diff之线性空间细化 这两篇算法文章之后着手的。比较先需要学会算法才能理解代码实现并更好的进行使用。文章目录DiffUtil和它的差量算法前言DiffUtil介绍DiffUtil.DiffResultDiffUtil.DiffResultDiffUtil使用DiffUtil中Myers算法代码
2020-10-16 20:08:49
1449
原创 Myers‘Diff之线性空间细化
Myers’diff前言在学习完上一篇文章Myers’Diff之贪婪算法 之后,我对Android源码中的DiffUtil类进行了阅读发现其算法的实现和文章中的方式并不尽相同,而是在其基础之上再次进行的优化。所以本篇文章是以上一篇Myers’Diff之贪婪算法 文章内容基础之上对它的变体进行再次研究的过程。上一篇文章Myers’Diff之贪婪算法 讲述diff怎么从一个抽象的问题转化为数学问题,并对一些名词做了专有的定义(为解决问题的过程提供辅助),Myers'Diff之贪婪算法讲述了利用辅助的k线进
2020-10-12 10:46:22
1123
原创 Myers‘Diff之贪婪算法
Myers’ Diff前言写这篇文章已经拖了很久了,因为一直在看它后续的 Myers’ Diff 的变体 。最初不知道是什么时候发现 DiffUtil 对比列表 item 数据进行局部刷新,git 文件对比都用到了这个算法。上个月刚好再一次看到了就想深入了解一下。但发现发现国内的博客和帖子,对这个算法的讲述内容比较少,每篇文章都讲述了作者自己认为重要的内容,所以有一个点搞不懂的话没法整体性的进行理解。刚开始我自己就有一个点没想清楚想了好几天,我觉得程序员不能怕算法,书读百遍其义自现,阅读算法代码也是如此
2020-10-10 14:06:13
2063
2
原创 App Startup 源码分析
文章目录集成接入实现初始化组件设置AndroidManifest条目手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化程序运行Lint检查源码分析lint.jarAndroidmanifest.xmlInitializationProviderAppInitializerApp Startup总结上篇文章 非侵入试获取Context进行SDK初始化 讲述了通过ContentProvider 进行 SDK 的初始化,文章末尾引出了 App Startup 。如果一个 app .
2020-07-07 19:52:10
711
原创 非侵入式获取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
689
原创 Android内存泄漏检测工具使用手册
性能优化除过我们平时自己设计和开发之外就得考虑使用工具进行检测。Android关于能够定位和剖析问题的内存工具有很多,但不是每个工具所有场景都能覆盖到。这篇文章主要介绍LeaKCanary、shark、Android Profile、MAT、Jhat、dumpsys meminfo、GC Log等。
2020-06-05 20:01:50
2542
转载 图片不需要完全加载就能获取宽高
转载地址: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
763
原创 Bitmap图片压缩,大图加载防止OOM
文章目录前言RGB介绍图片占用内存的计算读取位图尺寸和类型内存中如果加载一张 `500*500` 的 `png` 高清图片.应该是占用多少的内存?如果这个图片为本地资源图片,是否还是0.95MB呢?Bitmap压缩压缩原理压缩Bitmap磁盘占用空间的大小压缩Bitmap占用内存的大小使用inSampleSize进行压缩使用createScaledBitmap或MatrixBitmapFacto...
2020-04-22 15:08:58
1624
4
原创 Gradle自定义Plugin插件和ASM修改字节码
前言先介绍一下 AOP 和 ASM 的概念,AOP 是一种面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。和面向对象编程 的 OOP 相同。ASM 是一个框架可以看作 AOP 的工具,当然 AOP 也有其他工具,比如用的比较多的 AspectJ 、Javassist 、Xposed 和 Dexposed 等。这里我们主要介绍一下在自定义Plugin 使用的 ASM...
2020-03-04 16:21:25
1273
原创 Picasso源码分析和对比
前面的Android-Universal-Image-Loader源码分析和Glide源码阅读理解一小时分别讲述了五年前和现在最受欢迎的`Android`图片加载库。今天讲述的picasso是Square公司开源的一个Android图片加载
2019-12-30 17:50:18
437
1
原创 Glide源码阅读理解一小时
这篇图、文、表、代码一起组成的Glide源码分析。这篇Glide的代码分析量可以说至少是ImageLoader的3倍多,本来想对Glide代码进行拆分,细化每个部分进行讲解这个每个部分讲的更加清楚一些。但最终还是打算整体一篇文章讲完,因为我觉得整体性的学习能更深的的了解到Glide的框架的设计之美。阅读本文需要大量的时间,最好选择对应的目录进行逐步阅读。
2019-12-20 19:27:01
514
原创 【历史总结】Android-Universal-Image-Loader源码分析
前言ImageLoader 是 android 使用中出现比较早(PS:即的刚接触安卓项目的时候就用的是这个图片加载图,算算已经快5年了),使用最多的一个开源图片加载库了。随着glide , fresco 和 picasso等图片加载的库出现,ImageLoader使用变得越来越少。最近在看其他图片加载库的源码,顺便补补之前错过的一些事情。代码仓库地址:Android-Universal-Im...
2019-11-26 15:11:38
1985
2
原创 Android数据库开源框架GreenDao分析
前段时间写Demo的时候遇到了数据库的并发问题 Android数据库多线程并发操作异常 ,然后研究了一下 Android中的数据库连接池 。在看相关代码的时候阅读了我们项目使用的数据库框架GreenDao 。哈哈,挺有意思的^ _ ^。Android原始数据库的使用创建数据库public class DatabaseHelper extends SQLiteOpenHelper { ...
2019-11-06 20:52:47
582
原创 Android数据库多线程并发操作异常
在我们做项目的过程中经常会有多线程异步处理的情况,那么Android中多线程操作数据我们一般会遇到什么样的问题?多个数据库对象执行并发指由不同的SQLiteOpenHelper打开的相同数据库对象,默认enableWriteAheadLogging=false。多线程单进程和多进程结果一样。同时进行数据库的读操作不会产生任何问题;如果都需要创建表,那么多次创建可能会出现问题;...
2019-11-06 20:47:06
2073
原创 Android中的数据库连接池
最近在看数据库相关的三方库的时候,我发现在Android应用开发的时候是可以并行操作数据库的读写,但Android默认的数据连接池中只有一个数据库链接。一个数据库连接能实现并发么?要是一个数据库链接可以实现并发,那么为什么需要数据库连接池?数据库连接池介绍每次提到连接池我们很快能想到线程池。线程池的创建可以减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。数据库连接...
2019-11-02 20:20:31
2702
3
原创 View的postDelayed方法深度思考
突然某天好友老瑞问我。当时听到这个问题时候我只能联想到,与此同时让我回想起了之前的一些疑问?如果上面的问题大家知道答案,那么文章大家可以快速阅读。如果不是,那么我们脑海中可以带着问题跟着我的思路去一步步学习和理解相关的知识点,最后回过头来自己再回答这些问题。网上搜索资料找到一篇 [] 文章,自己感觉从中学到很很多知识。本篇文章是我结合Android源码在此基础之上进行了思考和分析,文章内容也包含这篇资料所讲的内容。关于Handler和Looper的大部分知识在以前的文章讲的比较详细,这里讲的比较省略。
2019-10-25 16:26:29
3275
4
原创 从JVM到Dalivk再到ART(class,dex,odex,vdex,ELF)
个人博客地址 http://dandanlove.com/现在市面上的Android手机大部分都是运行的是ART虚拟机了。还记得自己一部Android手机(HUWEIg520),Android4.1系统。那时候还是没有ART虚拟机的。作为Android开发者,我们应该对Android的发展历史有些了解为什么Android会经历这么多的变化。Android是先有JVM然后是Dalvik,接着是现在...
2019-10-18 10:34:13
1113
2
tonic-refs_heads_master.tar.gz
2019-08-09
微信webview唤起外部客户端接入说明2018版
2019-02-21
gradle_2.0.0-instant-run源码
2018-05-10
BinaryTree二叉树操作相关代码
2017-10-19
IntelliJ IDEA入门图文教程整理(全部)
2016-10-17
动态绘制图片
2014-07-23
NotificationDemo
2014-07-16
FTP套接字编程
2014-04-23
Windows平台简单socket编程
2014-03-27
内排序算法比较
2013-03-14
activity绑定Service成功时ServiceConnection的回调问题?
2017-06-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人