Android
文章平均质量分 86
喻志强(Xeon)
这个作者很懒,什么都没留下…
展开
-
遗失的源代码之回归之路的探索与实践
代码丢了?别怕,我有拯救计划!揭秘代码失踪背后的原因,一一解锁组件发布管理的规矩。动用小脑瓜,运用高级技能,分析、反编译、抽象语法树对比,妙手回春地还原代码。这篇博客通俗易懂,让你在轻松幽默中领略代码失而复得的惊艳过程。放下烦恼,跟着我一起搞定源码丢失的难题,笑对代码还原的全新冒险!原创 2024-02-03 15:30:00 · 1394 阅读 · 0 评论 -
Cordova系列之化繁为简:打造全场景适用的Cordova组件
一个基于Cordova封装的全场景组件,使用简单,在保留Cordova原有功能的基础上突破了必须继承CordovaActivity的限制。支持在Fragment中使用,还能能作为自定义view使用,提供关键节点的事件回调,可快速基于Cordova实现业务需求。原创 2023-11-10 22:40:02 · 9130 阅读 · 2 评论 -
Android 集成Tinker踩坑记录
高版本AGP集成Tinker踩坑记录,加固包补丁如何生成,TInker补丁的管理规范。原创 2023-09-09 17:00:00 · 9982 阅读 · 4 评论 -
大佬,一款小而美的Application组件,了解一下
Android开发过程中,Application类的角色不容忽视。它不仅是程序启动的入口,同时也代表着整个应用程序的生命周期。初始化第三方库的需求容易理解,因为一些第三方库需要全局的Application对象来执行某些操作。这就需要我们遵循第三方库提供的初始化代码,虽然这个过程有些麻烦。假如你自己有一些开源组件,或者公司内部的组件也需要Application对象或Context,那么你可以约定一个规则,让所有人使用同一个Application实例。原创 2023-07-11 22:30:00 · 3416 阅读 · 0 评论 -
Android BuildConfig不生成的解决办法
Android 不生成BuildConfig的问题解决办法原创 2023-04-29 12:23:56 · 26233 阅读 · 12 评论 -
适配splashscreen步骤以及启动卡住不动(白屏)的坑
适配splashscreen,在splashscreen显示弹窗,解释setOnExitAnimationListener不执行的问题原创 2023-01-24 17:06:13 · 13175 阅读 · 6 评论 -
Android 查看项目的依赖信息以及某个版本的组件是哪个依赖库里的正确姿势
Android查看项目依赖信息以及哪个版本的库是被谁依赖的正确姿势。例如项目中明明指定的kt版本是1.6.21,为何最终依赖的版本变成了1.7.10?怎么能知道是哪个库依赖了1.7.10版本的kt呢?项目中依赖的某个库,它里面的依赖了哪些东西呢,版本又是什么样的?看完这篇博客可以帮助你快速找出依赖相关的问题。原创 2022-11-14 21:30:00 · 5276 阅读 · 4 评论 -
moshi 极简封装
之前写了一篇文章是介绍moshi的基本使用和实战,在那篇文章中对moshi进行了一个封装,但是封装后总觉得不够简洁,实际使用起来虽然功能没问题,但是用着不舒服,本篇文章来对moshi的封装做一个改进,借鉴了jackson获取泛型信息的方式,还是比较巧妙的。.........原创 2022-06-11 16:03:36 · 3050 阅读 · 2 评论 -
对kotlin友好的现代 JSON 库 moshi 基本使用和实战
前言上一篇博客我们聊了下gson在处理kotlin data class时的一些坑,感兴趣的可以了解一下:gson反序列化成data class时的坑总结一下有一下两点属性声明时值不能为null,结果反序列化后值为null,跟预期不符默认值可能不生效,可能被null覆盖在文章末尾也介绍了解决办法就是不要使用gson,因为gson主要还是针对java的库,没有对kotlin做单独的支持。我们可以使用moshi或jackson来解决上面所说的问题。jackson的是spring boot 默认原创 2022-04-10 19:09:54 · 13382 阅读 · 3 评论 -
gson反序列化成data class时的坑
前言在Android开发中,Gson是很常用的用来处理json的三方库,它是由Google维护的,一直以来都比较稳定,至少在使用Java开发时是长这样的。但是,Gson对Kotlin的data class的支持就不是很完善了,会有一些坑,下面我们来看一看gson和data class的正常情况在kotlin中我们使用data class来充当数据类,举个例子:data class User( val name: String, val age: Int,)使用gson将jso原创 2022-04-04 17:56:38 · 4707 阅读 · 0 评论 -
手把手教你在Android中使用bsdiff实现文件增量更新 (超详细)
从Android端到服务端完整的增量更新技术方案原创 2021-11-18 20:59:15 · 6364 阅读 · 14 评论 -
kotlin协程async await的异常踩坑以及异常处理的正确姿势
使用Kotlin来做一些异步操作相信大家都非常熟悉了,特别是结合Jetpack的一些组件,使得我们在Android开发中写异步任务非常的方便。但是,关于在使用协程的时候,个人觉得异常处理这一块是相对来讲是需要花时间去了解的地方,因为在使用过程中还是会遇到一些小坑的,这里记录下之前遇到的坑。踩一个使用async await时异常处理的坑kotlin 协程的异常处理官方文档我们先来看官方的示例:可以看到,示例代码中在对 async 开启的协程进行异常捕获是在调用 await 时。看打印结果也确实是捕原创 2021-10-30 15:01:40 · 5945 阅读 · 4 评论 -
Kotlin 快速实现序列化(Parcelable)
kotlin 中实现 Parcelable 非常简单首先,在所属模块的 build.gradle 文件中应用 kotlin-parcelize 插件/*序列化插件*/apply plugin: 'kotlin-parcelize'然后在定义的实体类添加注解即可。代码如下:添加 @Parcelize 注解,并实现 Parcelable 接口即可package com.yzq.common.data.movieimport android.os.Parcelableimport kotli原创 2021-05-22 21:52:49 · 8576 阅读 · 9 评论 -
Plugin version (1.4.32) is not the same as library version (1.4.10) 警告的解决办法
kotlin提示Plugin version (1.4.32) is not the same as library version (1.4.10) 警告的官方解决办法原创 2021-04-06 20:12:06 · 5103 阅读 · 1 评论 -
Gson使用的一些小技巧(忽略某些字段、统一处理某种类型的数据等)
在Android/Java开发过程中,我们肯定会涉及到处理Josn,我个人比较常用的json处理第三方库是Gson,下面是开发过程中遇到的一些需求的解决方式,仅供参考。Gson实体类转Json时(Gson反序列化实体类数据时),某些字段不想序列化例如:我有一个实体类如下:...原创 2021-03-06 17:37:51 · 12292 阅读 · 0 评论 -
Android 获取android密钥哈希码(keytool -exportcert -alias openssl sha1 -binary | openssl base64)
由于业务需求需要集成国外的SDK,而国外的sdk需要Android端提供一个签名哈希值‘’起初我以为是跟集成国内的高德地址一样提供个SHA1的值即可,之前我也写过一篇博客:Android获取SHA1值的详细步骤。一顿操作后发现无法通过。详细一看原来国外的sdk要求是经过openssl加密并且通过base64编码后的值。并给出了执行命令行keytool -exportcert -alias a...原创 2020-04-19 14:42:17 · 2195 阅读 · 2 评论 -
Android Studio常用插件
下面是自己平时开发时会经常是用到的插件,整理下方便换电脑时安装,直接复制名称去插件市场查找安装即可Alibaba Java Coding Guidelines可以帮助你规范你的Java代码地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelinesAndroid Drawable Preview方...原创 2020-03-25 11:15:52 · 2270 阅读 · 0 评论 -
fragment重叠的完美解决方案
Fragment的应用场景有很多,比如我们底部一个导航栏,点击导航项显示不同的fragment,或者和ViewPager配合使用等.比如这样:package com.example.yzq.testfragment;import android.os.Bundle;import android.support.annotation.NonNull;import android....原创 2017-07-15 16:09:35 · 37446 阅读 · 35 评论 -
用Kotlin撸一个自定义字母索引控件,性能优化
之前App使用Kotlin重构之后,最大的感触就是kotlin简洁的语法以及扩展函数等特性极大的提升了我们编写代码的速度。如果说Java是K、T开头的普通火车的话,那Kotlin就是D、G开头的动车高铁了!嗯,相信我,去用一用吧,绝对很爽。好了,开始正文。今天我们来用kotlin写一个自定义view,一个很常用的字母索引控件。我们在联系人之类的页面中经常会见到这中控件,网上也有很多轮子...原创 2018-09-20 18:11:02 · 1396 阅读 · 0 评论 -
android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)
使用Walle和AndResGuard实现多渠道打包之前先进行资源混淆,这样一来我们打出来的包都是已经进行过资源混淆的了。如果你还有其他的需求,也可以按照这个方法实现。原创 2018-10-24 15:02:10 · 2245 阅读 · 2 评论 -
Android版本对应的API等级以及发布时间表
最新的Android版本对应的API版本号,数据来源于官方网站。原创 2018-10-30 16:19:41 · 4136 阅读 · 1 评论 -
Android Netty使用(Kotlin+RxKotlin版)
之前写过一篇关于 Android Socket连接的博客,当时是采用service的方式,自己在Service中创建Socket并且自己维护线程,线程切换起来很是麻烦,使得service中的代码看起来很臃肿。后来炒菜机需要进行更新,正好当时已经开始用kotlin开发了,并且了解了一下比较出名的Netty,就把代码重构了。关于Netty的有点网上有很多介绍,这里就不赘述了。新版本的socket...原创 2018-11-23 15:03:09 · 5157 阅读 · 0 评论 -
Gson直接将json转list示例 (TypeToken)以及通过内联函数结合reified简化代码
为了演示,我们新建一个简单的数据类Person数据类Persondata class Person(var name: String = "", var age: Int = 0)json数据反序列化为普通对象使用Gson将Json数据直接转成普通实体类很简单,如下 Gson().fromJson<Person>(personsJson,Person::class.java...原创 2019-01-03 15:15:53 · 9853 阅读 · 1 评论 -
This view is not constrained vertically 的解决办法
This view is not constrained vertically: at runtime it will jump to the top unless you add a vertical constraint less原创 2019-01-18 14:00:07 · 69775 阅读 · 6 评论 -
更新至gradle3.3.0后,variant.getJavaCompile()和variantOutput.getPackageApplication()警告的原因
WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.It will be removed at the end of 2019.WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.原创 2019-01-21 16:11:01 · 34205 阅读 · 6 评论 -
Kotlin基于RxJava的扩展方法(超级好用)
Kotlin扩展方法Kotlin的好处有很多,其中有一个超级好用的就是扩展方法。目前来讲,大多数的项目架构都是采用MVP+Rxjava+Dagger2+Retrofit2+AutoDispose+ARouter等等来进行封装的。今天我们主要来看看对于RxJava的扩展方法,超级好用。一个是统一的数据解析处理,另一个是统一的线程切换和自动解绑统一的线程切换和自动解绑的扩展方法之前我写过一...原创 2019-03-06 14:09:47 · 8924 阅读 · 0 评论 -
高德逆地理编码接口返回数据格式不统一以及百度逆地理编码接口返回数据解析失败的踩坑记录
最近有个需求是定位后根据定位的经纬度获取当前地址的详细信息,例如获取街道名称,街道号,乡镇街道编码,区域编码等信息。于是乎找到了高德的逆地理编码接口,看了看正好符合我的需求。然而使用起来并不顺利!由于我使用的Retrofit,正常情况下都是直接将json自动解析成实体类,但是由于接口返回的数据格式不规范,导致我遇见的一些问题,下面记录一下解决办法,希望能帮到你。高德逆地理编码接口返回数据格式...原创 2019-04-15 16:07:27 · 7598 阅读 · 5 评论 -
app:layout_behavior="@string/appbar_scrolling_view_behavior" 报红的解决办法
迁移到AndroidX后,发现 @string/appbar_scrolling_view_behavior这个地方报红了,并给出如下提示:Unresolved class ‘@string/appbar_scrolling_view_behavior’ less… (Ctrl+F1)Inspection info: Validates resource references inside A...原创 2019-05-15 11:09:16 · 14184 阅读 · 2 评论 -
Android结合Retrofit实现统一加解密处理(Get、Post、Delete、Put)
Android中对接口进行统一加密在之前的博客中我们介绍了 加密方案的选择 和 Android中加解密需要注意的地方本篇博客我们主要来看一下Android中加密的注意事项。在开发过程中,接口是很多的,我们不可能分别对每个接口的请求数据都进行加密,这样写起来以及后期维护是非常麻烦的,所以,肯定要是统一处理的还有我们常用的Get、Post、Delete、Put请求他们的请求数据存放位置是不一...原创 2019-05-13 11:38:42 · 9070 阅读 · 12 评论 -
mvp过渡到mvvm(Android 架构组件)
Android Jetpack话不多说,先上个官方图MVP因为前两年MVP架构非常火,于是我也将项目重构成了MVP的架构了,还写过一篇博客 从天地初开到MVC再到MVP 来记录如何从mvc过渡到mvp,以及他们的优缺点,感兴趣的可以看看。目前mvp架构我也用了很长一段时间了,也专门结合kotlin、Retrofit、Rxjava、Dagger2等主流框架封装了一个mvp的基础架构,随着...原创 2019-08-08 14:34:10 · 9420 阅读 · 5 评论 -
Android Studio检查依赖库是否有新版本,非常好用
AS自带的Lint检查原创 2019-08-08 15:58:05 · 5889 阅读 · 0 评论 -
Android使用协程(Coroutine)优雅的处理多个接口同时请求(网络并发请求)
Android中同时请求多个网络接口我们在开发过程中,很可能会遇到这样的需求,一个页面中需要同时请求好几个接口。我在之前写过一篇关于 高德逆地理编码接口返回数据格式不统一以及百度逆地理编码接口返回数据解析失败的踩坑记录 这篇文章,我当时的需求是要结合高德和百度两个接口,合并成一个我想要的数据。在文章中,我们使用了Rxjava的zip操作符来处理的两个接口同时请求的逻辑。大概代码如下: ...原创 2019-09-19 15:02:47 · 33219 阅读 · 2 评论 -
Retrofit+kotlin Coroutines(协程)+mvvm(Jetpack架构组件)实现更简洁的网络请求
前言Retrofit发布的2.6.0版本内部支持了kotlin协程中的挂起(suspend)修饰符,这就意味着我们可以跟方便的用Retrofit结合kotlin协程来实现网络请求了。之前我们都是使用Rxjava2+Retrofit实现网络请求的功能,然后加入了AutoDispose来解决自动解绑的问题。https://yuzhiqiang.blog.csdn.net/article/det...原创 2019-09-20 12:21:27 · 21648 阅读 · 22 评论 -
Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
Android Room+协程+LiveData提示 错误: Not sure how to convert a Cursor to this method's return type的原因原创 2019-09-27 15:12:16 · 11364 阅读 · 5 评论 -
AutoDispose代替RxLifecycle优雅的解决RxJava内存泄漏问题
使用AutoDispose代替RxLifecycle优雅的解决RxJava产生的内存泄漏问题。原创 2018-07-16 16:49:03 · 13972 阅读 · 2 评论 -
Android多模块混淆、多module混淆、多library混淆的正确姿势
混淆的文章其实网上也很多,介绍的都很好,但是关于多个module的混淆规则就不是这么详细,有的也是错误的,经过了2天的多次实践以及查阅资料(多次打包和反编译看源码,很费时间啊),终于达到了我的目的。下面来总结一下。也希望能帮到需要的同学。原创 2018-06-13 11:47:20 · 34479 阅读 · 12 评论 -
Android Socket连接(模拟心跳包,断线重连,发送数据等)
android socket连接socket心跳包,断线重连,发送数据原创 2017-09-26 14:29:13 · 36365 阅读 · 179 评论 -
Android invalid drawable tag vector错误的解决办法
在Android中使用Vector来替代传统的图片有很多好处,比如自适应,体积小,不失真等。但是,在Android5.0以下版本使用时会有兼容性问题,在Androi 5.0以下的设备可能会报这样的错误: Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable ta...原创 2017-09-19 17:25:10 · 6126 阅读 · 4 评论 -
Greendao打印Didn't find class "net.sqlcipher.database.SQLiteOpenHelper”解决办法
最近在使用greenDao数据库的时候,发现每次调试都会打印很多 java.lang.ClassNotFoundException: Didn’t find class “net.sqlcipher.database.SQLiteOpenHelper 的log 但是并不影响正常使用,如果你保存的数据不涉及到安全的话,完全不用理会。 但是对我这种有强迫症的人来说,每次调试都看到打印一堆这种日志原创 2017-09-07 15:56:30 · 15005 阅读 · 10 评论 -
在Fragment中监听返回键
最近在做项目的时候,遇见这么一个需求,需要在Fragment中监听返回键,点击返回键的时候做一些处理。如图所示:当我需要处理fragment的返回事件时,我先处理fragment中的逻辑,不需要时,直接交给activity处理即可。其实实现的方式很简单,就是在activity中调fragment的返回事件即可。代码示例: 首先我们写项目的时候一般都会对Fragment和Activity进行封装,我原创 2017-08-30 15:22:45 · 9330 阅读 · 0 评论