自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (6)
  • 收藏
  • 关注

原创 App内切换语言最全方案

最近在做App内切换语言的功能,不光需要切换成指定的语言,还提供跟随系统选项,并且app内全局生效,踩了很多坑,于是做了今天的总结;参考:https://juliensalvi.medium.com/demystifying-locale-on-android-95450adf5aecandroid实现多语言填坑之路 - 简书假设需要实现app内切换语言需求, 当前我们app内已经内置了三种语言, 中文(zh),英文(en),阿拉伯(ar); 设置页面有切换语言选项, 选择有 中文,英文,阿拉伯文,跟随系统

2024-03-01 16:54:57 390

原创 如何设计一个Android端高性能日志监控系统

开发中客户端经常遇到一些线上问题, 无法复现, 但是又的的确确存在;当线上反馈的时候无从下手;主要是因为并不知道用户所处的环境,以及所做的操作顺序或者程序运行的顺序;在排查问题和复现问题上占用了很大的成本;如果debug时的log日志如果线上也能查看就好了;基于此, 我们设计了一个客户端日志系统,这为我们发现和解决问题提供了很大的保障;

2023-08-01 21:12:55 601

原创 Android 使用ImageSpan加载网络图片

思路就是先创建一个占位drawable对象返回,将它设置到TextView上,然后异步加载完后再将drawable重新绘制,刷新drawable和TextView;但是需求后来变成了加载网络图片, 一时间竟然有点懵, 不过还是有方案的;比如,使用Glide先加载到bitmap, 然后再执行上面的操作,将bitmap传入ImageSpan中;但是这就陷入了回调中, 主要除了插入这张图片,可能还会插入好几张, 那不是陷入了回调地狱了;最近遇到一个小需求, 将图标插入在TextView中,实现富文本的样式;

2023-04-11 21:57:38 1028 4

原创 Apk体积检测 - ApkChecker的使用

Apk体积优化一直是迭代中的不可忽略的问题, 这次要说的是apk体积的检测方法, 毕竟优化都是基于检测的;当然, 在Android Studio中有Apk Analyser工具可以使用, 但是需要导出, 或者在每个版本迭代中生成报告, 手动生成apk后拖入也是比较麻烦的;使用Matrix 提供的工具 ApkChecker可以独立检测apk并生成报告, 下面介绍下打包检测过程;

2022-11-01 18:20:06 895

原创 Android客户端网络DNS优化实践

关于DNS的相关介绍:https://www.51cto.com/article/674906.html传统的DNS解析:当开始 DNS 解析的时候,如果 LocalDNS 没有缓存,那就会向 LocalDNS 服务器请求(通常就是运营商),如果还是没有,就会一级一级的,从根域名查对应的顶级域名,再从顶级域名查权威域名服务器,最后通过权威域名服务器,获取具体域名对应的 IP 地址。传统DNS缺点: 不稳定(DNS服务器被劫持或故障), 访问慢。

2022-10-25 17:03:41 1936

原创 Android 客户端如何与服务器时间同步

这次分享一个简单但是很实用的功能. 开发app经常会涉及获取当前时间这项功能, 大部分情况不需要特别精准, 但是遇到一些统计类的需求, 就需要精准的时间, 比如 : 需要统计消息送达时间, 服务器记录发送时间, 客户端记录接收时间, 两个时间取差值, 就可以得到消息延迟时间;导致问题的原因是客户端造成的, 因为手机的时间难免有些用户会自己设置, 而且即使没有设置,个别手机上的时间也可能不一致;此时, 我们需要同步服务器的时间,让本地时间和服务器时间保持一致;

2022-10-13 16:11:25 2939

原创 Android 出海aab的资源混淆(兼容gradle7.0+)

AabResGuard适配Gradle7.0+

2022-09-16 19:08:57 2662

原创 Android 小部件播放视频

陌陌的一款贴贴实现了小组件播放视频, 经过一番吐血调研和研究, 我实现了类似的效果, 包括显示视频并缓存,显示图片, 小组件后台实时更新整理成了一套Demo. 由于此功能正在灰度, 这里不介绍实际的细节了, 感兴趣的小伙伴可以联系我;

2022-08-24 14:08:43 1313 7

原创 Android 小组件完整案例

android小组件

2022-04-15 20:02:35 4109

原创 Fragment在ViewPager下的懒加载方案

TabLayout+ViewPager+FragmentStateAdapter是很常见的页面布局, 很多页面可以集中在一起,不断切换便能集中很多业务; 但是面临一些问题:

2022-03-16 20:35:05 1905

原创 使用Vue封装图表组件

首先附上学习链接:关于vue 的学习:https://cn.vuejs.org/v2/guide/关于弹性布局:https://www.runoob.com/w3cnote/flex-grammar.html关于echarts使用:https://www.runoob.com/echarts/echarts-tutorial.htmlVue-Cli创建项目:https://cli.vuejs.org/zh/guide/creating-a-project.html建立在几

2021-07-28 15:58:13 1089

原创 Android处理软键盘弹出问题和键盘表情切换问题

软键盘可能引发的问题:键盘弹出,可能会挤压页面中的布局和view,导致页面显示不可控,尤其是当页面设置了各种主题的时候,更加不可控制; 处理软键盘和表情键盘切换,很容易造成切换生硬,有闪烁的问题;传统解决方案的缺陷:网上有很多解决方案,大多都是设置 android:windowSoftInputMode="adjustResize|stateHidden",并把输入框靠近底部,这样就能通过窗口自适应把相应的输入控件挤上去,而且可以通过布局变化监听到软键盘弹出和消失事件,方便处理回调;关.

2021-05-12 18:07:36 904 2

原创 简单统计android 项目中gradle的编译时间

最近想提高一下项目的编译速度,首先做的就是记录一下每次编译的耗时,来方便优化前后做对比; 思路很简单,监控每个task的耗时,连同版本信息一起记录在文件里,每次编译会产生一个编译耗时记录文件;为了方便隔离,我将这个功能单独抽离到一个buildTrace.gradle文件中,如下:import java.text.SimpleDateFormat/** * 监控构建耗时 * * 记录构建过程中的每个任务的耗时,并写入文件中 .build_history/buildTimeLog_yy.

2021-02-20 18:19:43 1829 1

原创 kotlin+buildSrc更方便管理依赖

原文:https://handstandsam.com/2018/02/11/kotlin-buildsrc-for-better-gradle-dependency-management/出自大神:Sam Edwards,Lead Android Engineer at Google Developer Expert for AndroidbuildSrc配置依赖1.创建buildSrc目录,创建文件如下:其中:build.gradle.kts . :依赖插件 De.

2020-10-27 10:14:46 1896 1

原创 ASM在kotlin中的使用

我们之前在Java中可以愉快的插桩,是因为我们熟悉了 gradle 的Transform 和Asm框架使用方法,掌握这两个,基本插桩就没问题了。但是还有一个重要的知识点,class文件结构和字节码指令。每次看到还是一头雾水,幸好As提供了一个Asm-bytecode-viewer插件,可以方便的帮我们生成asm的字节码代码:不过,很不幸,这个插件对kotlin不那么友好。当你想用kotlin代码进行插桩,发现他会报错。目前看应该是不支持kotlin转换。这。。。又要手动写字节码了..

2020-08-19 01:36:09 2320

原创 仿今日头条文字指示器

最近想做一个自己用的TabLayout样式,但又不知道做成什么样才算满意。看到今日头条的TabLayout的样式,感觉既内敛有不失炫酷,是一个好的选择,而且实现简单轻便,决定小撸一下。看下效果图吧:相似度还是可以的吧,我把它用在了我的小项目里。感兴趣的欢迎来提提建议https://github.com/hanlonglin/ColorTrackTabLayout...

2020-03-26 15:51:26 217

原创 Android 事件分发原理和实际场景解析

事件分发是android里的解决事件冲突的一种机制。一般我们的布局都是一层叠着一层,那么当我们手指点击或者滑动的时候,屏幕怎么知道哪一个控件该响应,哪一个控件该滑动呢?这依靠的就是事件分发机制。本次文章源码细节不扣,但是主要流程会列出来,感兴趣的可以去源码中找对应的逻辑,有疑问可以留言哦。目录1.流程解读:从Activity--->DecorView:从DecorView...

2020-03-10 12:44:25 488

原创 Android Jenkins + gradle 实现自动化打包流程并上传至蒲公英平台全过程

本文大纲:说明:本文以windows为例环境准备 jenkins安装(windows) 系统设置 创建任务 执行并查看输出1. 环境准备JDK1.8 Gradle5.4 Git AndroidSDK以上工具保证安装并添加环境变量。 包括JAVA_HOME,ANDROID_HOME,GIT_HOME,GRADLE_HOME2.jenkins安装...

2020-02-27 16:53:27 1448

原创 ASM + Transform 在android中的使用

参考:https://juejin.im/post/5cc3db486fb9a03202222154上一篇 ASM的使用上一篇说到了am的使用,但是局限于对于特定class文件使用,但是在android中不能每个class都那样做。借助gradle插件和transfrom,我们可以干预android的打包过程,从中拿到所有class,从而进行插桩。下面分三点进行介绍:本文大纲:...

2019-12-25 12:40:10 1755

原创 字节码插桩框架ASM(一)

本文大纲:ams是做什么的 asm使用1.ASM是做什么的?简单来说,asm是用来进行字节码插桩的。什么是字节码插桩? 字节码插桩就是修改节码文件(.class). 如同 gson框架是用来做操json数据结构的,那么asm框架就是用来操作.class文件结构的。那么这有什么用处呢?这个是一个很强大而且很高级的功能。我们可能知道反射hook技术,aspectJ技术,动态代理...

2019-12-24 10:12:41 2639

原创 了解view的绘制流程和基础概念

本文大纲:android中view的加载绘制流程 自定义view中的基础概念 父View和子View的联系1.android中view的加载绘制流程1.1 andriod视图结构:说明: 上图给出了android一个Activity中的视图结构,从外向内依次是 phoneWindow-->DecorView-->ActionBar+Conten...

2019-11-26 17:36:01 184

原创 Android中的drawable像素密度适配详解

本文大纲:1.为什么要分drawable-xxx目录? 2.Bitmap的介绍 3.不同drawable-xxx中的图片内存测试1.为什么要分drawable-xxx目录android项目资源中对于drawable文件夹可以分为以下类型的文件夹:drawable-ldpi(低密度) drawable-mdpi(中等密度) drawable-hdpi(高密...

2019-11-22 16:23:51 1935

原创 Artifatory仓库搭建和使用

本文大纲:1.什么是Artifatory仓库。 2.Artifactory仓库的下载安装配置。 3.在Artifatory仓库中创建仓库 4.项目中使用Artifatory仓库进行依赖。1.什么是Artifacory仓库?Artifactory是一个单独的工具,它可以与所有不同的技术“对话”,从而提高生产力,减少维护工作,并且促进不同部件之间的自动化集成。为了适应任何开...

2019-11-18 12:01:29 754

原创 Android Studio中偶尔出现的文件乱码和错乱的问题

最近发现一个很奇特的现象:时间长了,打开Android Studio 查看项目,有些文件竟然是乱码!!然而去磁盘中查看文件时,这些实际上并不是乱码,所以只是在AS中显示为乱码,接着你会发现项目报红。然而你接着去运行它,他还是可以运行的。。不过,你无法修改它了。出现这个问题的时候,劝你不要盲目从文件中复制过来! 原因有二: 一是你根本不知道有多少文件有乱码,这个工作遥遥无期。二是治标不...

2019-10-08 10:47:07 1534 2

原创 Android热修复二(手写热更新代码)

Android热修复二(手写热更新)上一篇 :Android热修复一(热修复原理)通过第一篇已经了解了原理了,想必动手实现也不是那么难了,下面到了激动人心的代码环节,决定课后不看代码自己手撸。回顾一下基于类加载的热修复的实现步骤:反射获取当前程序的PathClassLoader 反射获取DexPathClassLoader的pathList属性 反射获取pathList中的属...

2019-09-26 15:17:03 890 5

原创 Android 热修复一(热修复流程原理)

Android热修复一:热修复的流程下一篇:Android热修复二(手写热修复代码)在听了lance老师的热修复理论之后,决定写一篇文章,把我理解的全部记下来之前也多少了解过热修复,当下的热修复方案应该按技术分为三种:底层替换方法 instant run 方法 基于类加载机制至于前两种就简单说下,这次主要分析一下第三种。1.底层替换方法:典型框架(阿里 AndFix...

2019-09-25 12:42:00 696

原创 Android 屏幕适配完全攻略

基础知识(必备):px: 像素单位density: 屏幕密度dp: 设备独立像素密度 ,android 独有的单位sp:同dp相似,还会根据用户的字体大小偏好来缩放。ppi : 每一英寸上包含的像素个数,物理上的概念。dpi : 原本是印刷业使用的单位,表示的是打印纸条上的每一个值。这样保证了每一区间内的物理像素密度在软件上都使用同一个值。dpi是写在系统出厂配置文件中的...

2019-09-02 16:23:46 507

原创 记一次初学者的spring boot 打包部署

作为一个前端程序员,好不容易用第一次使用spring boot 写了一个项目,idea里面运行的ok,心里暗自窃喜。但是没想到打包就出现问题,折腾了一天,现在总结一下;先看一下我的项目的结构:这是我的项目,主项目是一个spring boot 项目,用来作为服务端。还有一个ArcFaceSDK模块,这是一个java模块,用来请求服务端。先说一下ArcFaceSDK模块的打...

2019-08-21 15:06:51 174

原创 Andriod资源混淆的一次体验

通常情况下,Android中的混淆有代码混淆和资源混淆。代码混淆比较简单,只要打开 minifyEnabled开关,并且需要时指定一些混淆规则就可以了;相比之下,资源混淆没有那么简单,因为不能简单的修改res文件夹下的资源文件的文件名,因为在开发时每一个资源文件都对应了R文件中的id, 打包后会生成resource.asrc文件,每一个资源文件都在resource.asrc文件中有对应记录...

2019-08-01 16:25:34 1009

原创 HashMap中的重写enquls 和 hashCode 有什么用?

作为一个入门级的程序员 , HashMap 我们肯定都用过,但是我们是否真正了解过它呢? 那么看了这篇文章,看看是否让你对HashMap有新的认识。首先HashMap基本的用法大家肯定都熟悉,像下面这样: Map testMap1=new HashMap<String,String>(); testMap1.put("Mrwang", "我是一个垃圾"); ...

2019-07-21 15:52:34 231

原创 解决Androd Fragment 嵌套问题

开发中经常遇到很多fragment 嵌套在一起,我们不仅需要在actvity中管理fragment, 在fragment也要管理所属的fragment,一个两个还好说,如果特别多的话,我们的项目嵌套很难管理,我们自己都觉得乱。实际开发中我就遇到这种问题,之前都是每个模块一个activity,现在全是fragment,不光要处理跳转,还有可能支持fragment回退。我开始想怎么解决这个问题。...

2019-07-04 13:23:42 236

原创 Android NDK系列四(Android Studio ndk-build方式配置第三方库 和打包生成多个.so(fmod库为例))

配置第三方库:1.首先关注一下目录结构,可以只看红框的目录,其他可以忽略。。2.针对上面的目录,我们在build.gradle中的配置,主要添加红色的部分:android {compileSdkVersion 27defaultConfig {applicationId "hanlonglin.com.fmoddemo"minSdkVersion 15...

2019-03-15 14:22:58 639

原创 Android NDK系列三(Android Studio cmke 编译多个个.so文件)

如果我们要在我们的项目中加载多个我们生成的.so库System.loadLibrary("play_sound");System.loadLibrary("native-lib");这时候需要我们生成多个.so库;我们对上一篇做一个升级,比如我在生成 play_sound 库的时候,也想生成 我自己的native-lib库;这时候我们需要多个CmakeLi...

2019-03-15 14:14:55 1063

原创 Android NDK系列二(cmake方式配置第三方库(fmod库为例))

1.首先引入第三方包:打开下载好的fmod包,进入lib将这些全部复制到我们项目的app/libs下:(这些so是作为预编译库用来编译我们的自己的库的,没有的话不能生成我们自己的.so)然后打开fmod的inc目录下:全部复制到app/src/main/cpp/fmod_inc : (理论上这个目录自己建立就可以,然后在CmakeList.txt里面配置,使项目能找到)...

2019-03-13 11:26:39 853

原创 Android NDK系列一(ndk在android studio基本编译配置 ndk-build 和 cmake)

ndkbuild 与 cmake在 Android 项目中使用 jni 有两种编译方案,一种是传统的ndkbuild,一种是当前推荐使用的 cmake;下面来分别介绍这两种方式;我的AS版本 3.2:1.ndk-build方式配置方式:1.创建Android.mk文件,这里我创建在cpp目录中,这个目录可以自己定,之后在build.grade中设置就行了2.编写Andro...

2019-03-12 13:49:43 5926

原创 关于Android学习书籍的推荐

Android 是一个前景很大的平台,很多人都投入到android 开发中去了,有时候入门是一件很难的事,还有入门以后进阶也是阻碍重重,可能原因有很多,但不外乎是你自己的懒惰和学习方向的错误;走了很多弯路后,我积累下了几本android的书,是从开始到进阶的。是我觉得最清晰易懂的书。(我觉得很多书把很多简单的东西讲的特别复杂,导致读者失去信心,真是害人)下面我自己总结了几本书,链接里的资源...

2019-01-30 23:39:36 2776

原创 android gradle的理解 以及 解决编译慢的问题

gradle的重要概念:1.gradle 安装的位置1.用户目录下 .gradle用户目录下wrapper/dist 下有已经下载的gradle版本; 如果gradle下载慢可以自己下载,然后把zip考进对应的随机文件夹内(注意时随机文件夹,这个系统生成不能改,例如我的是gradle-4.6-all\bcst21l2brirad8k2ben1letg)2.每个项目目录下有gra...

2019-01-23 14:01:55 491

原创 橘子日记

橘子日记,希望给人一种清新爽朗的感觉,不管你的一天心情是怎样的,希望进入橘子日记,会带给你一种互诉心声的感觉。简洁记录,方便查看,少一些杂质,多一些纯真。橘子日记的版本正在更新中,期待大家的意见........

2019-01-07 10:50:14 420

原创 底部导航Tab图标 设置可调节图片大小:

不知怎么说 ,但是这个很有用;我实现Fragment 切换的时候tab ,一般是RadioGroup,下的四个RadioButton,然后加四个Fragment实现的;但是这样tab的图标只能由RadioButton的drawableTop指定,不能控制其大小,只能找分辨率小的图片,即使能找到,看上去也不清晰;如果能用分辨率大的图标设置drawableTop的属性并且能指定大小,就完美了。好,...

2018-12-10 08:41:16 3943

原创 RadioButton设置圆圈的大小样式

radioButton 默认的风格是这样的:怎么样修改这个红色的圆圈为我们自定义的图标呢?我们注意到RadioButton的button属性,是设置这个红色圆圈的,当我们设置 button=@null 则这个圆圈消失;现在我们要将它设置成下面的样式:1.首先在drawable下创建 radio_btn_style.xml&lt;?xml version="1.0" en...

2018-12-10 08:39:36 15868

matrix-apk-canary-2.0.8.jar

apk体积检查工具, 可独立使用

2022-11-01

DNS网络优化源码, 降低错误率与请求时长

关于dns优化的源码; 对于请求错误率与请求时长两个当面进行了优化; 提供了完备的配置项, 可根据业务灵活修改dns超时时间, dns可选服务器; 简单的介入, 一行代码即可接入项目; 经过线上验证, 稳定可用, 且明显改善网络请求数据;

2022-10-25

asm-all-4.0.jar.zip

用于使用命令行将class反编译成asm指令集,对于编程有很大帮助。AndroidStudio中AsmViewer插件底层就是用的它,使用命令行方式会比插件更灵活

2020-08-19

jd-gui文件查看工具.zip

方便查看class或jar包对应的java代码,对于编译成class的语言都适用,尤其是像kotlin,groovy这些新兴的语言,IDE反编译并不能显示完全的代码,而它却可以做到

2020-08-19

中文版JVM指令手册.pdf

根据官方jvm指令转化的中文版jvm指令手册,包含 java反汇编指令以及对应的机器码和操作的具体含义,对于英文吃力的人是一大福音。

2019-12-24

android-extend.jar

关于图像格式转化的一个jar包,找了很久才找到,网上基本上找不到了,分享给大家

2018-10-09

qt完成的工作记录程序

Qt完成的从工作记录程序,带ui,界面简洁,使用简单,保存每一天的工作日志,并有查看日志记录功能,用到了很多文件操作的功能,对于学习qt的同学是一个参考教科书;

2018-10-09

活体识别源码

通过张嘴,眨眼,摇头活体识别代码,准确有效,可按需改动;

2018-10-09

空空如也

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

TA关注的人

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