- 博客(171)
- 资源 (21)
- 收藏
- 关注
原创 解决Android Studio com.google.common.collect.ImmutableMap.hashCode 造成的StackOverflowError异常
解决Android Studio 编译出现StackOverFlow异常。
2022-05-28 11:54:29
525
原创 Retrofit+OkHttp 参数使用AES加密Demo
最近在做App代码安全方面的优化,特此记录一下。我们现在App大多数都是基于Retrofit+OkHttp的网络请求框架,现在的需求是需要将请求的参数进行加密传输,下面图片中我们进行一个对比,一个是明文传输,一个是密文传输:明文传输密文传输由于考虑到加密和解密的效率,我们现在选用的是AES对称加密。至于对称和非对称加密,可以参考以往的[文章]。(https://blog.csdn.net/u013762572/article/details/88733982)1. 客户端修
2022-05-22 12:47:03
527
1
原创 Hilt加强篇:理解Component和Scoped
1. 历史上次写过一遍关于Hilt的使用偏,里面详细介绍了Hilt历史和应用,链接对应如下:Android Hilt 使用如果没有对Hilt的使用有些了解,那就先入门看看,谢谢。2. ComponentComponent和Scope的英文名分别是组件和范围的意思,第一次见到这个两个注解的时候,还是有些不清楚的。下面慢慢说,Hilt-Android中存在8个Component和对应的8个Scope,先来聊一聊这个8个Component,分别为:序列名称创建时间销毁时间1S
2022-05-15 16:41:26
343
原创 升级新版本Android Studio之后找不到了插件classpath的位置
最近手残升级了Android Studio到新版Android Studio Chipmunk,发现gradle版本升级到了7.4.2, gradle 插件版本升级到了7.2.0-alpha05. 本来没什么问题,但是今天要加入Hilt这个第三方库,问题来了。大家知道Hilt这种巨牛叉的第三方库一般都是ASM + APT + 注解 + 反射 + 动态代理 这些底层的基础知识构建的。因此在使用到APT时,就需要使用到相关的gradle插件了。平时我们使用Hilt也就两步:加入hilt-android-
2022-05-14 22:33:01
3734
4
原创 Kotlin + Dagger2 出现 Dagger does not support injection into private fields 解决方案
Dagger2在Kotlin环境下出现Dagger does not support injection into private fields.
2022-05-08 22:42:52
948
原创 Activity#onActivityResult被弃用了,该怎么办?
1. onActivityResult弃用现象和解决方法前几天更新了AndroidX之后,项目中的onActivityResult就被声明为@Deprecated,大概如下图:由于本人呢,是一个代码洁癖者,看着这个肯定不会很舒服,苦于没有时间,就没有仔细去好好分析,就放在一边呢。今天有点时间,我们就来扒一扒,看看onActivityResult是如何被弃用了,现在又该如何解决呢?其实,我们点击Activity#onActivityResult的源码的时候,就可以看到它自己说明的解决方案:在An
2022-05-07 17:34:49
1432
原创 彻底解决Android Studio Minimum supported Gradle version is X.Y.Z. Current version is x.y.z.问题
由于Android Studio 是基于Gradle 编译的,面对众多的Gradle版本,类似于Android碎片化的概念,在编译项目上或多或少会存在兼容性问题。如题,Minimum supported Gradle version is 6.1.1. Current version is 5.6.4...,Minimum supported Gradle version is 6.7.1. Current version is 5.6. If using the gradle
2022-05-02 16:58:22
4005
1
原创 解决新版Android Studio新签名出现Key was created with errors快速解决方案
解决Android Studio 新签名出现的 Key was created with errors文件
2022-04-22 08:47:26
2024
翻译 Glide VS Coil
原文地址:https://medium.com/healthify-tech/coil-vs-glide-3f488f4de72a在这篇文章中,我们将会对Glide 和Coil做一个对比,来理解一下到目前为止,哪一个图片加载框架是更好的。Glide是一个Android平台的快速高效开源的图片加载框架,现在有很多人在使用它。然而Coil作为一个新的图片加载库在近些日子也越来越受欢迎。两个库的基本功能是相同的;它们都是使用BitmapFactory来解析数据,然后使用相同的Android SDK来从文件中
2022-01-26 18:05:05
599
原创 DataStore的基础用法
0. 简介Google在推出JetPack组件以来,一直推荐我们使用DataStore组件替代到我们第一天学android就知道的SharedPreferences组件,原因很简单,因为当年的SharedPreferences存在居多的问题,DataStore就是为了解决这些问题而来的。1. SP的缺点至于 SP到底存在哪些问题,我们可以直接查看 DataStore源码上的注释:Synchronous API encourages StrictMode violationsapply() an
2021-12-18 12:33:55
5236
2
原创 Android 10以上,保存视频通知到相册
代码如下:public static void videoSaveToNotifyGalleryToRefreshWhenVersionGreaterQ(Context context, File destFile) { ContentValues values = new ContentValues(); Uri uriSavedVideo; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
2021-11-27 22:01:56
2777
4
翻译 Android MVI 架构简介
翻译来自 Medium :https://medium.com/@soundhar.p03/android-mvi-architecture-230cd30e40b4大家有时间和精力可以阅读原文,翻译可能不怎么到位,到时候网批评指正。大家好,在本篇博客中,我们就会讨论有关Andorid的MVI设计模式。近些日子有关Andorid架构模式都在逐步进化中。对于我们开发的App中,我们开始面临新的挑战和困难。新的设计模式将会被发现来解决类似的问题。作为Andorid开发人员,我们已经拥有了MVC、MVP
2021-11-27 20:45:35
1216
原创 不看lifecycle源码,认真聊聊它的实现原理
目录1. lifecycle 简介2. lifecycle 用法3. lifecycle 原理1. lifecycle 简介 在我们的日常开发中,使用Activity和Fragment 产生的内存泄漏问题比比皆是,主要是原因就是这二者存在生命周期,在走完这一辈子的过程中,有些引用一直抓着着Activity和Fragment不放,等到它们Destroy的时候,依旧引用着它们的尸体,导致不能被回收,因为尸体将一直存在于内存中,导致可用内存减少,然后内存泄漏就开始了。当然了,扯远了,Go
2021-11-16 20:48:41
498
原创 Gson源码解析
文章目录基础了解几个重要的概念1. 属性赋值/序列化2. Java类型适配器3. JsonReader源码分析1. Gson初始化2. 源码分析3. 整体回顾ObjectToJson后记基础了解最近在解决一个Json解析时,把Gson原理过了一遍。Gson是Google开发的Json解析库,当然这种轮子市面上比较多,也不一一列举了。今天主要来聊聊Gson源码,是如何解析一个Json对象,然后按照葫芦画瓢,将一个Java对象如何序列化成 Json对象。几个重要的概念在分析Gson源码之前,首先需要在脑
2021-08-27 17:29:41
363
原创 Android Hilt 使用
文章目录a. 关于 Hiltb. 添加依赖项c. Hilt 应用1. HiltAndroidApp 注解2. 注入Android类3. 如果注入接口4. 如果注入的对象不能new5. @ApplicationContext 和 @ActivityContext6. Android类生成组件i. 全局单例模式ii. Activity内多Fragment共用组件d. 资料a. 关于 Hilt首先 Hilt 是 Android 的依赖注入库。什么是依赖注入?简单点理解就是Java中我们使用对象时,需要去 ne
2021-08-14 20:59:03
2358
原创 并发编程之ArrayBlockingQueue
最近在学习并发编程,在看队列,今天先上一篇 ArrayBlockingArray。文章目录队列的概念:阻塞队列:ArrayBlockingQueueArrayBlockingQueue 构造方法队列操作方法1. `add`方法2. `peek`方法3. `put` / `take` 方法4. `offer` / `poll` 方法5. `offer(E e, long timeout, TimeUnit unit)` / `poll (long timeout, TimeUnit unit) `队列方法
2021-06-17 17:01:23
117
1
原创 :app:kaptSgb_debugDebugKotlin 报错
具体报错内容为:Execution failed for task ‘:app:kaptSgb_debugDebugKotlin’.A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecutionjava.lang.reflect.InvocationTargetException (no error message)主要是使用了apply plugin: ‘kotlin-kapt’
2021-01-07 13:31:24
406
原创 聊聊RecyclerView的像素级刷新
需求来源当前我们所做的内容是施工管理的工具APP,有非常重的聊天系统,而且聊天系统中由于项目数比较大,大到什么概念呢?一个中层管理手中大概存在500个项目,每个项目分为施工群和业主群,然后加上公司OA群,设计群,管理群,大概在1000个群左右,当然你可能会说,1000个群也不算太大吧,我微信现在的群都有上千个,的确是这么个理,但是我们这1000个群每天都在发消息,业主要求推动施工的进程,假设每个群每天发10个消息,我们大概每天就有1w条消息,这是个很惊人的问题。所以问题就来,在上千个列表中,对Recycl
2020-11-29 13:58:35
184
原创 Hilt 提供依赖实例时,报了Types may only contain one @Inject constructor
项目场景:在使用Hilt提供依赖实例时,代码这么写的:class HelloTwo @Inject @JvmOverloads constructor(private val data: String = "data") 然后编译报错:Types may only contain one @Inject constructor问题描述:反编译了一下,查看最终java的代码:发现@Inject注释在两个构造函数上了,这样Hilt在依赖构建时,就不知道使用哪个好了。但是
2020-11-25 14:49:28
464
原创 聊聊Kotlin的委派(一)
基本目录1. 类的委派2. 实现源码3. 委派属性4. 实现源码5. 总结有种完成工作的方式就是把工作委派给其他人。当然我并非讨论的是,你将你的工作委派给你的朋友,而是将你的工作从一个对象委派到另外一个对象,质量有守恒定律,同样工作必须有人去完成。你猜怎么着,委派在软件行业并不是一个新兴的模式。委派是23种设计模式中的一种,具体对象通过委派给一个助理对象来处理相关的请求。委派对象代表原始对象来相应请求的处理,并使得处理的结果被原始对象所使用。Kotlin通过提供对类和属性的委派使得使用kotlin来创
2020-11-12 20:54:22
188
翻译 当你还在用 Gson 时,Square那帮人已经开发出了 Moshi 了!!
原文地址:好久不见,曾经我们相处得很好,但是是时候说再见了。在你的朋友圈中也许会听到这样的语句(也可能没有),但这并非是本篇文章的主题,我们要谈论的是一个新的关于 Android 和 kotlin 序列化框架!我们需要将 Gson 迁移到 Moshi上面了。当我们谈论为啥Moshi是更优秀的框架,或者怎么迁移到 Moshi之前,我们先来了解一下今天的 Gson 的发展。Gson,what?当我们查看 Gson 的github仓库时,它是这么描述的:一个Java 的序列化/反序列化框架,用来
2020-11-02 23:26:53
1073
原创 解决 Google Play 支付问题:In-app billing API version 3 is not supported on this device
项目场景:因为想出海看看外面的世界,第一次上线Google Play产品,需要添加Google Play赚美刀,使用的是Google Play Billing框架V3版本,所使用的的机器是 Google Pixel 3XL, 系统是当前最新的 Android R(当前时间2020/09/08), 依照Google中文开发文档 https://mp.weixin.qq.com/s/QQg4ttdnn6XLrOBZIDsEQA ,发现在开发的过程中,存在In-app billing API version 3
2020-09-08 23:12:43
10742
9
原创 Jetpack系列之 Paging 详解
在此之前,我一直对Jetpack的Paging感觉到很迷茫,单单一个分页为啥 Android 官方会出一个组件? 在我们眼中,分页不就是添加两个参数pageSize和pageIndex 么?这么简单逻辑Android官方能耍得起什么样的波浪么?带着这个问题,阅读了一些文档,加上自己的理解,然后有了这篇文章。基本原理Paging目前来说,是需要和RecyclerView配合使用的,毕竟Android 目前展示列表数据,差不多就是RecyclerView了。首先简单介绍一下Pagin
2020-08-02 15:42:17
2509
原创 理解Room数据库的迁移(Migration)
文章目录数据库迁移的引擎SQLite API 都干了些啥Room 都干了些啥迁移 SQLite API 代码 到 Room情景一:保持数据库版本不变 --- app崩溃第一步:尝试打开数据库情景二:版本更新了,但是没有提供迁移策略 --- app崩溃第一步:更新数据库版本从1(已经安装到设备上了)到2情景三:版本更新了,回退到破坏性迁移 --- 数据库数据被清空了第一步:尝试从版本1更新到版本2第二步:尝试重新打开数据库情景四:版本更新了,也提供了迁移策略 --- 数据健在第一步:尝试更新版本1到版本2第二
2020-05-24 16:43:14
9463
3
原创 koltin协程图片加载库Coil介绍
文章目录简单介绍使用1.简单使用2.基本变换3. Gif加载4. SVG加载5. 从Glide\Picasso迁移到Coil6. 个人的使用看法简单介绍github地址为:https://github.com/coil-kt/coil/ 这应该是一个很新的一个图片加载库,完全使用kotlin编写,使用了kotlin的协程,图片网络请求方式默认为Okhttp,相比较于我们...
2020-03-14 20:25:26
8923
3
原创 2020年最值得期待的30个android库(截止2020年3月8日)
原文地址1.Coilgithub地址:https://github.com/coil-kt/coilkotlin编写使用协程编写的Android图片加载库。相比于Glide,Picasso,Fresco 它更快速、轻量、易上手、现代的Android加载库支持GiF和SVG,同时支持四种默认的图像变换: 模糊效果、圆形、灰阶、圆角等等基础代码为:imageView.load(“htt...
2020-03-08 18:31:09
5509
1
原创 解决七牛云获取gif缩列图背景为黑色问题
最近项目中使用七牛云存储gif图片,如下图:使用图片预览时,使用七牛图片格式转换,将gif转成jpg格式:发现背景为黑色,如果要使得背景变为白色:大致思路如下:将gif转成jpg格式:url -> http://www.demo.gifjpg_url -> http://www.demo.gif?imageView2/2/w/200/format/jpg将装...
2019-12-07 20:04:49
488
原创 Android基于云信实现微信斗图
总体概览最近项目出现了一个新的需求,需要实现类似微信的表情的斗图功能。由于我们是一家基于互联网+装修的公司,为了给业主创造一个好的印象和营造开工、完工的美好气象,这个需求我们还是默默的接了下来,虽然我们知道坑那是多得一比。下面我们就简单说明一下我们的方案。已经实现的功能大概是这样的:大致实现的功能如下:服务器动态配置斗图的类型和风格。因为每家公司的主题和风格样式都是不一样的,这里需要后...
2019-11-30 23:09:33
327
1
原创 C预处理器摘要
最近在学习C,记录一下C预处理器。C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C预处理器只不过是一个文本替换工具而已,他们会指示编译器在实际编译过程中所需的预处理。我们将C预处理器(C Preprocessor)简写为CPP。#define#define 定义宏定义#define PI 3.1415926#include#include 包含一个源...
2019-11-24 17:28:49
106
原创 解决Android云信突然不能发送图片,视频和语音异常问题 -- https惹的祸
去年写了一篇使用云信集成过程踩到的坑: 地址 集成上线之后,由于需要忙其他的项目,这个就扔给其他人了,直到最近有新的项目需要重新接入聊天组件,然后我们就aar集成了,过程什么的一切都很顺利,直到测试给了报出了异常:突然发现不能发送图片,视频,还有语音,最后发现只要是文件类型的Message都不能发送!第一反应就是是不是集成本身存在问题,是不是云信的sdk出了问题,是不是我的主module中有什...
2019-09-07 23:34:01
1106
3
原创 kotlin之协程(coroutines)学习(一)
两个月没写博客了,除了辞职找工作,就是熟悉新的环境,新的项目一直加班,累并快乐着,还是要好好加油啊。本文翻译来自kotlin官方文档https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.htmlkotlin,最为一门编程语言,在它的标准类库中只提供了最低级别AP来支持其他类库使用协程。不像其它有类似协程能力编程语...
2019-08-29 14:28:54
547
原创 Android Jetpack系列 之 WorkManager
大概 这应该是一篇比较悲伤的文章,因为WorkManager并没有达到它所描述的功能,所以作为天朝的程序员,此处静默哀悼一秒钟,具体文章下面详述。 虽然如此,我们还是要了解一下这个WorkManager是干什么的,具体怎么干,又有什么优点或者缺点。关于WorkManager的官方文档可见:https://developer.android.com/topic/librar...
2019-05-22 15:04:21
1366
翻译 Android新控件MotionLayout介绍(四)
系列文章为:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)Android新控件MotionLayout介绍(三)本文标题:在MotionLayout中定义运动路径介绍在ConstraintLayout 2.0库中我们介绍了MotionLayout,这是一种主要是注重动画的布局。先前的文章中对它有了一些浏览,我非常鼓励你先把...
2019-05-20 11:16:36
3943
3
翻译 Android新控件MotionLayout介绍(三)
文章目录实例MotionLayout与CoordinatorLayoutMotionLayout 与DrawerLayoutMotionLayout 与ViewPagerMotionLayout与Lottie结论上两章内容:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)这一节主要讲述将MotionLayout与已经存在的Layo...
2019-05-17 10:40:09
1729
翻译 Android新控件MotionLayout介绍(二)
文章目录自定义属性ImageFilterView (1/2)ImageFilterView (2/2)关键帧Keyframe (1/2), 位置Keyframe (1/2), 属性结论有关 Android新控件MotionLayout介绍(一)。今天主要是来看第二章。主要是通过一系列包括自定义属性、图片操作和关键帧来描绘一下MotionLayout的特征。原文地址为:https://me...
2019-05-16 10:59:43
2546
1
翻译 Android新控件MotionLayout介绍(一)
文章目录初衷为什么需要MotionLayout?MotionLayout的限制什么时候使用MotionLayout将MotionLayout添加到项目中使用MotionLayoutConstraintSetsMotionScene示例一:引用已经存在的布局OnSwipe handler示例2: 独立的MotionScene插入属性ConstraintSetMotionLayout的属性结束?初衷...
2019-05-15 16:06:07
12553
6
原创 Android Room Database 学习
Room数据库学习初衷概览配置定义data类定义UserDao定义抽象数据库项目build 自动生成文件使用定义数据实体定义对象之间关系使用DAOS数据库更新初衷由于接手的项目中,看到别人使用的是Android Jetpack下的Android Room数据库,由于以前也只是接触过GreenDao和自己写的sqlite数据库,所以就学习了一下,做一个笔记记录一下。这是我以前学习的greenda...
2019-05-09 15:47:03
1676
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人