xiangzhihong8
著有《React Native移动开发实战》1,2,3版本、《Kotlin入门与实战》1,2版本、《Weex跨平台开发与实战》、《React Native开发进阶》和《Flutter跨平台开发实战》和《Android应用架构实战》和《鸿蒙应用开发与实战》、《Vue3 项目开发实战》即将出版
展开
-
Android 16强制横竖屏设置
但开发者端的响应却相对滞后,特别是中小型开发团队受限于大屏设备市场渗透率(截至2023年Q2,Android平板全球激活量约1.2亿台,不足手机设备5%)及开发成本考量,适配优先级普遍偏低。这种适配滞后已形成恶性循环——开发者因设备基数不足降低适配意愿,而用户体验缺陷又反向抑制大屏设备的市场接受度。要破解这一困局,既需要Google持续优化Jetpack Compose等现代化UI工具链,更需要建立开发者激励体系,通过应用商店流量倾斜、开发补贴等经济手段提升适配投入产出比。再不肯好好适配大屏设备?原创 2025-04-24 14:09:00 · 118 阅读 · 0 评论 -
车载OS简介
车载操作系统(Automotive Operating System)简称车载OS。目前市场上的网联汽车大多支持基于OTA(Over the Air)空中下载技术用以更新车载操作系统,为用户提供着日渐强大且丰富的座舱功能服务。车载操作系统的显示终端大多由仪表、中控组成,近年来HUD(Head-up Display)抬头显示器、副驾屏、后排屏等多元的显示设备也频繁加入其中。原创 2025-02-15 18:45:17 · 151 阅读 · 0 评论 -
深入理解AIDL的oneway关键字
在Android开发中,跨进程通信(Inter-Process Communication, IPC)是常见的需求。AIDL提供了一种方便、高效的IPC机制,使得不同进程之间的通信变得简单可靠。在AIDL中,oneway关键字用于标记远程方法调用为单向的,这意味着客户端在发送请求后不需要等待服务器的响应。oneway关键字的主要作用是优化客户端的性能。在传统的双向RPC(Remote Procedure Call)通信中,客户端发送请求后需要等待服务器的响应,这可能会导致客户端线程阻塞,影响用户体验。原创 2025-01-15 15:42:22 · 147 阅读 · 0 评论 -
Android开发之桌面Widget开发
可以看到,这里设置了两个 Activity,其中 WidgetActivity 是要跳转的页面,MainActivity 是首页,这是一个很常见的交互,即小组件跳转到具体页面后返回直接回到应用主页,而不是退出应用。但需要注意的是,一般应用会在闪屏页执行一些初始化操作,但如果像上面修改了 Widget 的启动页面后,应用不经闪屏页即进入 WidgetActivity,会导致某些功能出现异常,所以可以考虑做一个中间页跳转,在中间页做初始化操作,或者直接复用闪屏页功能,根据不同情况跳转。原创 2025-01-15 09:03:05 · 96 阅读 · 0 评论 -
安卓投屏神器 Scrcpy 安装与使用
Scrcpy是一款免费开源的投屏软件,由Genymobile开发,旨在为用户提供一种高效、可靠的安卓设备屏幕镜像和操作控制工具。Scrcpy的名称由来是“screen copy”,意为屏幕复制。它支持Windows、macOS和Linux等多种操作系统,具有跨平台特性。scrcpy的核心功能之一是实现Android设备屏幕的实时共享。这意味着用户可以将Android设备屏幕的实时画面传输到连接的计算机上。原创 2024-12-08 11:24:32 · 1753 阅读 · 0 评论 -
Windows环境下安装使用curl命令
curl命令网络应用curl命令是一个利用URL规则在命令行下工作的文件传输工具。CURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。原创 2024-10-14 22:06:31 · 5069 阅读 · 0 评论 -
Android 属性contentDescription详解
contentDescription 是一个属性,可以应用于 Android 视图(View)元素,例如按钮、图像、文本视图等。它为这些视图提供了文本描述,以便屏幕阅读器(如 TalkBack)等辅助技术能读取和解释这些元素的含义。原创 2024-09-23 20:50:12 · 751 阅读 · 0 评论 -
Android 后台服务之Persistent 属性
在 Android 开发中,有时我们需要后台服务持续运行,以保持应用的某些功能。例如,音乐播放器需要在后台播放音乐,或者健康应用需要持续跟踪用户的运动数据。后台服务是 Android 中的一种组件,它不与用户界面交互,能够在后台执行长时间运行的任务。由于 Android 系统的资源管理策略,这些服务可能会被系统杀死以释放资源。在某些情况下,我们希望服务能够持续存在,避免被系统回收。这时,我们需要将服务设为持久(Persistent)。原创 2024-09-17 22:54:53 · 1223 阅读 · 0 评论 -
Android切换日夜模式导致Activity重建
当从深色模式切换到浅色模式时,activity会销毁重新加载,但往往是从xml文件开始加载,而动态设置的一些值不会保存,同时如果页面足够复杂,被打回到起点是很麻烦的。2,然后配置如下的方法,来实现日夜模式的不同ui效果。原创 2024-09-06 17:31:34 · 778 阅读 · 0 评论 -
Android如何高效的加载大型位图
图片有各种形状和大小。在很多情况下,它们的大小超过了典型应用界面的要求。例如,系统“图库”应用会显示使用 Android 设备的相机拍摄的照片,这些照片的分辨率通常远高于设备的屏幕密度。鉴于使用的内存有限,理想情况下您只希望在内存中加载较低分辨率的版本。分辨率较低的版本应与显示该版本的界面组件的大小相匹配。分辨率更高的图片不会带来任何明显的好处,但仍会占用宝贵的内存,并且会因为额外的动态缩放而产生额外的性能开销。原创 2024-08-24 23:31:08 · 264 阅读 · 0 评论 -
adb server version (41) doesn‘t match this client (39); killing...
看报错的信息是adb server和adb client的版本不匹配。Android Studio总是时不时的提示一些更新,包括一些sdk的更新,不过这些更新platform-tools就出现了问题。当在命令行中执行adb shell命令的时候,就出现了下面的错误。3.删除步骤一检索出来与2无关的adb程序文件,或复制当前使用的adb文件到其他adb路径下,保持相同版本(Genymotion可以自定义路径为当前adb路径)。当然,还有另一种办法,就是下载对应版本的adb,然后替换本地的版本。原创 2024-08-09 11:13:50 · 2084 阅读 · 2 评论 -
Android单元测试实践
JUnit是一个Java语言的单元测试框架。Junit测试是程序员测试,即所谓白盒测试,因为我们知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。原创 2024-05-22 16:19:26 · 496 阅读 · 0 评论 -
点击短信链接唤起Android App实战
在很多业务场景中,需要点击短信链接跳转到App的指定页面。在Android系统中,想要实现这个功能,可以通过DeepLink或AppLink实现。原创 2024-05-09 23:09:04 · 898 阅读 · 0 评论 -
Android性能优化面试题
Android的性能优化涉及多个方面,如启动优化、稳定性优化、内存优化、网络优化、电量优化、安全优化等方面。原创 2024-04-30 09:30:07 · 265 阅读 · 0 评论 -
Android性能优化面试题汇总
Android的性能优化涉及多个方面,如启动优化、稳定性优化、内存优化、网络优化、电量优化、安全优化等方面。原创 2024-04-29 10:10:06 · 380 阅读 · 0 评论 -
Android车载开发之AAOS快速入门
在正式介绍Android Automotive OS之前,我们先弄清两个概念:Android Auto和Android Automotive OS。原创 2024-03-04 17:56:49 · 644 阅读 · 0 评论 -
Android 车载应用开发之SystemUI 详解
SystemUI全称System User Interface,直译过来就是系统级用户交互界面,在 Android 系统中由SystemUI负责统一管理整个系统层的 UI,它是一个系统级应用程序(APK),源码在/frameworks/base/packages/目录下,而不是在/packages/目录下,这也说明了SystemUI这个应用的本质上可以归属于framework层。原创 2024-02-16 09:33:43 · 804 阅读 · 0 评论 -
Android 车载应用之快速入门
车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。原创 2024-02-11 22:23:30 · 712 阅读 · 0 评论 -
Android 车载应用开发之车载操作系统
在智能网联汽车产业大变革趋势下,汽车逐步由传统的交通工具向同时具有交通、娱乐、办公、通信等多种功能的新一代智能移动空间和应用终端迁移。实现能网联功能的驾驶辅助系统、车联网系统以及智能座舱系统相关电子设备逐步成为汽车电子产业研发应用的重点。从功能层面来看,汽车电子主要可以分为车身电子控制系统和车载电子装置两大类别。车身电子控制系统: 通过直接向执行机构(如电子阀门、继电器开关、执行马达)发送指令,以控制车辆关键部件(如发动机、变速箱、动力电池)协同工作,也被称为电子控制单元(ECU);原创 2024-02-08 23:07:27 · 1209 阅读 · 0 评论 -
LiveData 迁移到 Kotlin Flow详解
使用 WhileSubscribed 策略,公开一个带有超时的 StateFlow。[示例]使用 repeatOnLifecycle 收集。示例使用 WhileSubscribed 公开,并在 lifecycleScope.launch/launchWhenX 中收集使用 Lazily/Eagerly 公开,并使用repeatOnLifecycle 收集。原创 2024-02-04 20:07:56 · 715 阅读 · 0 评论 -
腾讯,快手,滴滴等10家大厂Android面试题
现在Android开发的现状大致是这个样子,人才严重过饱和,加上跨端和小程序盛行,原生客户端(安卓 iOS)岗位进一步萎缩,入行之后就业极为困难。目前行情是移动端严重过剩,服务端供需平衡,前端供不应求。市场上前端工作好找,服务端职业上限整体较高。。客户端上百人抢一个工作岗位,竞争激烈,内卷惨烈。客户端开发整体水平较低,大量培训出来的开发者,简历包装两三年就能出来找到一份CV的工作,起薪就可以超过大部分人,所以这也是造成人员过剩的一个条件,人员过剩不可避免地就会导致公司的要求变高,福利变少等一系列问题。原创 2024-01-11 16:48:54 · 293 阅读 · 0 评论 -
使用Android 协程代替Handler
协程是一种轻量级的线程框架,它允许开发者以顺序的方式编写异步代码,而无需关心线程的管理和同步问题。协程的概念最早出现在 Erlang 语言中,后来被其他编程语言引入。Kotlin 协程是基于 JVM 的一种协程实现,它允许开发者以同步的方式编写异步代码,并且可以与现有的异步框架(例如 Retrofit、Room 等)很好地集成。简化异步代码:协程允许我们以顺序的方式编写异步代码,而不是嵌套的回调函数或者复杂的线程管理代码。原创 2024-01-04 09:40:37 · 1344 阅读 · 0 评论 -
基于ExoPlayer的缓存方案实现
AndroidVideoCache 的原理是通过代理的策略实现一个中间层,将网络视频请求转移到本地实现的代理服务器上,这样真正请求的数据就会被代理拿到,然后代理一边向本地写入数据,一边根据需要的数据看是读网络数据还是读本地缓存数据,从而实现数据的复用。音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。下面是 CacheDataSource 改之后的代码,这个是我们内部播放框架的一部分,框架暂时没有开源计划,所以我把CacheDataSource相关的代码上传了。原创 2024-01-02 19:26:30 · 1763 阅读 · 0 评论 -
Android App从备案到上架全过程
不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改不让更新,明年再不整改就面临下架风险。如果是一个新的 App 如何从新开始上架需要经历那些步骤,会踩到哪些坑?总的来说,主要会涉及以下步骤:域名备案,IPC备案,App网安备案,隐私协议检测,然后上架各大应用市场的隐私检测,证件查验,功能确认等。原创 2024-01-02 11:10:33 · 1105 阅读 · 1 评论 -
Mac搭建Frida逆向开发环境
Frida是一种基于Python+JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域,本质是一种动态插桩技术。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施实现应用程序进行逆向分析。原创 2023-12-13 10:57:46 · 2690 阅读 · 0 评论 -
H265、VP9、AV1视频编码器性能对比
目前在视频编解码器中,H264 已经成为绝对的主流,被大部分设备、浏览器所支持。虽然有更先进的编码器推出,但是受限于推广速度和设备支持成本,一直未能成为主流。今年公司的目标是持续降本增效,现在将”屠刀“指向了视频业务的存储成本。视频文件存储主要两块指标:存储本身和 CDN 资源。对于历史比较旧的数据会用更低成本的存储方式备份存储。目前主要想优化存储本身的成本。原创 2023-12-02 09:32:52 · 5231 阅读 · 0 评论 -
Android应用上架Google Play
近年来,越来越多的开发者和企业把目光聚焦于海外,寻求新的增长机会。而 Google Play 作为海外最大的分发平台,拥有 25 亿台活跃 Android 设备,这无疑是应用最好的展示舞台。本文结合真实的上架经历讲解如何在Google Play从0上架一款海外的Android应用。正式开始之前,我们需要准备如下的一些东西:Google 帐号Visa/MasterCard 信用卡身份证照片手机号(支持国内)原创 2023-11-27 09:12:19 · 1088 阅读 · 0 评论 -
Android Gradle 升级到7.x及Maven推送问题
然后,在Android Studio的Gradle中双击【publishReleasePublicationToNexusRepository】发布到Maven仓库,成功之后就可以在Maven仓库中看到aar包,如下图。以下是upload_release.gradle文件Gradle 7.0及以上版本的升级的写法,仅供参考。然后,在工程或者模块的主build.gradle中引入upload_release.gradle。7.0以下的Android插件工程使用Maven上传时脚本如下所示。原创 2023-11-24 15:12:53 · 1058 阅读 · 0 评论 -
Ubuntu22.04 编译 AOSP
根据您的需求和目标设备,您可以进行定制和配置,以满足特定的开发需求。请注意,AOSP 编译需要较高的系统配置和较大的存储空间,确保您的系统满足这些要求。其中,target是您要构建的目标设备。6,等待编译完成:AOSP 编译过程可能需要一些时间,具体时间取决于您的系统性能和网络状况。1, 更新系统:首先,确保您的 Ubuntu 22.04 系统已经更新到最新版本。5,构建 AOSP:在进行 AOSP 编译之前,根据您的目标设备选择合适的目标。2,安装必要的软件包:AOSP 编译需要一些依赖软件包。原创 2023-11-21 14:52:14 · 863 阅读 · 0 评论 -
Mac系统 AndroidStudio Missing essential plugin:org.jetbrains.android报错
打开Android Studio,提示 Missing essential plugin:org.jetbrains.android错误,产生的原因是Kotlin被禁用。然后删除disabled_plugins.txt文件即可。原创 2023-09-11 16:21:15 · 626 阅读 · 0 评论 -
Android Gradle 7.x升级指南
最近,升级了一下Android项目的Gradle和targetSdkVersion,本文以升级targetSdkVersion 33和Gradle 7.2进行说明。原创 2023-08-21 22:31:22 · 2027 阅读 · 1 评论 -
移动组件化架构开发与实战
个人认为并不存在一个完美的架构,我们自身的组织架构、业务、人员都在变动,架构也需要随着这个过程进行适当的调整和重构,最重要的是我们能及时发现架构中存在的问题并且有意愿 / 能力去调整避免一直堆积变成更大的技术债务。同时工程架构的改变也会一定程度的改变开发人员的分工,对于大型工程来讲组件化的程度更高,每个开发人员的工作分工会更细。对于底层基础组件的开发,需要提供更多高性能 / 高质量的基础组件让上层业务开发人员更加效率的支撑业务,技术深度也会更加深入。原创 2023-08-07 11:05:27 · 218 阅读 · 0 评论 -
Beacon低功耗蓝牙基本使用
iBeacon是基于Android的低功耗蓝牙BLE,和蓝牙不同的是iBeacon不用配对和连接过程,iBeacon基站通过BLE蓝牙的广播频道不断向外发送位置信息,当智能设备进入设定区域时,只要满足iBeacon技术标准,不需要连接就能够收到信号。事实上,IBeacon最早的提出是苹果公司,它们在2013年9月发布的移动设备上就已经使用了IBeacon技术,随后,许多组织开始着力开发蓝牙 Beacon 试点项目,到 2015 年,已经有许多公司开始尝试利用部署好的蓝牙 beacon 探索新的服务模式。原创 2023-07-18 13:55:03 · 1008 阅读 · 0 评论 -
华为Harmony应用开发初探
HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。HarmonyOS提供了支持多种开发语言的API,供开发者进行应用开发。原创 2023-07-08 21:54:06 · 1604 阅读 · 0 评论 -
Android项目中接入 Lint代码规范
自定义 Lint 规则最终都会打成 JAR 包,只需将该输出 JAR 提供给其他组件使用即可。目前有两种方式可供选择:全局方案和aar方案。首先,我们需要创建一个java的module,用来实现自定义lint规则,需要引入lint相关的依赖。原创 2023-06-26 14:30:43 · 509 阅读 · 0 评论 -
Android App出海全解析
当前,国内各个公司 APP 出海创收已经是互联网行业的常见操作,本文将对海外 APP 一些开发经验做一些分享。我们的最终目标是,尽量保持原有的技术框架去开发新的 APP,不要因为运营环境变了,技术架构也大改。同时,Android APP 的发布渠道和发布格式。海外 Android 应用以 Google Play 上架发布为主,这里我们需要额外支持 aab(android app bundle) 格式进行发布。转载 2023-06-24 09:13:26 · 496 阅读 · 0 评论 -
Frida技术:App逆向开发屠龙刀
Frida是一种基于JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施,可以助力于对应用程序进行逆向分析。Frida不需要依赖于任何特殊的工具或设备,只需要在目标设备上安装Frida服务器,就可以使用Frida客户端与之通信。原创 2023-06-14 15:12:44 · 2153 阅读 · 0 评论 -
Android Gradle plugin requires Java 11解决方案
需要注意gradle的Java版本并非AndroidStudio工程依赖的Java版本。原创 2023-05-24 16:09:58 · 1043 阅读 · 0 评论 -
JetPack WindowManager详解
使用Jetpack Startup库在加载应用的其他组件和启动 activity 之前执行初始化。原创 2023-05-09 09:35:38 · 676 阅读 · 0 评论 -
Android 换肤指南
这种方案根前面 hook LayoutInflator 的自动替换视图 的方案差不多。不过,这种方案不需要做 hook,而是对应用的内常用的控件全部做一边自定义。自定义控件内部监听换肤的事件。当自定义控件接收到换肤事件的时候,自定义控件内部触发换肤逻辑。不过这种换肤的方案相对于上述通过 hook LayoutInflator 的方案而言,可控性更好一些。原创 2023-04-21 17:50:08 · 777 阅读 · 0 评论