android - Android AdMob 实现 play-services 问题
问题描述
我正在尝试将 AdMob 添加到我的应用中。我将下面的行添加到build.gradle
implementation 'com.google.android.gms:play-services-ads:18.2.0'
但是,同步后,我开始收到以下错误:
错误:清单合并失败:来自 [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 的属性 application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) 也是出现在 [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory)。建议:将 'tools:replace="android:appComponentFactory"' 添加到 AndroidManifest.xml:6:5-28:19 的元素以覆盖。”
我该怎么办?
构建.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "29.0.1"
defaultConfig {
applicationId "com.bartech.myapp"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:design:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.android.gms:play-services-ads:18.2.0'
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.bartech.myapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.bartech.myapp.quiz1"/>
<activity android:name="com.bartech.myapp.summary"/>
<activity android:name="com.bartech.myapp.info"/>
</application>
</manifest>
解决方案
问题正在发生,因为您正在使用诸如 的支持库support:appcompat
,support:support-v4
以及已迁移到 AndroidX 的最新版本play-services-ads
(18.2.0)。
因此,您收到此错误是因为您的应用正在使用支持库但play-services-ads
已经在使用 AndroidX。
为了修复:
1) 将您的应用迁移到 AndroidX(推荐)。更多信息在这里
2)使用旧版本的播放服务广告(例如'com.google.android.gms:play-services-ads:16.0.0'
)
第二个选项可能会解决您的问题,因为play-services-ads:16.0.0
它仍在使用支持库。
推荐阅读
- python - Python将列表作为元素附加到数据框
- php - 当我有一个包罗万象的 mod_rewrite 规则时,为什么 Apache 会尝试从子目录中提供内容?
- python - python pandas:用字典中的值替换单元格
- redis - 为什么我不能在 redis 中的这个排序集上使用 ZRANGEBYLEX?
- web-scraping - 为了让 BeautifulSoup 正确抓取,是否有任何具体声明?
- python - 错误在一个线程中创建的 SQLite 对象只能在同一个线程中使用
- c - 操作系统:在中断被阻塞的情况下切换到另一个进程不是错误的做法吗?
- ios - 下载图像后触发collectionView重新加载的完成处理程序-Xcode [SWIFT]
- android - 在android中将时间戳转换为当前小时和分钟
- google-bigquery - 将数据从 RDBMS 加载到 Bigquery