You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1上Expo run:android触发:app:checkDebugDuplicateClasses错误求助

Expo 48 Android构建失败:重复类冲突问题

问题场景

在Mac M1设备上运行Expo项目时,以下操作正常执行:

npx expo start # 正常运行
npx expo prebuild # 正常执行

但执行Android设备构建命令时报错:

npx expo run:android --device 1_Pixel_3a_ # 报错

报错信息

> Task :app:checkDebugDuplicateClasses FAILED

FAILURE: 构建完成,出现2个失败。

1: 任务执行失败,抛出异常。
-----------
* 问题原因:
任务':app:checkDebugDuplicateClasses'执行失败。
> 执行com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable时出错
   > 在模块jetified-lifecycle-viewmodel-ktx-2.3.1-runtime(androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)和lifecycle-viewmodel-2.5.1-runtime(androidx.lifecycle:lifecycle-viewmodel:2.5.1)中发现重复类androidx.lifecycle.ViewModelLazy
     在模块jetified-lifecycle-viewmodel-ktx-2.3.1-runtime(androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)和lifecycle-viewmodel-2.5.1-runtime(androidx.lifecycle:lifecycle-viewmodel:2.5.1)中发现重复类androidx.lifecycle.ViewTreeViewModelKt
     
     可查阅文档了解如何修复依赖解析错误。

* 建议尝试:
> 使用--stacktrace选项获取堆栈跟踪。
> 使用--info或--debug选项获取更多日志输出。
> 使用--scan选项获取完整洞察。
==============================================================================

2: 任务执行失败,抛出异常。
-----------
* 问题原因:
java.lang.StackOverflowError(无错误信息)

* 建议尝试:
> 使用--stacktrace选项获取堆栈跟踪。
> 使用--info或--debug选项获取更多日志输出。
> 使用--scan选项获取完整洞察。
==============================================================================

* 更多帮助请访问Gradle官方帮助。

构建中使用了已弃用的Gradle功能,与Gradle 8.0不兼容。

你可以使用'--warning-mode all'显示单个弃用警告,确定它们来自你自己的脚本还是插件。

请查看Gradle 7.5.1命令行界面文档了解命令行警告详情。

为确保正确性,本次构建期间已禁用1个无效工作单元的执行优化。
请查阅弃用警告了解更多详情。

BUILD FAILED in 26s
604个可执行任务: 10个已执行,594个已是最新状态
Error: /Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/android/gradlew 以非零代码退出: 1
Error: /Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/android/gradlew 以非零代码退出: 1
    at ChildProcess.completionListener (/Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/node_modules/@expo/spawn-async/build/spawnAsync.js:52:23)
    at Object.onceWrapper (node:events:628:26)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1100:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:304:5)
    ...
    at Object.spawnAsync [as default] (/Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/node_modules/@expo/spawn-async/build/spawnAsync.js:17:21)
    at spawnGradleAsync (/Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/node_modules/@expo/cli/build/src/start/platforms/android/gradle.js:72:46)
    at Object.assembleAsync (/Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/node_modules/@expo/cli/build/src/start/platforms/android/gradle.js:52:18)
    at runAndroidAsync (/Users/joy/Dev/Projects/XXX/XXX-Mobile/mobile/node_modules/@expo/cli/build/src/run/android/runAndroidAsync.js:31:24)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

猜测原因

  • 曾尝试将Expo从48升级到50,中途因升级卡住用ctrl+c终止,可能导致依赖环境混乱。
  • 使用nvm切换Node版本(16→18)后在其他Next.js 14项目工作,可能影响了当前项目的依赖解析。
  • 期间在另一个同版本(Expo 48)的旧Expo项目中工作,可能残留了冲突的缓存或依赖配置。

已尝试的解决方法

# 清除全部缓存
rm -rf node_modules
npm cache clean --force
npm install
watchman watch-del-all
rm -fr $TMPDIR/haste-map-*
rm -rf $TMPDIR/metro-cache
npx expo start --clear

####################

npm install -g --force expo-cli
nvm alias default 16 # 16.20.1  
nvm alias default 18 # 18.20.2
npx expo prebuild --clean
# git克隆并重新安装

项目Package.json配置

{
  "dependencies": {
    "@emotion/react": "^11.10.6",
    "@emotion/styled": "^11.10.6",
    "@expo/config-plugins": "~6.0.0",
    "@mui/icons-material": "^5.11.11",
    "@mui/material": "^5.11.14",
    "@react-native-async-storage/async-storage": "1.17.11",
    "@react-native-community/datetimepicker": "6.7.3",
    "@react-navigation/bottom-tabs": "^6.5.7",
    "@react-navigation/core": "^6.4.16",
    "@react-navigation/material-bottom-tabs": "^6.2.15",
    "@react-navigation/native": "^6.1.6",
    "@react-navigation/native-stack": "^6.9.12",
    "@reduxjs/toolkit": "^1.9.3",
    "@tanstack/react-query": "^4.28.0",
    "@types/react": "~18.0.27",
    "axios": "^1.3.4",
    "base-64": "^1.0.0",
    "date-fns": "^2.30.0",
    "dotenv": "^16.3.1",
    "expo": "~48.0.21",
    "expo-av": "~13.2.1",
    "expo-barcode-scanner": "~12.3.2",
    "expo-blur": "~12.2.2",
    "expo-dev-client": "~2.2.1",
    "expo-device": "~5.2.1",
    "expo-image": "~1.0.2",
    "expo-linking": "~4.0.1",
    "expo-location": "~15.1.1",
    "expo-notifications": "~0.18.1",
    "expo-secure-store": "~12.1.1",
    "expo-splash-screen": "~0.18.2",
    "expo-status-bar": "~1.4.4",
    "expo-system-ui": "~2.2.1",
    "expo-updates": "~0.16.4",
    "framer-motion": "^10.9.1",
    "js-sha256": "^0.10.1",
    "jwt-decode": "^3.1.2",
    "nativewind": "^2.0.11",
    "react": "18.2.0",
    "react-devtools": "^4.27.4",
    "react-native": "0.71.14",
    "react-native-animatable": "^1.3.3",
    "react-native-dotenv": "^3.4.9",
    "react-native-maps": "1.3.2",
    "react-native-paper": "^5.5.1",
    "react-native-razorpay": "^2.3.0",
    "react-native-recaptcha-that-works": "^1.3.2",
    "react-native-safe-area-context": "4.5.0",
    "react-native-screens": "~3.20.0",
    "react-native-svg": "13.4.0",
    "react-native-vector-icons": "^9.2.0",
    "react-native-webview": "11.26.0",
    "react-redux": "^8.0.5",
    "redux-devtools-extension": "^2.13.9",
    "remote-redux-devtools": "^0.5.16",
    "tailwindcss": "3.2.7",
    "typescript": "^4.9.4"
  },
  "devDependencies": {
    "@babel/core": "^7.20.2"
  },
  "private": true
}

解决方案

1. 强制统一lifecycle依赖版本

在项目根目录的android/build.gradle文件中,添加依赖分辨率规则,强制所有依赖使用同一版本的lifecycle库:

allprojects {
    repositories {
        // 保留现有仓库配置
    }
    configurations.all {
        resolutionStrategy {
            force 'androidx.lifecycle:lifecycle-viewmodel:2.5.1'
            force 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
        }
    }
}

2. 清理Android构建缓存

除已尝试的Node缓存,还需清理Android本地构建缓存:

cd android
./gradlew cleanBuildCache
./gradlew clean
cd ..

3. 锁定Node版本

使用nvm锁定当前项目的Node版本为Expo 48推荐的16.20.1:

nvm use 16.20.1
# 在项目根目录创建.nvmrc文件,后续进入项目自动切换版本
echo "16.20.1" > .nvmrc

4. 重新预构建并构建

完成上述步骤后,执行以下命令重新构建:

rm -rf node_modules android ios
npm install
npx expo prebuild --clean
npx expo run:android --device 1_Pixel_3a_

内容的提问来源于stack exchange,提问作者JOY SAM RAJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:27:04