无法进行新构建:“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 应用程序中使用的所有插件的类。就我而言,这是我能看到的:
在 com
、cordova
和 org
文件夹中,我可以找到我的 Cordova 插件所需的类,而我没有完整的电容器替代品。但是之前的 AdMob Plus,也在那里。
嗯,不应该。只需删除admob
文件夹(或者在您的情况下,是困扰您的双重定义插件),应用程序将再次开始编译。
【讨论】:
以上是关于无法进行新构建:“admob.plus.core.Ad$1 已定义多次”的主要内容,如果未能解决你的问题,请参考以下文章