
android
文章平均质量分 73
龍林1102
希望在这浮躁冷漠的世界,留下浓墨重彩的一笔
展开
-
ProtoBuffer在Android端的编译
1.cd 进入生成Java文件的目录,我这里是进入我之前建立的protobuf目录。2.解压下载好的安装包,可以自己建一个protobuf文件夹将其解压到该文件夹下。然后在protobuf目录下就能看到生成的Java文件啦。3.进入解压后的安装包文件夹中,执行指令。【编译proto文件为Java文件步骤】5.安装完成后查看版本。原创 2025-05-22 18:14:58 · 204 阅读 · 0 评论 -
Android 使用ImageSpan加载网络图片
思路就是先创建一个占位drawable对象返回,将它设置到TextView上,然后异步加载完后再将drawable重新绘制,刷新drawable和TextView;但是需求后来变成了加载网络图片, 一时间竟然有点懵, 不过还是有方案的;比如,使用Glide先加载到bitmap, 然后再执行上面的操作,将bitmap传入ImageSpan中;但是这就陷入了回调中, 主要除了插入这张图片,可能还会插入好几张, 那不是陷入了回调地狱了;最近遇到一个小需求, 将图标插入在TextView中,实现富文本的样式;原创 2023-04-11 21:57:38 · 1625 阅读 · 4 评论 -
Apk体积检测 - ApkChecker的使用
Apk体积优化一直是迭代中的不可忽略的问题, 这次要说的是apk体积的检测方法, 毕竟优化都是基于检测的;当然, 在Android Studio中有Apk Analyser工具可以使用, 但是需要导出, 或者在每个版本迭代中生成报告, 手动生成apk后拖入也是比较麻烦的;使用Matrix 提供的工具 ApkChecker可以独立检测apk并生成报告, 下面介绍下打包检测过程;原创 2022-11-01 18:20:06 · 1206 阅读 · 0 评论 -
Android客户端网络DNS优化实践
关于DNS的相关介绍:https://www.51cto.com/article/674906.html传统的DNS解析:当开始 DNS 解析的时候,如果 LocalDNS 没有缓存,那就会向 LocalDNS 服务器请求(通常就是运营商),如果还是没有,就会一级一级的,从根域名查对应的顶级域名,再从顶级域名查权威域名服务器,最后通过权威域名服务器,获取具体域名对应的 IP 地址。传统DNS缺点: 不稳定(DNS服务器被劫持或故障), 访问慢。原创 2022-10-25 17:03:41 · 2168 阅读 · 0 评论 -
Android 客户端如何与服务器时间同步
这次分享一个简单但是很实用的功能. 开发app经常会涉及获取当前时间这项功能, 大部分情况不需要特别精准, 但是遇到一些统计类的需求, 就需要精准的时间, 比如 : 需要统计消息送达时间, 服务器记录发送时间, 客户端记录接收时间, 两个时间取差值, 就可以得到消息延迟时间;导致问题的原因是客户端造成的, 因为手机的时间难免有些用户会自己设置, 而且即使没有设置,个别手机上的时间也可能不一致;此时, 我们需要同步服务器的时间,让本地时间和服务器时间保持一致;原创 2022-10-13 16:11:25 · 3673 阅读 · 0 评论 -
Android 小组件完整案例
android小组件原创 2022-04-15 20:02:35 · 4371 阅读 · 0 评论 -
Fragment在ViewPager下的懒加载方案
TabLayout+ViewPager+FragmentStateAdapter是很常见的页面布局, 很多页面可以集中在一起,不断切换便能集中很多业务; 但是面临一些问题:原创 2022-03-16 20:35:05 · 2246 阅读 · 0 评论 -
Android处理软键盘弹出问题和键盘表情切换问题
软键盘可能引发的问题:键盘弹出,可能会挤压页面中的布局和view,导致页面显示不可控,尤其是当页面设置了各种主题的时候,更加不可控制; 处理软键盘和表情键盘切换,很容易造成切换生硬,有闪烁的问题;传统解决方案的缺陷:网上有很多解决方案,大多都是设置 android:windowSoftInputMode="adjustResize|stateHidden",并把输入框靠近底部,这样就能通过窗口自适应把相应的输入控件挤上去,而且可以通过布局变化监听到软键盘弹出和消失事件,方便处理回调;关.原创 2021-05-12 18:07:36 · 1123 阅读 · 2 评论 -
简单统计android 项目中gradle的编译时间
最近想提高一下项目的编译速度,首先做的就是记录一下每次编译的耗时,来方便优化前后做对比; 思路很简单,监控每个task的耗时,连同版本信息一起记录在文件里,每次编译会产生一个编译耗时记录文件;为了方便隔离,我将这个功能单独抽离到一个buildTrace.gradle文件中,如下:import java.text.SimpleDateFormat/** * 监控构建耗时 * * 记录构建过程中的每个任务的耗时,并写入文件中 .build_history/buildTimeLog_yy.原创 2021-02-20 18:19:43 · 2033 阅读 · 1 评论 -
ASM在kotlin中的使用
我们之前在Java中可以愉快的插桩,是因为我们熟悉了 gradle 的Transform 和Asm框架使用方法,掌握这两个,基本插桩就没问题了。但是还有一个重要的知识点,class文件结构和字节码指令。每次看到还是一头雾水,幸好As提供了一个Asm-bytecode-viewer插件,可以方便的帮我们生成asm的字节码代码:不过,很不幸,这个插件对kotlin不那么友好。当你想用kotlin代码进行插桩,发现他会报错。目前看应该是不支持kotlin转换。这。。。又要手动写字节码了..原创 2020-08-19 01:36:09 · 2632 阅读 · 0 评论 -
仿今日头条文字指示器
最近想做一个自己用的TabLayout样式,但又不知道做成什么样才算满意。看到今日头条的TabLayout的样式,感觉既内敛有不失炫酷,是一个好的选择,而且实现简单轻便,决定小撸一下。看下效果图吧:相似度还是可以的吧,我把它用在了我的小项目里。感兴趣的欢迎来提提建议https://github.com/hanlonglin/ColorTrackTabLayout...原创 2020-03-26 15:51:26 · 286 阅读 · 0 评论 -
Android 事件分发原理和实际场景解析
事件分发是android里的解决事件冲突的一种机制。一般我们的布局都是一层叠着一层,那么当我们手指点击或者滑动的时候,屏幕怎么知道哪一个控件该响应,哪一个控件该滑动呢?这依靠的就是事件分发机制。本次文章源码细节不扣,但是主要流程会列出来,感兴趣的可以去源码中找对应的逻辑,有疑问可以留言哦。目录1.流程解读:从Activity--->DecorView:从DecorView...原创 2020-03-10 12:44:25 · 671 阅读 · 0 评论 -
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 · 1617 阅读 · 0 评论 -
ASM + Transform 在android中的使用
参考:https://juejin.im/post/5cc3db486fb9a03202222154上一篇 ASM的使用上一篇说到了am的使用,但是局限于对于特定class文件使用,但是在android中不能每个class都那样做。借助gradle插件和transfrom,我们可以干预android的打包过程,从中拿到所有class,从而进行插桩。下面分三点进行介绍:本文大纲:...原创 2019-12-25 12:40:10 · 1978 阅读 · 0 评论 -
字节码插桩框架ASM(一)
本文大纲:ams是做什么的 asm使用1.ASM是做什么的?简单来说,asm是用来进行字节码插桩的。什么是字节码插桩? 字节码插桩就是修改节码文件(.class). 如同 gson框架是用来做操json数据结构的,那么asm框架就是用来操作.class文件结构的。那么这有什么用处呢?这个是一个很强大而且很高级的功能。我们可能知道反射hook技术,aspectJ技术,动态代理...原创 2019-12-24 10:12:41 · 2815 阅读 · 0 评论 -
了解view的绘制流程和基础概念
本文大纲:android中view的加载绘制流程 自定义view中的基础概念 父View和子View的联系1.android中view的加载绘制流程1.1 andriod视图结构:说明: 上图给出了android一个Activity中的视图结构,从外向内依次是 phoneWindow-->DecorView-->ActionBar+Conten...原创 2019-11-26 17:36:01 · 233 阅读 · 0 评论 -
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 · 3203 阅读 · 0 评论 -
Artifatory仓库搭建和使用
本文大纲:1.什么是Artifatory仓库。 2.Artifactory仓库的下载安装配置。 3.在Artifatory仓库中创建仓库 4.项目中使用Artifatory仓库进行依赖。1.什么是Artifacory仓库?Artifactory是一个单独的工具,它可以与所有不同的技术“对话”,从而提高生产力,减少维护工作,并且促进不同部件之间的自动化集成。为了适应任何开...原创 2019-11-18 12:01:29 · 906 阅读 · 0 评论 -
底部导航Tab图标 设置可调节图片大小:
不知怎么说 ,但是这个很有用;我实现Fragment 切换的时候tab ,一般是RadioGroup,下的四个RadioButton,然后加四个Fragment实现的;但是这样tab的图标只能由RadioButton的drawableTop指定,不能控制其大小,只能找分辨率小的图片,即使能找到,看上去也不清晰;如果能用分辨率大的图标设置drawableTop的属性并且能指定大小,就完美了。好,...原创 2018-12-10 08:41:16 · 4064 阅读 · 0 评论 -
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 · 565 阅读 · 0 评论 -
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 · 1206 阅读 · 0 评论 -
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 · 734 阅读 · 0 评论 -
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 · 6096 阅读 · 0 评论 -
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 · 955 阅读 · 0 评论 -
解决Androd Fragment 嵌套问题
开发中经常遇到很多fragment 嵌套在一起,我们不仅需要在actvity中管理fragment, 在fragment也要管理所属的fragment,一个两个还好说,如果特别多的话,我们的项目嵌套很难管理,我们自己都觉得乱。实际开发中我就遇到这种问题,之前都是每个模块一个activity,现在全是fragment,不光要处理跳转,还有可能支持fragment回退。我开始想怎么解决这个问题。...原创 2019-07-04 13:23:42 · 323 阅读 · 0 评论 -
HashMap中的重写enquls 和 hashCode 有什么用?
作为一个入门级的程序员 , HashMap 我们肯定都用过,但是我们是否真正了解过它呢? 那么看了这篇文章,看看是否让你对HashMap有新的认识。首先HashMap基本的用法大家肯定都熟悉,像下面这样: Map testMap1=new HashMap<String,String>(); testMap1.put("Mrwang", "我是一个垃圾"); ...原创 2019-07-21 15:52:34 · 269 阅读 · 0 评论 -
Andriod资源混淆的一次体验
通常情况下,Android中的混淆有代码混淆和资源混淆。代码混淆比较简单,只要打开 minifyEnabled开关,并且需要时指定一些混淆规则就可以了;相比之下,资源混淆没有那么简单,因为不能简单的修改res文件夹下的资源文件的文件名,因为在开发时每一个资源文件都对应了R文件中的id, 打包后会生成resource.asrc文件,每一个资源文件都在resource.asrc文件中有对应记录...原创 2019-08-01 16:25:34 · 1224 阅读 · 0 评论 -
Android 屏幕适配完全攻略
基础知识(必备):px: 像素单位density: 屏幕密度dp: 设备独立像素密度 ,android 独有的单位sp:同dp相似,还会根据用户的字体大小偏好来缩放。ppi : 每一英寸上包含的像素个数,物理上的概念。dpi : 原本是印刷业使用的单位,表示的是打印纸条上的每一个值。这样保证了每一区间内的物理像素密度在软件上都使用同一个值。dpi是写在系统出厂配置文件中的...原创 2019-09-02 16:23:46 · 719 阅读 · 0 评论 -
Android热修复二(手写热更新代码)
Android热修复二(手写热更新)上一篇 :Android热修复一(热修复原理)通过第一篇已经了解了原理了,想必动手实现也不是那么难了,下面到了激动人心的代码环节,决定课后不看代码自己手撸。回顾一下基于类加载的热修复的实现步骤:反射获取当前程序的PathClassLoader 反射获取DexPathClassLoader的pathList属性 反射获取pathList中的属...原创 2019-09-26 15:17:03 · 989 阅读 · 5 评论 -
RadioButton设置圆圈的大小样式
radioButton 默认的风格是这样的:怎么样修改这个红色的圆圈为我们自定义的图标呢?我们注意到RadioButton的button属性,是设置这个红色圆圈的,当我们设置 button=@null 则这个圆圈消失;现在我们要将它设置成下面的样式:1.首先在drawable下创建 radio_btn_style.xml<?xml version="1.0" en...原创 2018-12-10 08:39:36 · 16489 阅读 · 0 评论