无法进行新构建:“admob.plus.core.Ad$1 已定义多次”

Posted

技术标签:

【中文标题】无法进行新构建:“admob.plus.core.Ad$1 已定义多次”【英文标题】:Impossible to make a new build: "admob.plus.core.Ad$1 is defined multiple times" 【发布时间】:2021-09-28 20:09:46 【问题描述】:

注意:这个问题/问题是关于一些 android 构建过程的,而不是关于 AdMob Plus 本身的技术问题。

我将 AdMob Plus 添加到了我的项目中,而且一开始它就可以正常工作。我的手机中有一个使用 --prod 标志构建的 ionic 应用程序的工作版本,它显示占位符广告。

但在尝试为 Play 商店签署 APK 时遇到一些严重问题后,我开始完全无法对我的项目做任何事情。关于 AdMob,我一直遇到这个我无法解决的错误:

Type admob.plus.core.Ad$1 is defined multiple times: C:\Zerok\Dev\Proyectos\Dromous\node_modules\@admob-plus\capacitor\android\build\.transforms\caf89848ec3f4a75afca2ab1d3cbcd43\transformed\classes\classes.dex, C:\Zerok\Dev\Proyectos\Dromous\android\capacitor-cordova-android-plugins\build\.transforms\031de8c5ab4ccc04dd0cc8127e017c43\transformed\classes\classes.dex

这是 AdMob Doctor 的输出:

✖ googleads.g.doubleclick.net › RequestError: getaddrinfo ENOENT googleads.g.doubleclick.net ✔ package.json ✔ cordova.plugins.admob-plus-cordova.APP_ID_ANDROID ↓ Cordova Android 依赖项 [跳过] ❯ config.xml ✖ 平台[name="ios"]/preference[name="SwiftVersion"]:错误: 平台[name="ios"]/preference[name="SwiftVersion"]:缺少 / 无效 ✖ 平台[name="ios"]/preference[name="deployment-target"]: 错误:平台[name="ios"]/preference[name="deployment-target"]: 丢失/无效↓平台/ios/*.xcodeproj [跳过]✔ 插件/admob-plus-cordova/package.json ✔ admob-plus-cordova: 1.20.1

我尝试关注这个 *** 问题,但我没有看到任何对我的项目有任何影响的东西。 AdMob 插件以及客户端代码的 NPM 库只需添加一次。

另一件奇怪的事情是,您希望 Gradle 关心 /android 文件夹中的文件,而不是 node_modules 中的文件。为什么它与位于 android 文件夹之外的文件发生类冲突?这没有任何意义。

我现在无法构建或对我的项目做任何事情。我尝试更新 Android Studio、Gradle、清理和重建项目、删除 Android 文件夹并再次创建它……但什么也没有。

【问题讨论】:

【参考方案1】:

一段时间后解决!如果您将 Ionic 与 Capacitor 一起使用,并使用一些 Cordova 插件,那么您可能会遇到同样的问题。

问题在于 AdMob Plus 插件的安装,但在安装在 Capacitor 和 Cordova 中都有实现的其他插件时可能会发生。我仍然不确定是什么原因造成的,但不知何故,为电容器安装插件,也在“capacitor-cordova-android-plugins”文件夹中添加了插件。此文件夹包含用于在 Capacitor 中使用它们的 Cordova 插件——这就是它们与 Cordova 兼容的方式。


那么,这如何应用于错误?让我们再看一遍:

Type admob.plus.core.Ad$1 is defined multiple times: C:\Zerok\Dev\Proyectos\myapp\node_modules\@admob-plus\capacitor\android\build\.transforms\caf89848ec3f4a75afca2ab1d3cbcd43\transformed\classes\classes.dex, C:\Zerok\Dev\Proyectos\myapp\android\capacitor-cordova-android-plugins\build\.transforms\031de8c5ab4ccc04dd0cc8127e017c43\transformed\classes\classes.dex

Ad$1 类在两个地方定义。第一个是合法的:它来自一个简单的电容器安装插件。不过,第二个来自我之前提到的兼容性文件夹capacitor-cordova-android-plugins

当我们进入该文件夹并进入src/main/java 时,我们可以看到我们在 Ionic 应用程序中使用的所有插件的类。就我而言,这是我能看到的:

comcordovaorg 文件夹中,我可以找到我的 Cordova 插件所需的类,而我没有完整的电容器替代品。但是之前的 AdMob Plus,也在那里。

嗯,不应该。只需删除admob 文件夹(或者在您的情况下,是困扰您的双重定义插件),应用程序将再次开始编译。

【讨论】:

以上是关于无法进行新构建:“admob.plus.core.Ad$1 已定义多次”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法构建新的 iPad Xamarin 应用程序?

无法上传新的构建文件 XCode 6.3.2

向 AOSP 配置添加新符号时,silentoldconfig 无法构建

无法注册新的 FireBase 用户

无法安装在 iTunes 10 上构建的新测试应用程序

无法导入新的 Gradle 项目:找不到构建工具修订版 *.0.0