Error:Execution failed for task ':app:packageDebug'. > Duplicate files copied in APK META-INF/LICENS

本文介绍了一个在Android项目中集成环信后,再次集成友盟分享时遇到的类冲突问题。通过在build.gradle文件中添加特定代码,成功解决了由老旧库文件导致的问题。
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE
File 1: D:\CloudOffice\05.Coding\01.Code\Android\CloudOffice\app\libs\commons-lang-2.4.jar

File 2: D:\CloudOffice\05.Coding\01.Code\Android\CloudOffice\app\libs\httpmime-4.1.3.jar


笔者最近做项目 在 集成 环信之后,再集成 友盟分享  时遇到这个问题。

在网上查找各位前辈的解决方法之后终于解决这个头大的问题。

发生类似这样的问题  是因为这些包太旧了  

所以就需要在Android studio 里面新增一些代码  来兼容这些老版本


点击当前项目的build.gradle,将下面代码添加到下图红框的位置,问题就解决了!

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }



使用方案1后再次build仍然失败出现下述问题:> Task :app:preBuild UP-TO-DATE > Task :app:preDebugBuild UP-TO-DATE > Task :app:mergeDebugNativeDebugMetadata NO-SOURCE > Task :app:mergeDebugMlModels > Task :app:generateDebugMlModelClass > Task :app:javaPreCompileDebug Download https://repo.huaweicloud.com/repository/maven/com/google/android/material/material/1.10.0/material-1.10.0.module, took 130 ms Download https://mirrors.cloud.tencent.com/nexus/repository/maven-public/androidx/activity/activity/1.8.0/activity-1.8.0.module, took 296 ms > Task :app:checkDebugAarMetadata FAILED > Task :app:processDebugNavigationResources FAILED > Task :app:generateDebugResValues > Task :app:mapDebugSourceSetPaths FAILED > Task :app:generateDebugResources > Task :app:mergeDebugResources FAILED > Task :app:packageDebugResources > Task :app:createDebugCompatibleScreenManifests > Task :app:extractDeepLinksDebug > Task :app:processDebugMainManifest FAILED > Task :app:mergeDebugShaders > Task :app:compileDebugShaders NO-SOURCE > Task :app:generateDebugAssets UP-TO-DATE > Task :app:mergeDebugAssets FAILED > Task :app:processDebugJavaRes NO-SOURCE > Task :app:mergeDebugJavaResource FAILED > Task :app:checkDebugDuplicateClasses FAILED > Task :app:desugarDebugFileDependencies FAILED > Task :app:mergeDebugJniLibFolders > Task :app:mergeDebugNativeLibs FAILED > Task :app:validateSigningDebug > Task :app:writeDebugAppMetadata > Task :app:writeDebugSigningConfigVersions FAILURE: Build completed with 10 failures. 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:checkDebugAarMetadata'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 2: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:processDebugNavigationResources'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 3: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:mapDebugSourceSetPaths'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 4: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:mergeDebugResources'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 5: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:processDebugMainManifest'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 6: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:mergeDebugAssets'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 7: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:mergeDebugJavaResource'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 8: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 9: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:desugarDebugFileDependencies'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. ============================================================================== 10: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:mergeDebugNativeLibs'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Could not find org.tensorflow:tensorflow-lite-metadata:. Required by: project :app * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org.
最新发布
10-24
<think>我们注意到错误信息中反复出现:Could not find org.tensorflow:tensorflow-lite-metadata:. 这表明依赖 `tensorflow-lite-metadata` 没有被正确解析。在之前的方案中,我们修改了 `libs.versions.toml` 文件,为 `tensorflow-lite-metadata` 添加了版本号,但可能由于仓库配置问题,该依赖仍然无法下载。 检查之前的步骤: 1. 在 `libs.versions.toml` 中,我们为 `tensorflow-lite-metadata` 添加了版本号,并引用了 `tensorflowLite` 的版本(即2.17.0)。 2. 在依赖声明中,我们使用了 `implementation(libs.tensorflow.lite.metadata)`。 但是,从错误日志看,Gradle在尝试下载依赖时,并没有带上版本号(`org.tensorflow:tensorflow-lite-metadata:` 后面没有版本号),这说明版本号可能未被正确传递。 可能的原因: - `libs.versions.toml` 中 `tensorflow-lite-metadata` 的版本引用错误。 - 仓库配置中没有包含该依赖的仓库。 解决方案: 步骤一:确认 `libs.versions.toml` 配置 确保 `tensorflow-lite-metadata` 的版本引用正确,并且版本号存在。根据之前提供的修改: ```toml [libraries] tensorflow-lite-metadata = { group = "org.tensorflow", name = "tensorflow-lite-metadata", version.ref = "tensorflowLite" # 确保tensorflowLite版本是2.17.0 } ``` 同时,检查 `[versions]` 部分: ```toml [versions] tensorflowLite = "2.17.0" ``` 步骤二:检查仓库配置 在 `settings.gradle.kts` 中,我们配置了华为云镜像,并且包含了 `org.tensorflow` 的组。但是,请注意 `tensorflow-lite-metadata` 可能位于不同的仓库。 实际上,TensorFlow Lite 的官方仓库是 Maven Central 和 Google Maven。华为云镜像可能没有同步该依赖(尤其是较新的版本)。 我们可以尝试在浏览器中访问: ``` https://repo.huaweicloud.com/repository/maven/org/tensorflow/tensorflow-lite-metadata/2.17.0/ ``` 如果该URL返回404,则说明华为云镜像没有这个版本或这个库。 步骤三:添加其他国内镜像源 尝试添加腾讯云镜像源(之前已经添加)或者阿里云镜像源,确保它们包含 `org.tensorflow` 组。 步骤四:如果国内镜像都没有,考虑使用代理或CDN 如果确实国内镜像没有,我们可以尝试使用 jsDelivr CDN 来下载,或者使用其他替代镜像。 步骤五:显式指定 `tensorflow-lite-metadata` 版本 在 `build.gradle.kts` 中,我们可以暂时硬编码这个依赖的版本来确保版本号被正确应用: ```kotlin dependencies { // ... 其他依赖 implementation("org.tensorflow:tensorflow-lite-metadata:2.17.0") } ``` 步骤六:清理构建 执行 `./gradlew clean build --refresh-dependencies` 如果问题仍然存在,我们可以尝试在 `settings.gradle.kts` 中添加 Maven Central 的镜像(阿里云代理): ```kotlin maven { url = uri("https://maven.aliyun.com/repository/central") content { includeGroup("org.tensorflow") } } ``` 具体修改后的 `settings.gradle.kts` 示例: ```kotlin dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { maven { url = uri("https://maven.aliyun.com/repository/public") } maven { url = uri("https://maven.aliyun.com/repository/google") } maven { url = uri("https://maven.aliyun.com/repository/central") } // 新增 maven { url = uri("https://mirrors.cloud.tencent.com/nexus/repository/maven-public/") } maven { url = uri("https://repo.huaweicloud.com/repository/maven/") content { includeGroupByRegex("org\\.tensorflow.*") includeGroupByRegex("com\\.google.*") } } // 如果上述镜像都没有,可以尝试直接使用Maven Central(但可能慢) // mavenCentral() } } ``` 步骤七:如果以上都不行,考虑使用代理 在 `gradle.properties` 中设置代理(如果有的话)。 最终建议: 由于错误明确指向 `tensorflow-lite-metadata` 找不到,我们首先检查该依赖在镜像中的存在性,然后调整仓库顺序,确保包含该依赖的仓库被优先访问。 注意:阿里云镜像的central仓库(https://maven.aliyun.com/repository/central)通常包含Maven Central的内容,而TensorFlow的库在Maven Central上有发布。 让我们检查 Maven Central 上是否存在该依赖: ``` https://repo1.maven.org/maven2/org/tensorflow/tensorflow-lite-metadata/2.17.0/ ``` 如果存在,那么阿里云的central镜像应该也有。 因此,我们在仓库配置中添加阿里云的central镜像,并确保其顺序靠前。 修改后的仓库列表(按顺序尝试): 1. 阿里云google仓库(主要针对Google的库) 2. 阿里云public仓库(包含很多公共库) 3. 阿里云central仓库(Maven Central镜像) 4. 腾讯云 5. 华为云 这样配置后,重新构建。 如果仍然失败,请运行 `./gradlew build --info` 查看依赖解析的详细信息,特别是查找 `tensorflow-lite-metadata` 的下载URL。 另外,注意在之前的依赖中,我们可能同时用版本目录和硬编码声明了同一个依赖,请确保没有重复声明且版本一致。 根据问题,我们之前已经统一使用版本目录,所以请检查是否在依赖中还有硬编码的 `tensorflow-lite-metadata` 而没有带版本号?在错误日志中,Gradle提示找不到的依赖是 `org.tensorflow:tensorflow-lite-metadata:`(没有版本号),这通常是因为依赖声明中没有指定版本号。所以请确认在 `libs.versions.toml` 中配置的 `tensorflow-lite-metadata` 的版本是否正确传递。 在 `build.gradle.kts` 中,使用 `implementation(libs.tensorflow.lite.metadata)` 应该会传递版本号。如果版本号没有传递,可能是版本目录配置问题。 另一种可能是:在 `libs.versions.toml` 中,我们定义了一个库别名 `tensorflow-lite-metadata`,但是在依赖中可能错误地使用了另一个别名(比如之前的别名没有版本号)。请检查别名是否一致。 在之前的 `libs.versions.toml` 中,我们定义了: ```toml [libraries] # ... tensorflow-lite-metadata = { group = "org.tensorflow", name = "tensorflow-lite-metadata", version.ref = "tensorflowLite" } ``` 在依赖中,我们使用 `libs.tensorflow.lite.metadata`(注意:别名在版本目录中会被转换成驼峰命名,所以 `tensorflow-lite-metadata` 在代码中应该是 `libs.tensorflow.lite.metadata`)。 如果问题依旧,我们可以尝试临时在依赖中硬编码版本: ```kotlin implementation(libs.tensorflow.lite.metadata.get().toString()) // 这可能会打印出依赖的字符串,但这不是正确用法,仅用于测试版本号是否正确 // 或者直接硬编码 implementation("org.tensorflow:tensorflow-lite-metadata:2.17.0") ``` 综上所述,我们优先尝试调整仓库配置,确保阿里云的central镜像被加入,并重新构建。 如果调整仓库后问题仍然存在,请检查版本目录中 `tensorflow-lite-metadata` 的版本号是否被正确解析。 </think>### 解决 TensorFlow Lite Metadata 依赖解析失败问题 从错误日志看,核心问题是: ```plaintext > Could not find org.tensorflow:tensorflow-lite-metadata:. ``` #### 根本原因分析 1. **版本号缺失**:`tensorflow-lite-metadata` 依赖未指定版本号 2. **仓库覆盖不全**:华为云镜像可能缺失 TensorFlow Metadata 包 3. **依赖声明冲突**:版本目录(libs)与硬编码依赖混合使用导致解析混乱 #### 完整修复方案 ##### 第一步:统一依赖声明(修复版本号缺失) 在 `app/build.gradle.kts` 中**修正依赖声明**: ```kotlin dependencies { // ... 其他依赖保持不变 ... // 统一使用版本目录声明,确保所有TensorFlow依赖版本一致 implementation(libs.tensorflow.lite) implementation(libs.tensorflow.lite.support) implementation(libs.tensorflow.lite.metadata) // 添加版本号 // 删除以下冲突声明 // implementation("org.tensorflow:tensorflow-lite:2.17.0") // implementation("org.tensorflow:tensorflow-lite-support:2.17.0") } ``` ##### 第二步:修复 libs.versions.toml 配置 ```toml [versions] # 确保所有TensorFlow组件版本一致 tensorflowLite = "2.17.0" tensorflowLiteSupport = "2.17.0" # 原为0.5.0 [libraries] # 修正metadata库声明(添加version.ref) tensorflow-lite-metadata = { group = "org.tensorflow", name = "tensorflow-lite-metadata", version.ref = "tensorflowLite" # 关键修复 } # 确保support库使用统一版本 tensorflow-lite-support = { group = "org.tensorflow", name = "tensorflow-lite-support", version.ref = "tensorflowLiteSupport" } ``` ##### 第三步:增强仓库配置(覆盖所有TensorFlow组件) ```kotlin // settings.gradle.kts dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { // 阿里云镜像 (优先) maven { url = uri("https://maven.aliyun.com/repository/public") } maven { url = uri("https://maven.aliyun.com/repository/google") } // 腾讯镜像 (TensorFlow备用) maven { url = uri("https://mirrors.cloud.tencent.com/nexus/repository/maven-public/") content { includeGroup("org.tensorflow") } } // 华为云镜像 (Android支持库) maven { url = uri("https://repo.huaweicloud.com/repository/maven/") content { includeGroupByRegex("com\\.android.*") includeGroupByRegex("androidx\\..*") } } // 添加JitPack作为备用 maven { url = uri("https://jitpack.io") } } } ``` ##### 第四步:清理并强制刷新依赖 ```bash # 终端执行 ./gradlew clean --refresh-dependencies ./gradlew build --info # 查看详细解析日志 ``` ##### 第五步:验证依赖解析 在 `build.gradle` 中添加诊断任务: ```kotlin tasks.register("checkDeps") { doLast { configurations.getByName("debugRuntimeClasspath").resolvedConfiguration .firstLevelModuleDependencies.forEach { dep -> println("✅ ${dep.moduleGroup}:${dep.moduleName}:${dep.moduleVersion}") } } } // 运行: ./gradlew checkDeps ``` #### 备选方案:手动指定metadata版本 如果问题依旧,在 `dependencies` 中显式指定: ```kotlin implementation("org.tensorflow:tensorflow-lite-metadata:2.17.0") { because("解决华为云镜像元数据缺失问题") } ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值