ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Android Weekly 202516:环境搭建、系统底层与硬件交互热点

Android Weekly 202516:环境搭建、系统底层与硬件交互热点 Android Weekly 202516本周开发者社区最值得聊的几个技术方向又到了每周做技术梳理的时间。我习惯在每个周末花半天时间把这一周 Android 社区里大家集中讨论的问题过一遍这期编号是 202516也就是 2025 年第 16 周。说起来这周的热搜词分布很有意思从 Android Studio 安装、SDK 组件报错这类入门级问题到差分包制作、APEX 机制、内核 BSP 开发这样的系统底层话题跨度相当大。这种“两头热”的现象其实挺能反映当前 Android 生态的真实状态新人在往坑里踩老手在往深水区潜而中间层级的开发者则更多在 UI 交互、设备能力这些实际业务场景里反复打磨。这期我就按自己的理解把这些散落的热词整理成几条主线聊聊每个方向背后真正值得关注的技术点。这份梳理不是单纯列一堆链接而是我基于自己的实践经验和社区讨论总结出的“本周技术重点”。不管你是刚装好 Android Studio 准备写第一个 Demo 的新手还是已经在搞 Framework 定制、系统编译的老兵应该都能从里面找到自己关心的那部分内容。1. 本周热词全景开发者们到底在关心什么先看一下这周热搜词的整体分布。我把它们大致归成了几类工具链与 IDE 配置、系统底层与编译、UI 交互与视觉、硬件能力调用以及数据与文件操作。工具链这一块的热度最高尤其是 Android Studio 相关的各种问题。安装教程、下载地址、官网入口、SDK 组件安装失败、Gradle 下载慢、汉化设置、连接小米手机真机调试这些词几乎把“一个新手从零搭建开发环境”的全过程都覆盖了一遍。这说明每周都有大量新开发者涌入 Android 生态而且他们在环境搭建阶段遇到的痛点非常集中。你可能会觉得这些问题太基础了但恰恰是这些“基础问题”如果没处理好会直接劝退一批刚入门的开发者。系统底层方向的热词同样不少像“android framework”、“android 10.0 根文件系统和编译系统”、“mtk_unisoc 平台 arm64 android 内核与 BSP 开发”、“android apex”、“差分包 imgdiff 崩溃”。这些词透露出的信息是不少开发者已经不再满足于只写应用层代码而是往系统定制、ROM 开发、平台适配的方向走。尤其是“mtk_unisoc 平台”这种关键词明显是来自手机厂商或方案公司的开发者他们处理的是芯片平台适配这类更硬核的问题。UI 和交互方向的话“协调布局 banner”、“进度条”、“动态图标主题”、“拍照识别边框”这些词出现频率也比较高。这类需求在实际业务开发里特别常见属于那种“看着简单做起来处处是细节”的类型。硬件能力这边“蓝牙开发”、“麦克风声强计”、“手势识别与 MediaPipe”也占了一定比例说明越来越多的应用开始调用设备底层传感器和外设能力这也符合移动端应用越来越“重体验”的趋势。把整份热词列表扫完我最大的感受是Android 开发已经是一个非常成熟的生态从工具链到系统层再到应用层每一环都有大量资料和踩坑记录但同时也意味着你需要花大量时间去筛选和验证信息。这期周刊就是帮你把这一周最有价值的内容挑出来、捋顺让你不用自己把每个坑都踩一遍。2. Android Studio 环境搭建从安装、汉化到 SDK 组件的连环坑2.1 安装、官网与 SDK 组件安装失败的真相这周关于“android studio 下载”、“android studio 官网”的搜索量依然很高说明很多新人还没有找到靠谱的获取渠道。这里我直接说结论Android Studio 的官方下载地址是 developer.android.com 下的 studio 专区国内开发者如果访问官方站点速度不理想可以去一些可信的镜像站下载安装包。千万不要随便在第三方网站下载所谓“破解版”或“绿色版”这些版本很可能被植入恶意代码而且 Google 官方对 IDE 的使用并没有额外的收费机制用官方原版就是合法且安全的选择。安装完成之后这周有一个报错信息特别值得单独拿出来讲“The following SDK component was not installed: android-sdk build-tools 37”。这个报错的意思是 SDK 管理器在下载 Build Tools 37 时失败了常见原因包括网络连接不稳定、SDK 目录权限不足或者之前的部分下载文件残留导致校验失败。我建议的处理步骤是先打开 Android Studio 的 SDK Manager找到对应版本的 Build Tools勾选后点“Apply”重新安装一次。如果还是失败就手动去 SDK 管理器的安装日志目录Android Studio 的日志目录一般在用户主目录下的 .android 文件夹里看具体是哪一个文件的下载出了问题。还有一个更稳妥的离线方案直接去 Google 的 Maven 仓库或 SDK 镜像站把对应版本的 build-tools 压缩包下载下来解压后放到 SDK 目录下的 build-tools 文件夹里然后在 SDK Manager 里点击“Refresh”让它识别到已经存在的组件。这个办法我用了很多次基本能解决 90% 以上的组件安装失败问题。2.2 Gradle 下载慢“每次新建项目都要下载 Gradle”的破解思路“android studio 每次新建项目都要下载 gradle”也是这周的热词。这个问题看似只是“下载慢”背后却涉及 Gradle 与 Android Gradle PluginAGP版本匹配机制。Gradle 本身是一个独立的构建工具Android Studio 会把不同版本的 Gradle 缓存在用户主目录下的 .gradle/wrapper/dists 目录中。新建项目时如果项目的 gradle-wrapper.properties 里指定的 Gradle 版本在本地缓存中不存在IDE 就会自动去 services.gradle.org 下载导致“每次新建都要下载”的错觉。要解决这个问题第一步是配置镜像源。国内使用腾讯、阿里云等镜像站替换默认的 Gradle 分发地址是常见做法。修改方式是在项目的 gradle-wrapper.properties 文件里将 distributionUrl 改为镜像地址例如腾讯镜像的格式是“https://mirrors.cloud.tencent.com/gradle/gradle-版本号-bin.zip”。第二步把常用的 Gradle 版本一次性下载好手动放到 .gradle/wrapper/dists 目录下这样后续新建项目只要指定的版本不变就不会重复下载。还有一个高频问题“intellij idea android 离线插件下载”其实类似。如果你在的网络环境无法直接访问插件市场可以去 JetBrains 插件仓库的网页端手动下载插件压缩包然后在 IDEA/Android Studio 的“Settings - Plugins - 设置图标 - Install Plugin from Disk”里选择本地文件安装。2.3 汉化与中文化配置注意事项“android studio 怎么设置中文”和“android studio 汉化”连续出现在热词里说明很多国内开发者更习惯中文界面。Android Studio 基于 IntelliJ IDEA汉化方案有两种一种是在插件市场安装“Chinese Language Pack”插件另一种是下载离线语言包。安装中文插件本身不难但有一个问题容易被忽略汉化插件有时会和 IDE 版本不匹配导致菜单栏出现显示异常甚至部分设置界面文字重叠。遇到这种情况可以在插件市场里查看该插件是否标注“兼容版本范围”如果 IDE 版本比较新而插件还没更新就建议暂时等一等或者先用英文界面避免为了汉化引入新的不稳定因素。我个人其实不太建议新人在刚接触 Android Studio 时就用中文界面原因是市面上的绝大多数教程、官方文档、Stack Overflow 回答都以英文术语为主。如果你对“Build”、“Run”、“Project Structure”这些基础英文单词的界面都不熟悉后面查资料时会很难对应上。但如果你英文确实有困难装个汉化包也完全可以等技术熟练后再切回英文过渡成本不高。2.4 连接小米手机真机调试的完整流程这周还有一条热词是“android studio 如何连接小米手机”。小米手机连接 Android Studio 调试核心有三件事开启开发者选项和 USB 调试、设置 USB 连接模式为“文件传输”、在设备上确认调试授权。第一步连续点击 MIUI 版本号七次可开启开发者模式然后在“更多设置”里找到“开发者选项”打开“USB 调试”。“USB 调试安全设置”也建议开启允许通过 USB 安装应用。第二步用数据线连接电脑后在手机通知栏把 USB 模式从“仅充电”切到“文件传输”这一步经常有人忘记。第三步Android Studio 会弹出“允许 USB 调试吗”的对话框勾选“始终允许”并确认。如果你执行完以上步骤后设备列表中还是看不到手机一般是因为缺少驱动。小米手机驱动可以在小米官方的“小米助手”里安装也可以到设备管理器里手动更新 ADB 接口驱动。还有一个常见原因是 USB 数据线质量太差只支持充电不支持数据传输换一根原装线往往就能解决。3. UI 交互实践协调布局、进度条与动态主题的细节处理3.1 协调布局与 Banner 组合的常见实现方式热词“android 中协调布局 banner”指的应该是 CoordinatorLayout 与横幅轮播图结合的场景。CoordinatorLayout 是 AndroidX 里一个强大的容器它本身并不负责绘制任何视觉元素而是通过协调子 View 之间的依赖关系来响应滚动事件典型应用就是“上滑时标题栏淡出、下滑时标题栏浮现”。Banner 控件比如 ViewPager2 或第三方轮播库嵌在 CoordinatorLayout 里时一个常见痛点是Banner 滑动和页面纵向滑动的手势冲突。解决思路是给 Banner 设置自定义的触摸拦截逻辑或者在 NestedScrollView/RecyclerView 中正确设置嵌套滚动标志保证横向滑动的操作都交给 Banner纵向滑动的操作都交给外层滚动容器。这里要特别提醒不要把 Banner 高度写得过大否则在协调布局中做滚动塌陷效果时会显得很生硬。建议 Banner 高度按屏幕宽度比例计算在代码里通过 DisplayMetrics 动态设置以适配不同尺寸设备。从实践角度讲我建议新项目少用重度的第三方 Banner 轮播库因为很多库维护状态不活跃内部嵌套的 ViewPager 版本可能和项目冲突。基于 ViewPager2 RecyclerView.Adapter 自己封装一个简易轮播控件配合 Handler 的延时循环或者 Lifecycle 感知的自动轮播逻辑代码量并不大且后续加点击事件、指示器动画都更可控。3.2 自定义进度条从基础属性到样式扩展“android 进度条”这个热词看似基础但实际开发中涉及的点不少。系统自带的 ProgressBar 只能满足最简单的加载场景想做出符合品牌风格的进度条一般需要自定义 Drawable 或直接自定义 View。如果你只是想改变颜色和高度最简单的方式是在 XML 里给 ProgressBar 设置自定义进度 Drawable通过 ClipDrawable 实现进度填充效果。比如做一个圆角矩形进度条可以定义三层 Drawable背景层、进度条层、圆角遮罩层然后通过 LayerDrawable / ClipDrawable 结合实现。如果你的进度条还附带文字、动画插值、分段颜色变化等需求那就直接继承 View 自己绘制关键是处理好 onMeasure 和 onDraw避免在绘制过程中频繁创建对象引发卡顿。一个真实项目里常见的坑是进度条出现在列表复用的 item 中更新进度时没有处理好 ViewHolder 的当前绑定状态导致进度错乱。解决办法是使用数据绑定或在 onBindViewHolder 中基于当前 position 更新 UI并配合 ListAdapter 的 DiffUtil 避免不必要的刷新。3.3 动态图标主题与快捷方式图标更新“android 动态图标主题”大概率指的不是系统桌面主题而是应用内根据用户选择或节日氛围去动态切换 App Icon也就是普通快捷方式图标的技术。Android 7.1API 25之后系统提供了 AdaptiveIcon自适应图标同时支持通过 Activity 的 alias 方式切换图标。使用 alias 切换图标的原理是在 AndroidManifest 中为同一个 Activity 配置多个 alias每个 alias 指向不同的 icon 和 label然后通过 PackageManager.setComponentEnabledSetting 把当前要显示的组件设为“启用”状态其他设为“禁用”。注意图标切换并不是即时的系统桌面可能需要过一会儿或者重启启动器才能刷新需要在代码里处理这种延迟。从做产品角度来说动态切换图标功能本身门槛不高真正难的是美术侧要提供多套图标资源以及适配 Android 13 之后的主题图标Themed Icons系统。如果要做我建议把图标资源做成自适应图标格式确保在各类启动器上显示不被裁切或变形。3.4 拍照识别边框相机画面中的边缘检测思路“android 拍照识别边框”这个需求通常出现在文档扫描、卡片识别类应用里。实现方案常见有两种一种是拍完照片后用 OpenCV 做边缘检测和四边形透视矫正另一种是在相机预览阶段实时分析画面把识别到的边框实时绘制在预览层上。实时检测的流程大致是通过 CameraX 的 ImageAnalysis 接入相机帧将 YUV 格式的数据转为 Bitmap 或直接的灰度数据然后用 Canny 边缘检测算子找出轮廓再用轮廓查找和近似多边形拟合来定位最大的四边形区域。计算量要想办法压缩建议先把相机帧缩放到较小的分辨率去分析比如宽 320、高 240这样可以大幅降低延时。从实战经验来看光线环境是这种功能最大的不稳定因素。光线太暗时边缘不明显光线太强时反光也会导致轮廓断裂。建议在流程中加一个“环境光亮度判断”的步骤提示用户到光线均匀的环境下拍摄同时在后处理阶段对识别到的四边形顶点做平滑和锚定避免连续帧之间边框跳来跳去。4. 系统底层视角Framework、编译系统与差分包那些事4.1 Framework 开发从应用层向下走的第一步这周“android framework”出现在热词里说明越来越多的开发者开始思考应用层 API 底下的实现逻辑。Framework 这个词的字面意思是“框架”但在 Android 语境里通常指系统框架层也就是从 Zygote 启动、SystemServer 加载各种系统服务如 ActivityManagerService、WindowManagerService、PackageManagerService 等到提供给应用开发者的各种 SDK API 这一大块区域。做 Framework 开发和做普通应用开发有几点本质不同第一Framework 代码运行在有更高权限的系统进程中许多在应用层被禁止的 API 或权限在系统进程中不受限制第二改动 Framework 往往意味着要重编整个系统镜像烧录到设备上才能生效调试循环比应用层长很多第三AOSP 上的 Framework 代码和手机厂商实际发布的固件有很大的定制差异你以为自己改的是“标准答案”实际上厂商早就加了几层私货。如果你是想入门 Framework我建议的路径是先熟悉 AOSP 的代码结构能快速找到核心服务的位置然后在一个模拟器或者二手 Pixel 设备上编译 AOSP哪怕是只编译 framework 模块把编译、烧录、验证这条链路跑通再选一个小而具体的点去改比如改系统通知的默认文案、调整 Recent 任务列表的布局。不要一开始就想着全面掌握那样容易劝退自己。4.2 Android 10.0 根文件系统与编译系统的关系“android 10.0 根文件系统和编译系统”这个搜索词看起来是在找 Android 10 版本下根文件系统的挂载划分和编译输出产物之间的关系。Android 使用动态分区dynamic partition之后system、vendor、product 等分区不再是独立的物理分区而是一个“超级分区”里的逻辑分区。编译产物则对应到 out/target/product/设备代号/ 目录下的 system.img、vendor.img、product.img 等镜像文件。编译系统方面AOSP 从 Android 7.0 之后默认使用 Soong 构建系统构建描述文件是 Android.bp。一个模块的编译声明就是一份 bp 文件里面写了模块名、srcs、依赖库、编译类型等属性。理解这种依赖关系很重要因为虽然编译系统会自动处理模块依赖但当你新增一个模块或改动依赖时如果 bp 文件里漏写了某个静态库或动态库的引用编译时会报 undefined reference 这类错误。这里有一个容易混淆的点Android 10 之后系统里很多可执行文件和库都被要求放在对应的分区里不能在 system 分区里随便放厂商私有的库否则会违反 VNDK 限制。给具体设备做定制开发时如果改动了 Framework 层并新增了 native 库要特别注意这些库应该放在 vendor 分区还是 system 分区以及是否要在 manifest 里添加对应的 VINTF 条目。这些细节在没有硬件环境打磨之前很难体会一旦烧到真机上出现“找不到符号”或者“服务无法启动”再回头查往往就是分区或依赖配置的问题。4.3 差分包制作与 imgdiff 崩溃的排查思路热词“android no-ab制作差分包 imgdiff 崩溃”看起来非常具体应该是有开发者在做系统升级差分包时遇到了问题。no-AB 指的是非 A/B 分区模式下制作增量升级包而 imgdiff 是 AOSP 中专门用来比较和生成镜像文件差分数据的工具。imgdiff 崩溃的直接原因通常是输入镜像文件太大或文件损坏。imgdiff 在处理大文件时需要一次性装载到内存如果设备或者编译服务器内存不足就很容易因内存溢出崩溃。另一个常见原因是输入文件格式不匹配imgdiff 对 ZIP、APK 这类有特殊处理逻辑对 ext4 镜像做纯字节级差分时如果算法选错了也会出现异常退出。我的经验是先确认你的编译环境是 64 位系统且有足够的可用内存建议至少在 8GB 以上其次确认要差分的两个镜像文件没有经过压缩或者已经解压到临时目录。如果 imgdiff 持续崩溃可以绕开它改用 bsdiff 或手工计算分区块的哈希来做差分。差分包生成本身就是一个计算密集的任务编译服务器慢一点很正常但如果频繁崩溃优先怀疑环境问题而不是代码问题。4.4 APEX 机制系统模块解耦的现代方案“android apex”这个热词值得单独讲一下。APEX 是 Android 10 引入的“APEX 容器”本质上是把系统原生模块例如 Runtime、一些系统库、媒体框架组件打包成一个类似 APK 的可更新单元让这些模块可以通过包管理器在 OTA 之外独立升级而不需要重新烧写整个 system 分区。理解 APEX 可以先类比成“系统级 App Store”。它解决的核心痛点就是“系统组件升级慢”以前系统库有问题必须等厂商发布整个系统更新有了 APEX 之后可以直接推一个 APEX 包重启后模块就更新了而且支持回滚。实现原理上APEX 包本身是一个 ZIP 容器里面包含原生库、可执行文件、Android.bp 编译元信息和一个用于挂载的文件系统镜像通常是 ext4 或 erofs安装时会通过 loopback 设备挂载到一个专用目录。对于普通应用开发者APEX 不会直接影响到日常开发但如果你在做系统集成或设备定制就要知道哪些模块被做成了 APEX 格式因为修改这些模块的方式已经从“直接改源码重编镜像”变成了“生成 APEX 包并安装”。我在这个方向上的建议是除非必要不要自己魔改 APEX 模块因为这个机制对签名、依赖顺序和 mount 时机要求极高一旦模块之间的依赖关系断裂设备可能会陷入无法正常启动的循环。5. 硬件能力与设备交互蓝牙、麦克风与手势识别的集成实践5.1 蓝牙开发从经典蓝牙到低功耗蓝牙“android 蓝牙”这个热词涵盖了从经典蓝牙Bluetooth Classic到低功耗蓝牙BLE的全范围。经典蓝牙主要用于音频传输蓝牙耳机、音箱和文件传输OPP而 BLE 则适合数据采集心率计、温度计、智能家居设备。做 BLE 开发的核心流程扫描设备、建立 GATT 连接、发现服务与特征值、发送/接收数据。扫描阶段要注意 Android 12API 31之后要求 BLUETOOTH_SCAN 权限并且需要在运行时申请 BLUETOOTH_CONNECT 权限。还有一个坑如果应用扫描不到设备先别急着怀疑权限看看手机的定位服务是否已经打开因为 BLE 扫描在很多机型上要求定位服务开启才能生效。数据交互阶段一个容易踩的坑是“设备端 MTU 太小导致一次发不了大数据包”。BLE 默认 MTU 为 23 字节其中有效负载只有 20 字节。如果你要传输的数据量较大需要在连接成功后主动请求协商更大的 MTU比如 247 字节。但注意MTU 是双方协商的结果如果设备端不支持大 MTU你只能做好数据分包和重组。5.2 麦克风声强计音频振幅数据的采集与换算“android 麦克风声强计编写”这个热词应该是想利用手机麦克风测量环境声音的分贝数。技术上核心是拿到音频流的振幅数据然后换算成以分贝为单位的结果。实现上建议使用 AudioRecord 类直接读取 PCM 数据而不要用 MediaRecorder它封装得太高拿不到实时振幅。流程是配置音频源为 MIC、采样率 44100Hz、单声道、PCM 16 位然后循环读取 buffer对每个采样点计算平方和再取均方根RMS最后用公式 dB 20 * log10(RMS / reference) 换算出分贝数。这个 reference 值取多少很关键直接用 1.0 会导致数值偏小一般经验是取 3276816 位最大振幅作为满量程参考这样输出的分贝值会比较符合直觉。有一点不太能避免手机自带一个底噪增益AGC会把 MIC 的灵敏度自动调整导致测量到的分贝数在不同环境下波动。如果你要做的是一个“看起来靠谱”的分贝计可以接受但如果要做精确测量还是建议外接专业声压计硬件校准。另外别忘了在 Android 6.0 动态申请 RECORD_AUDIO 权限并在 Android 14 或更高版本中注意隐私指示器麦克风/相机使用提示会对用户透明可见测试时别被吓到。5.3 手势识别与 MediaPipe 的集成“mediapipe android手势识别”是这几周的热词之一。MediaPipe 是 Google 开源的跨平台多媒体机器学习框架手势识别是它最常被用到的能力之一。集成 MediaPipe 的常规思路通过 CameraX 拿到帧数据送入 MediaPipe Tasks 的手势识别器GestureRecognizer识别结果会返回手部关键点坐标和手势分类。在 Android 端官方推荐使用 MediaPipe Tasks 的 Maven 依赖通过 Tasks API 加载模型并运行推理。这套方案的使用门槛并不高但有几个细节决定体验质量第一模型文件要放在 assets 目录从里面拷贝到可写目录再加载缓存第二识别器的运行要放到独立线程不能在主线程里做推理否则掉帧会很严重第三相机帧格式转换这块要小心MediaPipe 接收的是 Bitmap 或 MediaImage 对象你在 ImageAnalysis 拿到 YUV 数据后需要先旋转并转换成 RGBA 格式这一步如果做不好识别准确率会直线下降。如果识别效果不理想别急着改代码先确认是不是“手部在画面里太小”。手势识别依赖手部关键点检测手离镜头太远或者斜着模型基本无能为力。让用户把手放到画面中间并保持一定大小识别率能提升不少。6. 本周问题排查速查表我每周都会从热搜词里挑出几个“高频翻车点”整理成速查表格方便以后直接翻。这周的如下问题现象常见原因推荐处理方案Android Studio 下载慢或官网打不开网络链路问题使用可信镜像站安装包下载完成后校验哈希值SDK 组件安装失败build-tools 37 报错网络超时、目录权限不足、残留缓存清理 SDK 缓存后重试或手动下载并解压到 SDK 目录Gradle 每次新建项目都重新下载本地缓存中缺少对应 Gradle 版本配置镜像源把常用版本手动放入 Gradle wrapper 缓存目录小米手机连接电脑后 adb 不识别未开 USB 调试、模式不对、驱动缺失确认开发者选项、切换文件传输模式、安装官方驱动、更换数据线CoordinatorLayout 中 Banner 滑动卡顿/冲突滚动事件被外层容器拦截正确设置嵌套滚动标志或者自定义拦截逻辑进度条显示错乱列表复用场景ViewHolder 状态未正确刷新在 onBindViewHolder 中基于当前数据刷新 UI配合 DiffUtilimgdiff 制作差分包崩溃内存不足、镜像文件异常确认 64 位环境和足够内存必要时改用 bsdiffBLE 扫描不到设备定位服务没开、权限未授予检查权限并确认系统定位服务处于开启状态分贝计测量数值不稳AGC 自动增益干扰校准场景下关闭 AGC 或外接校准硬件MediaPipe 手势识别不准手在画面中占比过小、帧格式转换问题提示用户调整手部位置与距离优化图像方向转换这张表里面的问题几乎都是我这些年实际踩过或者帮别人排查过的很多问题看起来千奇百怪最后落点都在几个非常基础的点上权限、缓存、数据线、镜像源。所以排查问题的第一原则永远是“先检查最简单的前提条件”而不是急着翻日志。7. 一点个人体会这周热词背后的技术趋势把这一周的热搜词全部过完我个人最深的体感是Android 开发的重心正在向“两个极端”位移。一个极端是工具链的易用性越来越多新人涌入大家需要更顺畅的 IDE 配置、更快的构建速度、更靠谱的调试链路另一个极端是系统底层和硬件能力做系统定制、编译优化、传感器集成的人越来越多因为应用层 UI 已经很难做出差异化真正的体验瓶颈往往在底层调度和设备协同上。如果你正处在中间层也就是天天写业务 UI、调接口的状态我建议每周留一点时间去看看这两个“极端”方向的内容。不一定马上用上但了解 Framework 的运行方式、知道 APEX 模块是什么、知道 MediaPipe 能处理什么任务这些认知会在你未来做技术选型时发挥作用。我这个每周整理热词的习惯本质上就是逼自己不和这两个极端脱节。最后再分享一个小技巧我整理这周内容时发现热搜词里很多“看不懂”的代码片段比如“content://com.ss.android.uri.key/external_root/android/data/...”、“sh /storage/emulated/0/android/data/com.omarea.vtools/up.sh”这种实际上都指向同一个问题——用户在使用文件管理类应用或者自动化工具时碰到的存储路径限制。从 Android 11 开始应用访问公共目录和外部存储的权限收得越来越紧data 目录基本被限制在“仅本应用可访问”的范围内。很多第三方工具让你手动去 /storage/emulated/0/Android/data 下面找文件纯粹是因为厂商没有针对新系统做适配。遇到这类路径问题最稳妥的方案不是去“想办法绕过限制”而是升级工具版本或者直接用官方认可的 SAF 文件选择框架来访问文件。强制去读 data 目录即使临时能用换一台新设备往往又废了。这周的内容就聊到这里。如果你也在做 Android 开发最近遇到了热搜词里提到的某个具体问题或者有什么新的踩坑记录想交流随时可以留言下周的周刊里我会把值得展开的挑出来细聊。
返回列表