返回

升级 Android 支持库版本时遇到的两个问题

Android

作为一名移动开发者,我最近着手升级公司项目中的 Android 支持库版本。然而,在升级过程中,我遇到了两个棘手的难题。本文将详细探讨这些问题及其解决方案,旨在为其他开发者提供借鉴。

问题 1:DexException: Unable to execute dex: method ID not in [0, 0xffff]

在升级支持库版本后,应用程序在运行时抛出了以下异常:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{...}: java.lang.InstantiationException: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.widget.AppCompatTextView" on path: DexPathList[...]

经调查,问题源于支持库中类的方法数量超出了 Dex 文件支持的上限(65535 个方法)。

解决方案

为了解决此问题,我采用了两步方法:

  1. 禁用 dex 优化: 在 gradle.properties 中添加以下行:
android.enableDexOpt=false
  1. 使用多 Dex: 在 gradle 文件中启用多 Dex 支持:
multiDexEnabled true

问题 2:aar 冲突导致重复符号

升级后,项目中出现了 aar 冲突,导致编译器抱怨重复符号。此问题是由不同模块中使用的不同版本的相同支持库 aar 引起的。

解决方案

为了解决此问题,我采取了以下步骤:

  1. 检查依赖项: 使用 gradle dependencyInsight 任务检查项目中所有模块的依赖项。

  2. 强制使用特定版本: 对于冲突的 aar,我通过在 gradle 文件中强制使用特定版本来解决冲突:

compile 'com.android.support:appcompat-v7:26.1.0'

结论

通过解决以上两个问题,我成功地将项目中的支持库版本升级到了最新版本。这些解决方案不仅解决了遇到的问题,还为其他开发者提供了解决类似问题的宝贵见解。在进行版本升级时,仔细检查依赖项、考虑 dex 限制并注意 aar 冲突至关重要。