日常项目构建错误(Android)

在这里插入图片描述

1. gradle 进程占用

  • 使用 visualvm 工具查看 gradle 进程
  • 打开任务管理器杀死进程

2. Duplicate class 类重复

  • 排除重复模块
  • 或删除重复代码

3. as 控制台输出日志覆盖

  • as setting 修改日志缓存大小
  • 或修改配置文件bin\idea.properties 配置项idea.cycle.buffer.size
  • 重启 as

4. utf-8 序列的字节无效

  • gradle.properties 配置项 org.gradle.jvmargs 指定 UTF-8 编码

org.gradle.jvmargs=-Dfile.encoding=UTF-8

5. jvm 创建失败,内存不足

  • gradle.properties 配置项 -Xmx 调整大小

org.gradle.jvmargs=-Xmx2048m

6. as 打包控制台输出乱码

  • setting 设置编码为 utf-8

7. as gradle Task 列表为空或不完整

  • 低版本:setting 取消勾选 Do not build gradle task list during gradle syne
  • 高版本:setting 勾选 configure all gradle tasks during gradle sync
  • 重新同步一次

8. as gradle.properties 指定 jdk

org.gradle.java.home=C:\Program Files\Java\jdk-11.0.16

9. gradle 镜像地址

distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-7.6.4-bin.zip

10. manifest 位置元素 provider

  • 升级 gradle 到 6+ 版本
  • 升级 AGP 到 4+ 版本

11. androidx-work-runtime 版本较低闪退

  • 升级版本到 2.7.0 及以上
  • 或强制指定版本 2.7.0

12. more than one file 重复的文件

  • build.gradle 配置 packingOptions exclude 排除文件

13. 编译器 (1.8.0_40) 中出现异常错误

  • 升级 jdk 版本(如升级到 jdk11)

14. as 打包输出大量系统日志

  • 新增打包参数 --quiet

15. MergeJavaResWorkAction invalid block type

  • 关闭 databinding

16. You need to use a Theme.AppCompat theme (or descendant) with this activity

  • 为 Activity 设置合适的主题 android:theme="@style/Theme.AppCompat.NoActionBar"

17. namespace not specified

  • build.gradle 设置 namespace
  • 或 manifest 标签设置 package 属性

18. Unsupported version number [55.0] (maximum 54.0, Java 10)

  • 工程不要禁用 R8,gradle.properties 删除 android.enableR8=false(如有)

Caused by: java.lang.UnsupportedOperationException: Unsupported version number [55.0] (maximum 54.0, Java 10)
at proguard.classfile.util.ClassUtil.checkVersionNumbers(ClassUtil.java:150)
at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:101)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:430)
at proguard.io.ClassReader.read(ClassReader.java:91)

19. javax.annotation.Nullable 找不到

  • 添加依赖 com.google.code.findbugs:jsr305:3.0.2

编译器 (17.0.12) 中出现异常错误。如果在 Bug Database (https://bugs.java.com) 中没有找到该错误,请通过 Java Bug 报告页 (https://bugreport.java.com) 建立该 Java 编译器 Bug。请在报告中附上您的程序、以下诊断信息以及传递到 Java 编译器的参数。谢谢。
com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到javax.annotation.Nullable的类文件

20. OkHttpListener IllegalArgumentException 打包失败

Caused by: java.lang.IllegalArgumentException: Can’t find common super class of [b/e] (with 2 known super classes) and [com/efs/sdk/net/OkHttpListener]

项目里依赖了 okhttp:3.2.0 版本

  • 指定更高版本可打包成功(原因未排查)com.squareup.okhttp3:okhttp:4.12.0

21. ClassNotFoundException: android.support.v4.content.FileProvider 闪退

第三方库 FileProvider 使用了 support-v4

  • 如果是我们自己写的,可以把 support-v4 的换成 androidx 的 import androidx.core.content.FileProvider;
  • 是第三方我们不能修改,一劳永逸办法是 gradle.properties 开启 androidx

#开启 androidx
android.useAndroidX=true

##处理 AndroidX 和旧版 Android 支持库(Support Libraries)之间的迁移问题 [关键:打包时自动适配 support 库]
android.enableJetifier=true

22. 未显示应用图标

  • 把多余的文件夹 res/drawable/mipmap-anydpi-v26 删除

23. 部分设备不显示应用名称

如果主 activity manifest 也设置了 label,某些系统会优先读取该配置显示应用名称,恰巧改 activity 的 label 属性配置为空字符串

  • 要么去掉主 activity 的 label 属性使用 application 标签配置的,要么设置正确的值

24. 电脑网络正常,但 AS 打包失败显示网络异常

  • 检查是否配置了 http 代理,并且代理网络不可用时,需要取消代理配置

在这里插入图片描述
在这里插入图片描述

25. 开启混淆打包失败 Missing class executing R8Task

解决:配置混淆规则,忽略警告并继续构建

  • 方式一:-ignorewarnings #全局忽略警告
  • 方式二:-dontwarn [packagename] #忽略指定包名下的警告

26、无法创建 JVM17,内存分配不足

# 之前,分配内存过小
#org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G 

# 设置之后,加大分配大小
org.gradle.jvmargs=-Xmx6096m -Xms6096m -Dfile.encoding=UTF-8

27、git 无法克隆 AOSP,需要设置 http.proxy 代理

查看是否设置代理:输出为空就是未设置

git config --global --get http.proxy
git config --global --get https.proxy

设置代理:后面跟本机开启 VPN 是的代理地址

git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy http://127.0.0.1:10809

移除代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

28、R8 开启完全模式混淆闪退

由于混淆规则未能很好适配导致混淆异常运行闪退

临时解决关闭 R8 完全模式

#gradle.properties
android.enableR8.fullMode=false

29、Targeting S+ (version 31 and above) requires that an explicit value for android:exported

可以编写 Gradle Plugin 插件,在打包期间,AndroidManifest 合并时(或更早之前)处理四大组件为期添加exported属性,或调整该属性值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值