xiangzhihong8
著有《React Native移动开发实战》1,2,3版本、《Kotlin入门与实战》1,2版本、《Weex跨平台开发与实战》、《React Native开发进阶》和《Flutter跨平台开发实战》和《Android应用架构实战》,《鸿蒙应用开发与实战》即将出版
展开
-
Android单元测试实践
JUnit是一个Java语言的单元测试框架。Junit测试是程序员测试,即所谓白盒测试,因为我们知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。原创 2024-05-22 16:19:26 · 425 阅读 · 0 评论 -
点击短信链接唤起Android App实战
在很多业务场景中,需要点击短信链接跳转到App的指定页面。在Android系统中,想要实现这个功能,可以通过DeepLink或AppLink实现。原创 2024-05-09 23:09:04 · 452 阅读 · 0 评论 -
Android性能优化面试题
Android的性能优化涉及多个方面,如启动优化、稳定性优化、内存优化、网络优化、电量优化、安全优化等方面。原创 2024-04-30 09:30:07 · 96 阅读 · 0 评论 -
Android性能优化面试题汇总
Android的性能优化涉及多个方面,如启动优化、稳定性优化、内存优化、网络优化、电量优化、安全优化等方面。原创 2024-04-29 10:10:06 · 207 阅读 · 0 评论 -
Android车载开发之AAOS快速入门
在正式介绍Android Automotive OS之前,我们先弄清两个概念:Android Auto和Android Automotive OS。原创 2024-03-04 17:56:49 · 415 阅读 · 0 评论 -
Android 车载应用开发之SystemUI 详解
SystemUI全称System User Interface,直译过来就是系统级用户交互界面,在 Android 系统中由SystemUI负责统一管理整个系统层的 UI,它是一个系统级应用程序(APK),源码在/frameworks/base/packages/目录下,而不是在/packages/目录下,这也说明了SystemUI这个应用的本质上可以归属于framework层。原创 2024-02-16 09:33:43 · 530 阅读 · 0 评论 -
Android 车载应用之快速入门
车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。原创 2024-02-11 22:23:30 · 615 阅读 · 0 评论 -
Android 车载应用开发之车载操作系统
在智能网联汽车产业大变革趋势下,汽车逐步由传统的交通工具向同时具有交通、娱乐、办公、通信等多种功能的新一代智能移动空间和应用终端迁移。实现能网联功能的驾驶辅助系统、车联网系统以及智能座舱系统相关电子设备逐步成为汽车电子产业研发应用的重点。从功能层面来看,汽车电子主要可以分为车身电子控制系统和车载电子装置两大类别。车身电子控制系统: 通过直接向执行机构(如电子阀门、继电器开关、执行马达)发送指令,以控制车辆关键部件(如发动机、变速箱、动力电池)协同工作,也被称为电子控制单元(ECU);原创 2024-02-08 23:07:27 · 1097 阅读 · 0 评论 -
LiveData 迁移到 Kotlin Flow详解
使用 WhileSubscribed 策略,公开一个带有超时的 StateFlow。[示例]使用 repeatOnLifecycle 收集。示例使用 WhileSubscribed 公开,并在 lifecycleScope.launch/launchWhenX 中收集使用 Lazily/Eagerly 公开,并使用repeatOnLifecycle 收集。原创 2024-02-04 20:07:56 · 606 阅读 · 0 评论 -
腾讯,快手,滴滴等10家大厂Android面试题
现在Android开发的现状大致是这个样子,人才严重过饱和,加上跨端和小程序盛行,原生客户端(安卓 iOS)岗位进一步萎缩,入行之后就业极为困难。目前行情是移动端严重过剩,服务端供需平衡,前端供不应求。市场上前端工作好找,服务端职业上限整体较高。。客户端上百人抢一个工作岗位,竞争激烈,内卷惨烈。客户端开发整体水平较低,大量培训出来的开发者,简历包装两三年就能出来找到一份CV的工作,起薪就可以超过大部分人,所以这也是造成人员过剩的一个条件,人员过剩不可避免地就会导致公司的要求变高,福利变少等一系列问题。原创 2024-01-11 16:48:54 · 214 阅读 · 0 评论 -
使用Android 协程代替Handler
协程是一种轻量级的线程框架,它允许开发者以顺序的方式编写异步代码,而无需关心线程的管理和同步问题。协程的概念最早出现在 Erlang 语言中,后来被其他编程语言引入。Kotlin 协程是基于 JVM 的一种协程实现,它允许开发者以同步的方式编写异步代码,并且可以与现有的异步框架(例如 Retrofit、Room 等)很好地集成。简化异步代码:协程允许我们以顺序的方式编写异步代码,而不是嵌套的回调函数或者复杂的线程管理代码。原创 2024-01-04 09:40:37 · 1145 阅读 · 0 评论 -
基于ExoPlayer的缓存方案实现
AndroidVideoCache 的原理是通过代理的策略实现一个中间层,将网络视频请求转移到本地实现的代理服务器上,这样真正请求的数据就会被代理拿到,然后代理一边向本地写入数据,一边根据需要的数据看是读网络数据还是读本地缓存数据,从而实现数据的复用。音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。下面是 CacheDataSource 改之后的代码,这个是我们内部播放框架的一部分,框架暂时没有开源计划,所以我把CacheDataSource相关的代码上传了。原创 2024-01-02 19:26:30 · 1449 阅读 · 0 评论 -
Android App从备案到上架全过程
不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改不让更新,明年再不整改就面临下架风险。如果是一个新的 App 如何从新开始上架需要经历那些步骤,会踩到哪些坑?总的来说,主要会涉及以下步骤:域名备案,IPC备案,App网安备案,隐私协议检测,然后上架各大应用市场的隐私检测,证件查验,功能确认等。原创 2024-01-02 11:10:33 · 944 阅读 · 1 评论 -
Mac搭建Frida逆向开发环境
Frida是一种基于Python+JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域,本质是一种动态插桩技术。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施实现应用程序进行逆向分析。原创 2023-12-13 10:57:46 · 2160 阅读 · 0 评论 -
H265、VP9、AV1视频编码器性能对比
目前在视频编解码器中,H264 已经成为绝对的主流,被大部分设备、浏览器所支持。虽然有更先进的编码器推出,但是受限于推广速度和设备支持成本,一直未能成为主流。今年公司的目标是持续降本增效,现在将”屠刀“指向了视频业务的存储成本。视频文件存储主要两块指标:存储本身和 CDN 资源。对于历史比较旧的数据会用更低成本的存储方式备份存储。目前主要想优化存储本身的成本。原创 2023-12-02 09:32:52 · 4367 阅读 · 0 评论 -
Android应用上架Google Play
近年来,越来越多的开发者和企业把目光聚焦于海外,寻求新的增长机会。而 Google Play 作为海外最大的分发平台,拥有 25 亿台活跃 Android 设备,这无疑是应用最好的展示舞台。本文结合真实的上架经历讲解如何在Google Play从0上架一款海外的Android应用。正式开始之前,我们需要准备如下的一些东西:Google 帐号Visa/MasterCard 信用卡身份证照片手机号(支持国内)原创 2023-11-27 09:12:19 · 950 阅读 · 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 · 900 阅读 · 0 评论 -
Ubuntu22.04 编译 AOSP
根据您的需求和目标设备,您可以进行定制和配置,以满足特定的开发需求。请注意,AOSP 编译需要较高的系统配置和较大的存储空间,确保您的系统满足这些要求。其中,target是您要构建的目标设备。6,等待编译完成:AOSP 编译过程可能需要一些时间,具体时间取决于您的系统性能和网络状况。1, 更新系统:首先,确保您的 Ubuntu 22.04 系统已经更新到最新版本。5,构建 AOSP:在进行 AOSP 编译之前,根据您的目标设备选择合适的目标。2,安装必要的软件包:AOSP 编译需要一些依赖软件包。原创 2023-11-21 14:52:14 · 595 阅读 · 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 · 475 阅读 · 0 评论 -
Android Gradle 7.x升级指南
最近,升级了一下Android项目的Gradle和targetSdkVersion,本文以升级targetSdkVersion 33和Gradle 7.2进行说明。原创 2023-08-21 22:31:22 · 1763 阅读 · 1 评论 -
详解Android刘海屏适配
Apple一直在引领设计的潮流,自从 iPhone X 发布之后,”刘海屏” 就一直存在争议,本以为是一个美丽的错误(Bug),却早就了一时间“刘海屏”的模仿潮。目前,国内已经推出的刘海屏”手机有 OPPO R15 和 华为 P20,并且Google也在IO大会上提高了相应的适配方案。什么是刘海屏屏幕的正上方居中位置(下图黑色区域)会被挖掉一个孔,屏幕被挖掉的区域无法正常显示内容,这种...原创 2018-05-15 08:17:31 · 49123 阅读 · 22 评论 -
移动组件化架构开发与实战
个人认为并不存在一个完美的架构,我们自身的组织架构、业务、人员都在变动,架构也需要随着这个过程进行适当的调整和重构,最重要的是我们能及时发现架构中存在的问题并且有意愿 / 能力去调整避免一直堆积变成更大的技术债务。同时工程架构的改变也会一定程度的改变开发人员的分工,对于大型工程来讲组件化的程度更高,每个开发人员的工作分工会更细。对于底层基础组件的开发,需要提供更多高性能 / 高质量的基础组件让上层业务开发人员更加效率的支撑业务,技术深度也会更加深入。原创 2023-08-07 11:05:27 · 155 阅读 · 0 评论 -
Beacon低功耗蓝牙基本使用
iBeacon是基于Android的低功耗蓝牙BLE,和蓝牙不同的是iBeacon不用配对和连接过程,iBeacon基站通过BLE蓝牙的广播频道不断向外发送位置信息,当智能设备进入设定区域时,只要满足iBeacon技术标准,不需要连接就能够收到信号。事实上,IBeacon最早的提出是苹果公司,它们在2013年9月发布的移动设备上就已经使用了IBeacon技术,随后,许多组织开始着力开发蓝牙 Beacon 试点项目,到 2015 年,已经有许多公司开始尝试利用部署好的蓝牙 beacon 探索新的服务模式。原创 2023-07-18 13:55:03 · 801 阅读 · 0 评论 -
华为Harmony应用开发初探
HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。HarmonyOS提供了支持多种开发语言的API,供开发者进行应用开发。原创 2023-07-08 21:54:06 · 1535 阅读 · 0 评论 -
Android项目中接入 Lint代码规范
自定义 Lint 规则最终都会打成 JAR 包,只需将该输出 JAR 提供给其他组件使用即可。目前有两种方式可供选择:全局方案和aar方案。首先,我们需要创建一个java的module,用来实现自定义lint规则,需要引入lint相关的依赖。原创 2023-06-26 14:30:43 · 413 阅读 · 0 评论 -
Android App出海全解析
当前,国内各个公司 APP 出海创收已经是互联网行业的常见操作,本文将对海外 APP 一些开发经验做一些分享。我们的最终目标是,尽量保持原有的技术框架去开发新的 APP,不要因为运营环境变了,技术架构也大改。同时,Android APP 的发布渠道和发布格式。海外 Android 应用以 Google Play 上架发布为主,这里我们需要额外支持 aab(android app bundle) 格式进行发布。转载 2023-06-24 09:13:26 · 305 阅读 · 0 评论 -
Frida技术:App逆向开发屠龙刀
Frida是一种基于JavaScript的动态分析工具,可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码,从而进行动态分析、调试、修改等操作,能够绕过应用程序的安全措施,可以助力于对应用程序进行逆向分析。Frida不需要依赖于任何特殊的工具或设备,只需要在目标设备上安装Frida服务器,就可以使用Frida客户端与之通信。原创 2023-06-14 15:12:44 · 2046 阅读 · 0 评论 -
Android Gradle plugin requires Java 11解决方案
需要注意gradle的Java版本并非AndroidStudio工程依赖的Java版本。原创 2023-05-24 16:09:58 · 879 阅读 · 0 评论 -
JetPack WindowManager详解
使用Jetpack Startup库在加载应用的其他组件和启动 activity 之前执行初始化。原创 2023-05-09 09:35:38 · 552 阅读 · 0 评论 -
Android 换肤指南
这种方案根前面 hook LayoutInflator 的自动替换视图 的方案差不多。不过,这种方案不需要做 hook,而是对应用的内常用的控件全部做一边自定义。自定义控件内部监听换肤的事件。当自定义控件接收到换肤事件的时候,自定义控件内部触发换肤逻辑。不过这种换肤的方案相对于上述通过 hook LayoutInflator 的方案而言,可控性更好一些。原创 2023-04-21 17:50:08 · 663 阅读 · 0 评论 -
Android Crash 前的最后抢救
那么如果我们设置了自定义处理器,在里面只做一些打印日志的操作,而不是退出应用,是不是就可以让 app 永不崩溃了呢?原创 2023-04-14 11:36:02 · 298 阅读 · 0 评论 -
KMM 跨平台移动 App 开发探索与实践
我对跨平台技术产生兴趣始于16 年左右,大约在 Swift 语言刚推出不久。那时,我们在做创新类 APP 方面很活跃,我做了一个类似于云控的模块,云控模块估计在许多 APP 上都存在。原创 2023-04-04 17:48:10 · 1114 阅读 · 1 评论 -
2022 年度Android最“不可赦”漏洞
之后,该 App 进一步使用其他黑客技术手段,突破系统沙箱机制、绕开权限系统改写系统关键配置文件为自身保活(注:保持进程持续活跃),修改用户桌面配置隐藏自身或欺骗用户实现防卸载,通过多种操作实现更加隐蔽的长期驻留,甚至还实现了和间谍软件一样的“云控开关”遥控机制,来躲避安全检测。理论上来讲,匹配序列化和反序列化函数应当是自反等效的,但系统 ROM 的开发者在编程过程中可能会出现不匹配的情况,例如写入的时候使用了 writeLong,读取的时候却使用了 readInt。原创 2023-03-07 10:33:12 · 472 阅读 · 0 评论 -
Android耗电分析之Battery Historian工具使用
Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌在2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具,是一款对于分析手机状态,历史运行情况很好的可视化分析工具。原创 2023-02-02 19:30:50 · 654 阅读 · 1 评论 -
Android 开发中的SSL pinning
在日常的安全渗透过程中,我们经常会遇到瓶颈无处下手,这时候如果攻击者从APP进行突破,往往会有很多惊喜。但是目前市场上的APP都会为防止别人恶意盗取和恶意篡改进行一些保护措施,比如模拟器检测、root检测、APK加固、代码混淆、代码反调试、反脱壳、签名校验等等对抗机制。而测试人员对APP进行渗透的首步操作通常就是上burp或者Charles这类抓包工具进行抓包,查看请求记录里的域名及链接地址是否可以进一步利用。我们都知道http协议传输的是明文信息,是可以直接捕获的,从而造成了数据泄露。原创 2022-12-17 17:19:30 · 884 阅读 · 1 评论 -
Android App 如何防止抓包
在软件开发中,常用的抓包方式有 Charles 、 Fiddler和Burp,它们通过在手机网络中添加代理的方式,然后安装信任证书,接着就可以在 App 请求的时候拿到请求数据。不过,这也可能导致一些安全问题,所以对于我们通常的处理方式是,对于线上运行的包,需要防止这些抓包手段。原创 2022-12-13 14:32:15 · 4791 阅读 · 0 评论 -
Android桌面图标快捷方式
长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。现在,长按桌面图标快捷方式已经是很成熟的功能,实现上也比较简单,主要用到的Api就是ShortcutManager。而在具体实现方案上,Android 又给出了两种实现方式,一种是静态,一种是动态。静态方式需要使用xml资源,以shortcuts标签的形式引入。对于静态方式,我们首先需要在res目录的xml目录原创 2022-12-08 11:35:23 · 1335 阅读 · 1 评论 -
Android网络安全配置network-security-config区分正式服和测试服
在Android开发中,为了帮助测试人员进行抓包,一般都会在Android的AndroidManifest.xml文件中配置network_security_config。不过,这也带来了一些安全性的问题,所以我们通常的策略是:线上的版本不支持抓包,测试版本支持抓包即可。为此,我们需要单独为正式服和测试服单独的进行配置。通常,network_security_config.xml 文件配置如下:然后,在AndroidManifest.xml里的标签中添加代码。为了实现在测试、开发阶段可以抓包,但正式发布原创 2022-12-07 13:54:05 · 2481 阅读 · 0 评论 -
Android Jetpack Compose快速上手
Jetpack Compose是Google推出的一个用于构建原生Android 界面的工具包,旨在帮助开发者更快、更轻松地在Android 平台上构建原生客户端应用。同时,作为全新的声明式的UI框架,Jetpack Compose可以使用声明式Kotlin API取代Android 传统的xml布局。那什么是声明式呢?要搞清楚这个问题,我们需要布局开发中的另外一个概念:命令式。事实上,传统的使用xml布局方式就是命令式。原创 2022-10-04 11:44:19 · 1028 阅读 · 0 评论 -
Android应用接入ApmInsight APM
有统计显示,性能问题是导致用户流失的重要原因之一。如果用户在使用App的过程中出现诸如应用崩溃、页面卡顿、响应速度慢、发热严重、流量电量消耗大等问题时,很有可能就会卸载掉App。而目前获客成本是非常高昂的,因此为了避免因为性能问题导致用户流失的情况,我们需要搭建一套移动性能监控平台,然后再使用其他的技术及时的修复这些线上问题。原创 2022-09-28 14:23:43 · 3149 阅读 · 0 评论