- 博客(72)
- 收藏
- 关注
原创 Flutter多语言适配
多语言适配是一个让应用面向国际市场的前提,另外也看我的Android原生的多语言适配的文章。那么Flutter如何进行多语言适配呢?本文使用了GetX框架,所以你的项目应该是GetX框架搭建的。
2024-10-11 21:59:12 597
原创 AES加密,全平台实现!
今天我们来聊聊数据加密与隐私相关话题。本人开发的加密工具,欢迎体验!AES加密,通俗的话来讲,就是用一个key把原数据变成一个新数据,也通过这个key还原成原数据。所以,它是一种对称的加密方式。只要别人不知道这个key,就无法解开数据的内容。它是DES加密的升级版本,由于AES的密钥长度更长,所以更安全。但是它的效率略有降低,不过这对于现代的计算机设备来说可以忽略不计。数字加密在当今数字时代的重要性不容忽视。高级加密标准)是一种对称加密算法,用于加密和解密数据。
2024-10-11 21:54:17 860
原创 实现一个全站搜索功能的那些事
本篇主要讲述了Solr搜索引擎的前后端基本使用,我们搜索的时候通常还会分类进行搜索,比如综合、热门、文件、文章等,这个还会牵扯到自定义搜索结果的权重算法,有兴趣的JY可以自行深入研究。
2024-08-08 23:30:04 731
原创 一文看懂数据缓存框架DoraCache
dcache是一个开源的Android离线数据缓存框架,旨在提供一种简单而高效的方式来缓存网络请求的结果和其他数据,以便在手机没有网络的时候使用历史缓存数据。它可以用于缓存各种类型的数据,包括字符串、JSON、图片、音频和视频等。以下是dcache的主要特点:简单易用:dcache提供了简单易用的API,使得缓存数据变得非常容易。您只需几行代码即可将数据缓存到本地,而不需要处理复杂的缓存逻辑。可配置性强:dcache提供了丰富的配置选项,您可以根据自己的需求来调整缓存所使用的orm框架、缓存路径等参数。
2024-08-08 23:27:51 1010
原创 分页缓存与下拉刷新的整合原理 - DoraPageDatabaseCacheRepository
这个类就是为了告诉框架,你要缓存的数据结构是一个List类型的SystemNotification,而且会一页一页给到,请帮我缓存好了。一旦调用抓取数据的函数,就会调用onLoadFromNetwork()方法,加载最新参数的数据,这边的数据监听器就会被回调,同时将数据缓存一份到数据库中,以备无网络的时候使用。在这个分页缓存仓库类中,定义了分页的一些参数,如第几页?顾名思义,分页缓存就是边分页边缓存,分页通常使用下拉刷新控件实现,而缓存通常说的是指磁盘缓存,即保存到数据库中,数据库本身也是一个索引文件。
2024-06-25 00:05:43 658
原创 Android低代码开发 - InputMenuPanelItem详解
不管怎么说,输入菜单InputMenuPanelItem都是一个举足轻重的核心菜单项,对于它的优化,可不能马虎。MenuPanel遵循低代码设计理念,目的是为了让大家写代码就像拼积木一样,把能想到的尽可能多的考虑到,写代码就跟玩一样。
2024-06-13 17:37:13 877
原创 Android低代码开发 - 直接创建一个下拉刷新列表界面
== 0) {// 滑到底部了= null) {} else {它实现了一个顶层接口Pullable,通过和两个方法来在运行时动态判断可不可以下拉刷新和上拉加载。里面提供了两个属性,表示是否有下拉和上拉能力,如果设置为false,则无论条件达成与否都不能进行刷新和加载。
2024-06-13 12:00:21 753
原创 适配Android12启动页
Android开发本不使用启动页,结果就被我们一些大厂玩坏了,比较有名的就是腾讯QQ的那只企鹅,估计是为了体现品牌形象,或是为了方便打广告,于是就强加了一个启动页。这样一来倒好,各个互联网平台纷纷效仿,人家技术好倒罢了,一些新入行的小白也开始这样写,于是就引出了启动黑屏或白屏一段时间等问题,这里我就不多吐槽了。而热启动就是退出后台没多久,可以继续使用的时候。奇怪的是,Android官方现在还真搞了这么一个启动页的API,目的应该不是为了方便打广告,而是保证最快打开一个页面展示给用户,然后耗时的延后加载。
2024-06-06 00:10:31 569 1
原创 Android状态栏适配问题
Android状态栏适配是一个老生常谈的问题,那么我又拿出来讲了,因为这个东西确实太重要了,基本上每个项目都用得到。状态栏总共有几种形态。第一,让状态栏颜色跟应用主色调一致,布局内容不占有状态栏的位置。第二,让布局内容的顶部成为状态栏的一部分,状态栏透明。第三,有DrawerLayout的情况,侧边栏滑出来,一半侧边栏的顶部界面,一半内容的顶部界面,且不透明。
2024-06-06 00:08:11 683 1
原创 Android自定义View - LayoutParams
这一期我们来讲一讲LayoutParams这个玩意儿。Android入门的第一行代码就牵扯到这个东西,然而,你真的理解够了吗?
2024-06-05 00:17:42 347
原创 Android自定义View - 事件分发
我们开发自定义View的时候,通常是重写onTouchEvent()方法并return true来确定哪一层来消费这个事件。传递过程中,都能收到MotionEvent.ACTION_DOWN事件,而只有确认mFirstTouchTarget后的那个控件,才能收到全部的事件。
2024-06-05 00:16:34 908
原创 Android电量优化,让你的手机续航更持久
Screen屏幕是非常耗电的一个硬件,不要问我为什么。屏幕主要有LCD和OLED两种。LCD屏幕白色光线从屏幕背后的灯管发出,尽管屏幕显示黑屏,依旧耗电,这种屏幕逐渐被淘汰,如果你翻出个早点的功能机,或许能看到。那么大部分Android手机都是OLED的屏幕,每个像素点都是独立的发光单元,屏幕黑屏时,所有像素都不发光。有必要时,让屏幕息屏很重要,当然手机也有自动息屏的时间设置,这个不太需要我们操心。Radio数据网络和Wi-Fi无线网络网络也是非常耗电的,其中又以数据网络的耗电更多于Wi-Fi的耗电。
2024-06-04 01:04:37 2328 7
原创 Android约束布局ConstraintLayout的使用
Android引入约束布局的目的是为了减少布局层级的嵌套,从而提升渲染性能。约束布局综合线性布局、相对布局、帧布局的部分功能,缺点也很明显,就是可能要多写几行代码。所以约束布局使用时,还得综合考虑代码量。提升性能也并不一定非得使用约束布局,也可以在ViewGroup上dispatchDraw。你需要根据业务的具体情况选择最合适的实现方式。我知道很多人一开始很不习惯使用约束布局,但既然你诚心诚意问我怎么使用了?于是我就大发慈悲告诉你怎么使用呗。
2024-06-04 00:57:45 1303
原创 Flutter开发 - 使用GetX框架实现类似MVVM架构
这个MyApp就是我们程序的入口,相当于Application类,其实最主要是因为在main()方法中调了一个runApp()方法,然后传入了我们的第一个视图。GetPage里面的page指定了这个页面的视图Widget,然后使用binding指定依赖注入,简单说就是不用在使用的时候new对象,直接注入到属性中。databinding里面的ObservableField类可以帮助我们很好的实现数据的双向绑定,通过调用它 的get()方法就可以拿到值了,在xml中也可以很方便地使用其值。
2024-06-03 00:30:34 774
原创 Gradle如何发布一个Android开源框架到JitPack
作为一个开发开源框架的Android工程师,一定要有一种精益求精的精神,在一个比较小的功能上尽可能做到完美,把各种情况都考虑到位。代码越多,越容易出bug,而开源框架是要给很多人使用的,别人不太可能使用你有很多bug的框架,除非那人本来也不太懂。新版本的gradle的发布我采用kts脚本,当然这个不是必须的,只不过kts有代码提示罢了。你别看代码很简单,但是网上的资料大多都有各种各样的问题,找到可以让你编译过的并不容易。然后把测试相关的一些东西去掉,只留纯净的你的框架的代码。剩下的跟旧版本的发布方式类似。
2024-06-03 00:28:03 1045
原创 如何使用Dora SDK完成Fragment流式切换和非流式切换
我想大家对Fragment都不陌生,它作为界面碎片被使用在Activity中,如果只是更换Activity中的一小部分界面,是没有必要再重新打开一个新的Activity的。有时,即使要更换完整的UI布局,也可以使用Fragment来切换界面。
2024-06-02 01:02:56 920
原创 Android Studio插件开发 - Dora SDK的IDE插件
Android Studio是一种常用的集成开发环境(IDE),用于开发Android应用程序。它提供了许多功能和工具,可以帮助开发人员更轻松地构建和调试Android应用程序。确保你已经安装了最新版本的Android Studio。你可以从官方网站(https://developer.android.com/studio)下载并安装它。了解Android Studio插件的基本结构和原理。
2024-06-02 00:48:41 1144
原创 Dora全家桶到底是怎样的味道
Android APP项目大体可以分为基础架构的开发、UI布局和接口调试,其他业务逻辑我这里无法预知,要不然我不成神了?所以我开源了三条路线的框架,dora、dview和dcache。本篇我只讲解基础架构dora是如何使用的。
2024-06-01 00:03:39 938
原创 如何仿一个抖音极速版领现金的进度条动画?
半圆,如果是水平的情况下,我们的宽度就只要一半,相反如果是垂直的半圆,我们高度就只要一半。绘图除了需要Android的基础绘图知识外,还需要一定的数学计算的功底,比如基本的几何图形的点的计算你要清楚。这个就牵扯出我们动画的一个关键类,TypeEvaluator,这个接口可以让我们只需要指定边界值,就可以根据动画执行的时长,来动态计算出当前的渐变值。思路和灵感来自于大量源码的阅读和大量的实践。大前提就是你得先把自定义View的这些知识点系统学习一下,先保证都见过,然后才是将它们融会贯通,用的时候信手拈来。
2024-06-01 00:02:11 1032
原创 Android自定义标题栏控件
标题栏控件是在App开发中使用最为广泛的一类控件,使用频率在第一梯队。Google跟苹果都很重视这样的一个控件,所以Android就有了ActionBar,苹果就有了UINavigationController。那么既然Android官方定义了actionbar,为什么还要自己定义标题栏呢?我觉得原因有很多,其中最主要的原因就是使用不方便,坑多。当然actionbar也有它的好处,那就是功能强大。我写这个控件的目的并不能完全覆盖actionbar的所有功能,只是在这种类似这样界面的标题栏,写代码会很高效。
2024-05-31 00:31:16 868
原创 Kotlin和Swift的前世一定是兄弟
Swift这门编程语言主要用于iOS和MacOS的开发,可以说是非常流行的一门编程语言,我只想说,如果你会Kotlin,那么你学习Swift会非常容易,反之亦然。下载XCode,然后你就可以创建Playground练习Swift语法了。playground这个名字起的好,翻译成中文就是操场,玩的地方,也就是说,你可以尽情的测试你的Swift代码。编程语言很多地方都是相通的,学会了面向对象编程,你学习其他编程语言就会非常容易。
2024-05-31 00:28:37 886
原创 AOP Gradle插件的仓库地址不稳定,干脆自己来搭建Nexus私服
使用到AOP面向切面编程的例子还有很多,比如点击按钮发送网络请求前先检测下网络,如果没有网,就拦截掉,不发请求,然后显示一个没有网络的对话框。再比如Android6.0运行时权限的动态申请,在需要申请权限的方法前配置一个权限注解,就可以先保证权限被授予再调用该方法。再比如,所有没有登录情况下的统一处理等。如果你擅长Gradle插件开发,你也可以搭建一个自己的插件仓库,以后要使用某个插件,直接apply就可以了。
2024-05-30 08:01:06 840
原创 Android更新优化 - 增量更新是如何节省用户时间和流量的
最后聊一聊更新的具体逻辑。增量更新有固定数量法和固定业务法。你可以规定,相差版本小于等于3个,就采用增量更新,大于3个,直接走全量更新。此为固定数量法。固定业务法则是,版本分为大小版本号的更新,每个大版本必须走全量更新,而大版本中的小版本则采用增量更新。大版本采用强制更新,而小版本则可采用选择更新。每次更新到大版本,可能会再次拉取该版本的最终小版本的补丁文件发起二次更新。
2024-05-30 00:21:52 1062
原创 Android&Flutter混合开发
混合开发简单来说就是,既有Flutter的Dart代码,又有平台相关的原生代码,如Kotlin、Swift。在改动比较小,且追求极致体验的主要功能模块,采用原生开发,搭建一个所谓的“壳”。然后在一些经常变动的界面,如应用的首页、活动页面,以及简单的UI界面,如设置界面、关于界面,使用Flutter进行开发。这样做的好处就是可以降低错误率,提高开发效率,缩减开发周期,提升产品竞争力和快速抢占市场的能力。
2024-05-30 00:09:28 1356
原创 Android更新优化 - 增量更新是如何节省用户时间和流量的
最后聊一聊更新的具体逻辑。增量更新有固定数量法和固定业务法。你可以规定,相差版本小于等于3个,就采用增量更新,大于3个,直接走全量更新。此为固定数量法。固定业务法则是,版本分为大小版本号的更新,每个大版本必须走全量更新,而大版本中的小版本则采用增量更新。大版本采用强制更新,而小版本则可采用选择更新。每次更新到大版本,可能会再次拉取该版本的最终小版本的补丁文件发起二次更新。
2024-05-30 00:07:50 1022
原创 Android项目实战 —— 手把手教你实现一款本地音乐播放器Dora Music
今天带大家实现一款基于Dora SDK的Android本地音乐播放器app,本项目也作为Dora SDK的实践项目或使用教程。使用到开源库有[https://github.com/dora4/dora] 、[https://github.com/dora4/dcache-android] 等。先声明一点,本项目主要作为框架的使用教程,界面风格不喜勿喷。我们要开发一款Android App,首先要搭建基础框架,比如使用MVP还是MVVM架构?使用什么网络库?使用什么ORM库?很显然,作为Dora SDK的使用
2024-05-29 00:18:32 1736
原创 我的又一个神奇的框架——Skins换肤框架
这个skinThemeColor拿到的就是当前皮肤下的真正的skin_theme_color颜色,比如R.color.skin_theme_color_orange的颜色值“#ff8400”或R.id.skin_theme_color_blue的颜色值“#0284e9”。当前skins框架只定义了几种主要的换肤属性,你理解原理后,也可以自己进行扩展,比如RadioButton的button属性等。我们只干预skin_开头的资源的加载过程,所以解析得到我们需要的属性,最后得到SkinAttr的列表返回。
2024-05-29 00:16:21 870
原创 Android LAME原生音频
我想大家都做过录音的功能吧,首先想到的是不是MediaRecorder?今天我们不用MediaRecorder,而是使用LAME库自己编译音频编码模块,很明显,这个需要用到NDK。凡是涉及到音视频编解码这块的,都需要用到Android NDK(Native Development Kit),原生开发工具包。即使用C/C++代码实现音频的采样和编码,然后使用Java去调用原生模块实现录音功能。
2024-05-28 00:40:21 1968
原创 底部弹出菜单原来这么简单
需要注意一点的是,最上面那个菜单的样式稍微有点不一样,因为它上面是圆滑的,有圆角,这样的界面显示更加和谐。我们主要考虑的就是弹出对话框的动画样式,另外注意一点就是可以多支持几个语种,让框架更加专业,这里只需要翻译“取消”文字。类的结构不仅可以继承,还可以使用聚合和组合的方式,我们这里就不直接继承Dialog了,使用一种更接近代理的一种方式。条条大路通罗马,能抓到老鼠的就是好猫。底部弹出菜单,即从app界面底部弹出的一个菜单列表,这种UI形式被众多app所采用,是一种主流的布局方式。以上是对话框的样式。
2024-05-28 00:39:18 908
原创 Android对于请求数据安全的一些思考
数据安全攻防是一个持续对抗的问题。树大招风,树欲静而风不止。你的平台如果要做大做强,必然要将数据安全放在非常重要的位置,可以说是一个企业的命脉。对数据多做几层加密,养兵千日,用兵一时。一旦有人发出攻击,哪怕复杂度再高一点点,那就对你没有办法。最后祝大家,技术更上一层楼,多多学习新技术,技术的更新换代很快,如果不思进取,则可能在时代的潮流中被淘汰。
2024-05-27 00:24:39 529
原创 此物一出天下反,Dora犹如优秀框架的粘合剂
引言:千里之行,始于足下。当夜空中繁星点点,一颗璀璨的流星划过,其辉光洒在古老的山谷之中,照亮了一个隐藏在山石之间的洞穴。洞穴内的空气弥漫着神秘的气息,流星划过的光芒越来越亮,洞穴内的温度也开始升高。你能感受到一股无法言喻的力量,这似乎是一个新的时代的开始。突然,洞穴内的石壁开始发出耀眼的光芒,似乎有某种能量觉醒了。你不禁一愣,然后意识到这是传说中的创世神器正在诞生。在光芒中,一块巨大的水晶开始从石壁上升起,悬浮在空中,它就是。这块水晶透射出五彩斑斓的光芒,你能感觉到其中蕴含的无限力量。
2024-05-27 00:22:33 728
原创 Gradle的settings.gradle.kts你真的理解吗?
我们的gradle脚本本质上是执行一个个gradle plugin,即apply plugin,可以执行外部导入的,也可以执行项目编写的编译脚本代码。所以settings.gradle.kts也是编译过程中一个gradle plugin。在中有个getSettings方法,调用这个方法拿到我们配置的settings gradle plugin。settings.gradle.kts中可以配置的内容我们参考Settings这个类。在settings.gradle.kts这个文件中,主要配置一些项目全局的设置。
2024-05-26 00:08:22 1902
原创 浅谈build.gradle.kts编译脚本
我这里只是简单讲解了一些主要的配置代码,你在实际的项目开发中可能还需要自行研究Gradle Kotlin DSL的更多源码以满足不同的编译需要。当你迈出了将build.gradle转化为build.gradle.kts这关键的一步,你离熟练掌握Gradle构建脚本就很近了。当然你也要常常关注Gradle的最新变化,最后附上Gradle的官方文档地址,https://docs.gradle.org/current/userguide/userguide.html ,祝你好运。
2024-05-26 00:05:12 786
原创 Retrofit+Flow网络请求与Android网络请求的演变
Retrofit网络请求我想大家都不陌生,今天我就来梳理一下技术是如何一步一步进步,逼格是如何一步一步变高的。
2024-05-25 00:06:39 556
原创 使用TOML统一组件化SDK版本
自从Gradle改变了Android的依赖管理方式后,要想集成第三方SDK就变得很容易。比如我要集成RecyclerView,只需要这么一行代码。如果是groovy,也只需要这么一行代码。如果要集成github上面的第三方SDK,也只需要在settings.kts中再多指定一个依赖管理仓库的地址。github上面的android库最快捷的发布方式就是jitpack了。当项目使用了组件化以后,通常我们会定义一个config.gradle,像是这样。今天我们不用config.gradle的这种方式。
2024-05-25 00:05:13 326
原创 操作系统底层运行原理 —— 基于线程安全的消息机制
学过Android应用开发的大概都知道Handler这个东东,这也是面试中老生常谈的问题。其实不仅仅是Android,iOS以及PC的操作系统,底层也离不开消息机制。这个属于生产消费者问题。生产者消费者模式(Producer-Consumer Pattern)是一种多线程协作的设计模式,其中有两种不同类型的线程:生产者和消费者。这两种线程通过共享的缓冲区(队列、缓冲池等)进行通信,以协调任务的执行。在生产者消费者模式中,生产者负责生成一些数据或执行一些任务,并将其放置到共享的缓冲区中。
2024-05-24 00:20:20 304
原创 Android数据缓存框架 - 内存数据载体从LiveData到StateFlow
引言:所有成功者的背后,都有一份艰苦的历程,不要只看到了人前的风光,而低估了他们背后所付出的努力。随着flow到流行度越来越高,有开发者呼吁我使用flow,于是我就如你们所愿,新增了StateFlow作为新的数据载体。当然你仍然可以使用旧版本的LiveData,代码写法略微不同罢了。如果对我的dcache框架设计不是很理解的小伙伴,可以看我的专栏其他文章。
2024-05-24 00:18:04 687
原创 dcache-android框架中的设计模式详解
设计模式只是为了设计出更好扩展的系统,并不是非得为了使用设计模式而使用设计模式,具体还要看业务,有没有这个使用必要。当然开源框架本来就是给别人用的,所以设计模式用得比较多。架构设计的精髓不在于硬套设计模式进行设计,而是你设计得足够多了以后,不去硬性使用设计模式,而设计模式无处不在。这样你的架构设计能力就达到了一个新的境界了,设计模式你已经能完全掌控了。它已经融入到了你的骨髓,不是吗?
2024-05-24 00:10:45 583
原创 Android应用出海必备技能 —— 多语言适配
引言:自杀式重生,他杀式淘汰。走别人的路,不是让别人无路可走,而是规避自己开辟一条新道路的风险。软银集团创始人孙正义说过,在成熟的市场发生过的事情,在落后市场发生的概率就会增加。那么,创业这件事就是如此,如果国内市场饱和了,那么就换个地方。同样的模式,降维打击。你赚钱最稳的方式,就是把一个已经发生过的市场的业务,转移到还没有发生过的。因为坑都已经踩过了,所以相比做开创性的创新业务来说,风险更小。那么就进入今天的主题,Android应用如何做多语言的适配?
2024-05-24 00:08:42 921
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人