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

解决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 应用开发

事件
上一篇
下一篇