JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换) 文章指在学会使用JNI方法动态注册,静态注册,方法替换,且在这个过程中稍微了解一下`native`层的动态库加载,方法加载等知识。
非SDK接口自动化检测工具--veridex 在Android P版本,Google对非SDK接口增加了管控。Google提供了一个静态检测工具veridex,工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。
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.
将构建配置从 Groovy 迁移到 KTS 将构建配置从 Groovy 迁移到 KTS前言作为Android开发习惯了面向对象编程,习惯了IDEA提供的各种辅助开发快捷功能。那么带有陌生的常规语法的Groovy脚本对于我来说一向敬而远之。Kotlin DSL的出现感觉是为了我们量身定做的,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。名词概念解释Gradle: 自动化构建工具. 平行产品: Maven.Groovy: 语言, 编译后变为JVM byte code,
ViewPager2+Fragment操作笔记 ViewPager2+Fragment操作笔记文章目录ViewPager2+Fragment操作笔记ViewPager2简介实际操作效果RecycleView和Viewpage2的滑动冲突ViewPager2中Fragment的懒加载懒加载预加载FragmentStateAdapteronCreateViewHolderonBindViewHolderonViewAttachedToWindowFragmentStateAdapter使用获取Fragment实例异常处理ViewPager2滑动监听Tab
Java线程池实现原理和源码分析 Java线程池实现原理和源码分析文章目录Java线程池实现原理和源码分析前言外观线程池继承关系构造函数成员变量创建线程池任务阻塞队列SynchronousQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue拒绝策略AbortPolicy 默认的拒绝策略CallerRunsPolicyDiscardPolicyDiscardOldestPolicy内核线程池的生命周期任务调度机制提交任务添加工作线程和执行任务添加工作线程执行任务工作
修改AAR和Jar中class文件 前言最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个Android项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题需求:Web页面中H5和native交互,保存base64图片。问题:使用现有的已经封装好的Hybrid协议,在最后集成测试发现部分手机无法保存成功。调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。怀疑原有的协议格式问题,当.
Android8.0隐式广播和自定义签名权限 前言记录一下今天同事给我分享的比较有意思的Bug,在已有的已经在AndroidManifest.xml中注册的广播在部分手机上无法通过Action隐式启动。上网搜搜资料自己写了个Demo,Mark一下!!Android官网:Oreo后台执行限制我们这里主要看对于广播的影响,摘抄一段官网上的介绍:广播限制如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验.
Qigsaw源码之Gradle插件解析 Android App Bundle为Qigsaw的前置依赖知识点。Android App Bundle 是Android新推出的一种官方发布格式.aab,可让您以更高效的方式开发和发布应用。借助 Android App Bundle,您可以更轻松地以更小的应用提供优质的使用体验,从而提升安装成功率并减少卸载量。转换过程轻松便捷。您无需重构代码即可开始获享较小应用的优势。改用这种格式后,您可以体验模块化应用开发和可自定义功能交付,并从中受益(PS:必须依赖于GooglePlay)。qigsaw基于AA.
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
DiffUtil和它的差量算法 DiffUtil和它的差量算法前言学习Myers'Diff 算法是从 DiffUtils 源代码开始的,但DiffUtil和它的差量算法这篇却是文章是在写完 Myers‘Diff之贪婪算法 和 Myers‘Diff之线性空间细化 这两篇算法文章之后着手的。比较先需要学会算法才能理解代码实现并更好的进行使用。文章目录DiffUtil和它的差量算法前言DiffUtil介绍DiffUtil.DiffResultDiffUtil.DiffResultDiffUtil使用DiffUtil中Myers算法代码
Myers‘Diff之线性空间细化 Myers’diff前言在学习完上一篇文章Myers’Diff之贪婪算法 之后,我对Android源码中的DiffUtil类进行了阅读发现其算法的实现和文章中的方式并不尽相同,而是在其基础之上再次进行的优化。所以本篇文章是以上一篇Myers’Diff之贪婪算法 文章内容基础之上对它的变体进行再次研究的过程。上一篇文章Myers’Diff之贪婪算法 讲述diff怎么从一个抽象的问题转化为数学问题,并对一些名词做了专有的定义(为解决问题的过程提供辅助),Myers'Diff之贪婪算法讲述了利用辅助的k线进
Myers‘Diff之贪婪算法 Myers’ Diff前言写这篇文章已经拖了很久了,因为一直在看它后续的 Myers’ Diff 的变体 。最初不知道是什么时候发现 DiffUtil 对比列表 item 数据进行局部刷新,git 文件对比都用到了这个算法。上个月刚好再一次看到了就想深入了解一下。但发现发现国内的博客和帖子,对这个算法的讲述内容比较少,每篇文章都讲述了作者自己认为重要的内容,所以有一个点搞不懂的话没法整体性的进行理解。刚开始我自己就有一个点没想清楚想了好几天,我觉得程序员不能怕算法,书读百遍其义自现,阅读算法代码也是如此
App Startup 源码分析 文章目录集成接入实现初始化组件设置AndroidManifest条目手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化程序运行Lint检查源码分析lint.jarAndroidmanifest.xmlInitializationProviderAppInitializerApp Startup总结上篇文章 非侵入试获取Context进行SDK初始化 讲述了通过ContentProvider 进行 SDK 的初始化,文章末尾引出了 App Startup 。如果一个 app .
非侵入式获取Context进行SDK初始化 文章目录非侵入试获取Context进行SDK初始化picasso 初始化InstantRunLeakcanaryApp Startup非侵入试获取Context进行SDK初始化当我们在使用第三方SDK,或者自己进行SDK封装时,如果需要需要用到 Context 进行初始化时,一般做法就是将初始化方法暴露给调用方,让调用方在初始化SDK时,传入上下文环境。publi class App extends Application { @Override public void onCrea.
Android内存泄漏检测工具使用手册 性能优化除过我们平时自己设计和开发之外就得考虑使用工具进行检测。Android关于能够定位和剖析问题的内存工具有很多,但不是每个工具所有场景都能覆盖到。这篇文章主要介绍LeaKCanary、shark、Android Profile、MAT、Jhat、dumpsys meminfo、GC Log等。
图片不需要完全加载就能获取宽高 转载地址:http://blog.jdk5.com/zh/java-get-image-size-without-loading-the-whole-data/前几天写的 Bitmap图片压缩,大图加载防止OOM 文章中讲到了图片加载到内存之前先获取图片的宽高,然后判断是否加载后会占用内存过大。这种加载前获取图片宽高的是使用 Android自带的Bitmap 提供的功能,底层是 C++ 的实现。...