解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块

26次阅读

解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块

本文旨在解决Titanium应用构建时遇到的Execution failed for task ‘:app:checkDebugDuplicateClasses’错误,该错误通常源于旧版模块(如ti.goosh)与现代Google Play Services库的依赖冲突。我们将详细分析问题根源,并提供将推送通知模块迁移至titanium-firebase-cloud-messaging的推荐方案,以确保应用兼容最新Android版本并获得稳定的推送功能。

1. 问题诊断:重复类错误解析

在titanium应用开发中,当您尝试构建或模拟应用时,可能会遇到如下所示的execution failed for task ‘:app:checkdebugduplicateclasses’错误:

[ERROR] [GRADLE] FAILURE: Build failed with an exception. [ERROR] [GRADLE] * What went wrong: [ERROR] [GRADLE] Execution failed for task ':app:checkDebugDuplicateClasses'. [ERROR] [GRADLE]    > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable [ERROR] [GRADLE]       > Duplicate class com.google.android.gms.auth.api.signin.GoogleSignInAccount found in modules jetified-google-play-services-tigoosh (google-play-services-tigoosh.jar) and jetified-play-services-base-18.1.0-runtime (com.google.android.gms:play-services-base:18.1.0) [ERROR] [GRADLE]         Duplicate class com.google.android.gms.common.AccountPicker found in modules jetified-google-play-services-tigoosh (google-play-services-tigoosh.jar) and jetified-play-services-basement-18.1.0-runtime (com.google.android.gms:play-services-basement:18.1.0)

此错误明确指出,在构建过程中发现了重复的类定义。具体而言,com.google.android.gms.auth.api.signin.GoogleSignInAccount和com.google.android.gms.common.AccountPicker这两个类在不同的模块中被重复引入:

  • jetified-google-play-services-tigoosh:这通常是ti.goosh模块内部捆绑的旧版Google Play Services库。
  • jetified-play-services-base-18.1.0-runtime和jetified-play-services-basement-18.1.0-runtime:这些是Titanium SDK或应用中其他现代模块所依赖的最新版Google Play Services库。

问题的核心在于ti.goosh模块的长期未更新,导致其内部包含的Google Play Services版本与当前Titanium SDK或项目中其他依赖项所要求的版本发生冲突。当Gradle尝试合并所有依赖时,发现同一类存在于两个不同的库中,从而导致构建失败。

2. 推荐解决方案:迁移至现代推送模块

鉴于ti.goosh模块已多年未更新,且无法支持最新的Android版本和所需的权限,我们强烈建议您将其替换为一个维护活跃且功能更强大的替代方案。

2.1 选用 titanium-firebase-cloud-messaging

titanium-firebase-cloud-messaging模块是ti.goosh的理想替代品,它提供了基于Firebase Cloud Messaging (FCM) 的完整推送通知解决方案,并具备以下显著优势:

  • 最新SDK兼容性: 该模块与最新的Titanium SDK版本完全兼容。
  • Android版本支持: 能够良好支持最新的Android操作系统版本(例如Android 13),解决了旧模块在权限和行为变更方面的兼容性问题。
  • 完善的权限处理: 包含使用推送通知所需的所有必要Android权限,避免了手动配置和潜在的运行时问题。
  • 活跃维护: 作为社区维护的模块,它会定期更新以适应Google Play Services和Android平台的变化。

2.2 迁移步骤概述

迁移过程通常涉及以下几个关键步骤:

  1. 移除旧模块: 首先,从您的tiapp.xml文件中移除对ti.goosh模块的引用,并确保其不再包含在项目的modules目录下。

    <!-- 移除此行或类似内容 --> <!-- <module platform="android">ti.goosh</module> -->
  2. 添加新模块: 从titanium-firebase-cloud-messaging的GitHub仓库(https://github.com/hansemannn/titanium-firebase-cloud-messaging)下载最新版本的模块,并将其添加到您的Titanium项目。然后在tiapp.xml中添加对新模块的引用。

    <module platform="android">ti.firebase.cloudmessaging</module>
  3. 更新项目代码: 根据titanium-firebase-cloud-messaging模块的文档,更新您应用中处理推送通知注册、接收和交互的代码。这可能包括:

    • 初始化FCM。
    • 获取设备令牌。
    • 处理前台和后台推送消息。
    • 处理通知点击事件

    示例(概念性):

    // 假设 FCM 模块被命名为 FCM var FCM = require('ti.firebase.cloudmessaging');  // 请求通知权限 (Android 13+ 需要) FCM.requestPushPermissions({     callback: function (e) {         if (e.success) {             console.log('Push permissions granted.');             // 获取 FCM 令牌             FCM.retrievePushToken({                 callback: function (e) {                     if (e.success && e.token) {                         console.log('FCM Token:', e.token);                         // 将令牌发送到您的后端服务器                     } else {                         console.error('Failed to retrieve FCM token:', e.error);                     }                 }             });         } else {             console.error('Push permissions denied:', e.error);         }     } });  // 监听接收到的消息 FCM.addEventListener('didReceiveMessage', function (e) {     console.log('Received FCM message:', e.data);     // 根据消息内容处理通知或数据 });  // 监听通知点击事件 FCM.addEventListener('didClickNotification', function (e) {     console.log('Notification clicked:', e.data);     // 处理用户点击通知后的逻辑 });
  4. Firebase项目配置: 确保您的Firebase项目已正确配置,并在Titanium项目的platform/android目录下放置google-services.json文件。

有关更详细的教程和完整示例,您可以参考以下资源:

解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块

降重鸟

要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。

解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块113

查看详情 解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块

  • 模块官方GitHub仓库:https://github.com/hansemannn/titanium-firebase-cloud-messaging
  • 相关教程:https://fromzerotoapp.com/ah-push-it-use-firebase-push-in-your-app/

3. 不推荐的替代方案:更新 ti.goosh

尽管在ti.goosh的GitHub仓库中存在一个PR(例如https://github.com/caffeinalab/ti.goosh/pull/123)尝试更新该模块,但自行维护和更新一个陈旧的模块是一个复杂且耗时的任务。

注意事项:

  • 技术挑战: 您需要深入了解Android模块开发、Gradle依赖管理以及Google Play Services的最新API变化。
  • 工作量巨大: 这将涉及到更新模块内部所有过时的依赖项,使其与最新的Android SDK和Google Play Services版本兼容,并解决可能出现的各种编译和运行时问题。
  • 持续维护: 即使成功更新,您也需要持续投入精力来维护该模块,以应对未来Android平台和依赖库的更新。

因此,除非您有非常特殊的需求和充足的开发资源,否则不建议采用此方案。

4. 总结与最佳实践

遇到checkDebugDuplicateClasses这类重复类错误时,首先应检查项目中的第三方模块依赖。对于Titanium应用中的推送通知功能,由于ti.goosh模块的长期未更新,它已不再适合现代应用开发。

核心建议是: 及时淘汰过时模块,并积极采纳社区中维护活跃、功能完善的现代替代方案,如titanium-firebase-cloud-messaging。这样做不仅能解决当前的构建问题,还能确保您的应用能够充分利用最新的平台特性、权限模型,并获得更稳定、更安全的推送通知服务。定期审查并更新项目依赖是保持应用健康和高效开发的关键。

以上就是解决Titanium构建中重复类错误:从ti.android js git json go github 操作系统 app 后端 ai google 应用开发 json for xml 事件 github android gradle https 应用开发

android js git json go github 操作系统 app 后端 ai google 应用开发 json for xml 事件 github android gradle https 应用开发

text=ZqhQzanResources