2025-06-23 08:33:00
最近在 Android 项目开发中遇到了几个构建错误,以下是解决方案,供遇到同样问题的开发者参考。
1 2 3 4 5 |
|
在 app/build.gradle
中添加以下配置:
1 2 3 4 5 6 7 |
|
此错误通常由多个依赖包含相同的 META-INF 文件引起,通过 excludes
排除重复文件即可解决。
1 2 3 |
|
在 app/build.gradle
中添加依赖替换规则:
1 2 3 4 5 |
|
Google 将 TensorFlow Lite 迁移到新包名 com.google.ai.edge.litert
,若项目同时包含新旧包名,会导致类冲突。通过依赖替换强制使用新包解决。
1 2 3 4 |
|
在项目根目录的 android/gradle.properties
文件中添加:
1
|
|
BouncyCastle 1.78 版本使用 Java 21 编译(class file major version 65),而 Jetifier 不支持此版本字节码。将相关 jar 包加入 Jetifier 忽略列表可避免转换错误。
以上三个问题是 Android 构建中常见的依赖冲突问题,解决思路包括: – 排除重复文件 – 替换冲突依赖 – 跳过不兼容的处理
遇到类似问题时,仔细分析错误信息,通常能找到相应解决方案。
2025-06-15 08:49:00
在 CI/CD 环境下,团队常遇到以下错误:
1
|
|
这通常是多个进程或脚本并发操作同一个 Git 仓库,导致元数据损坏或锁冲突。Git 并非为高并发本地操作设计,因此需要解决并发问题。
在自动化脚本中,例如:
1 2 |
|
如果多个任务同时执行,可能导致锁冲突或元数据损坏。
通过加锁机制,让所有 Git 操作串行执行。flock
是一个简单高效的工具,专为这种场景设计。
大多数 Linux 发行版自带 flock
(属于 util-linux
套件)。如果没有,可按以下方式安装:
1 2 |
|
1
|
|
1
|
|
安装后即可使用 flock
命令。
macOS 默认不包含 flock
,但可通过 Homebrew 安装兼容版本:
1
|
|
安装的是 Ben Noordhuis 的 flock
,语法与 Linux 版本基本一致。
提示:在 CI 服务(如 GitHub Actions)中,可在步骤中提前安装 flock
。
flock
用于在 shell 脚本中对文件加锁:
1
|
|
建议将锁文件放在 .git
目录下,避免污染业务代码目录。
假设有一个 deploy.sh
脚本:
1 2 3 4 |
|
加锁后修改为:
1 2 3 4 5 6 7 8 |
|
或者直接锁定整个脚本:
1
|
|
-n
:表示拿不到锁时立即退出(可选)。.git
目录下。flock
使 Git 操作串行,防止元数据损坏。flock
。flock
是必备工具,简单高效!如有问题,请在评论区讨论。
2024-11-03 00:49:00
前段时间,处理一个比较旧的 flutter plugin,涉及到 Android 的部分,一顿修改后,发现无法 gradle sync 成功。 报错如下,
1 2 3 4 5 6 7 8 9 10 |
|
根据分析上面的错误信息,判定与 gradle 有关,和修改的 kotlin 代码无关。
经过一些简短尝试,最终确定是 gradle 版本不匹配的问题(主要由这一句推断 because interface org.gradle.api.tasks.incremental.IncrementalTaskInputs is not a valid parameter to an action method.)。
classpath ‘com.android.tools.build:gradle:7.1.2’ // The Android Gradle plugin.
修改gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
修改成(或者对应的gradle 版本) distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
查询,请访问 这里 https://developer.android.com/build/releases/gradle-plugin?#updating-gradle
2023-03-12 20:50:00
有时候我们需要使用 Android 模拟器来 绑定一下 hosts 来实现功能的开发与验证,刚好最近遇到了这样的需求,处理完成,简单记录一下。
解压,然后将 emulator
和 emulator-check
替换掉这里面的文件 ~/Library/Android/sdk/tools/
(原有的可以备份为 xxx_backup)
1 2 3 4 5 6 7 |
|
1
|
|
假设上面的 hosts 我们新增了 127.0.0.1 baidu.com
1 2 3 4 5 6 |
|
注意: hosts 修改建议在 mac 上进行处理,然后使用adb push your_hosts_on_mac /etc/hosts
替换手机内的hosts。手机内置的 vi 很弱,可能无法编辑。
以上。
2023-02-12 20:20:00
作为一个从 Android Studio/IntelliJ 切到 VS code 的开发者,一开始会遇到各种不适应的情况。 比如快捷键不一样,使用习惯不一样等。
这里将简单记录一下 个人遇到的一些痛点,比如如何重写方法。
在 Android Studio/ IntelliJ 中,使用起来很简单,比如弹出这个菜单,选择 Override Methods
即可,实现重写 initState
方法
但是切到 Vs Code 后,发现找不到快捷键,后来经过一些摸索,还是找到了 如何快速实现方法重写的方法。
如下图,只需要输入待重写的方法的首字母,即可弹出提示。
VS Code 的方式显得会更加的简单。(后来才发现同样的方式 在 Android Studio/Intellij 也支持,Orz)
2022-11-27 21:35:00