
在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这两个类在不同的模块中被重复引入:
问题的核心在于ti.goosh模块的长期未更新,导致其内部包含的Google Play Services版本与当前Titanium SDK或项目中其他依赖项所要求的版本发生冲突。当Gradle尝试合并所有依赖时,发现同一类存在于两个不同的库中,从而导致构建失败。
鉴于ti.goosh模块已多年未更新,且无法支持最新的Android版本和所需的权限,我们强烈建议您将其替换为一个维护活跃且功能更强大的替代方案。
titanium-firebase-cloud-messaging模块是ti.goosh的理想替代品,它提供了基于Firebase Cloud Messaging (FCM) 的完整推送通知解决方案,并具备以下显著优势:
迁移过程通常涉及以下几个关键步骤:
移除旧模块: 首先,从您的tiapp.xml文件中移除对ti.goosh模块的引用,并确保其不再包含在项目的modules目录下。
<!-- 移除此行或类似内容 --> <!-- <module platform="android">ti.goosh</module> -->
添加新模块: 从titanium-firebase-cloud-messaging的GitHub仓库(https://github.com/hansemannn/titanium-firebase-cloud-messaging)下载最新版本的模块,并将其添加到您的Titanium项目。然后在tiapp.xml中添加对新模块的引用。
<module platform="android">ti.firebase.cloudmessaging</module>
更新项目代码: 根据titanium-firebase-cloud-messaging模块的文档,更新您应用中处理推送通知注册、接收和交互的代码。这可能包括:
示例(概念性):
// 假设 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);
// 处理用户点击通知后的逻辑
});Firebase项目配置: 确保您的Firebase项目已正确配置,并在Titanium项目的platform/android目录下放置google-services.json文件。
有关更详细的教程和完整示例,您可以参考以下资源:
尽管在ti.goosh的GitHub仓库中存在一个PR(例如https://github.com/caffeinalab/ti.goosh/pull/123)尝试更新该模块,但自行维护和更新一个陈旧的模块是一个复杂且耗时的任务。
注意事项:
因此,除非您有非常特殊的需求和充足的开发资源,否则不建议采用此方案。
遇到checkDebugDuplicateClasses这类重复类错误时,首先应检查项目中的第三方模块依赖。对于Titanium应用中的推送通知功能,由于ti.goosh模块的长期未更新,它已不再适合现代应用开发。
核心建议是: 及时淘汰过时模块,并积极采纳社区中维护活跃、功能完善的现代替代方案,如titanium-firebase-cloud-messaging。这样做不仅能解决当前的构建问题,还能确保您的应用能够充分利用最新的平台特性、权限模型,并获得更稳定、更安全的推送通知服务。定期审查并更新项目依赖是保持应用健康和高效开发的关键。
以上就是解决Titanium构建中重复类错误:从ti.goosh迁移到现代推送模块的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号