Dro*_*dOS 1 android cordova google-play-services cordova-cli androidx
我目前正在使用 AdMob 测试广告测试混合 Cordova/Android 应用程序。该应用程序使用一个自定义(即内部)插件,我从中可以访问 Google Play 服务 AdMob API。plugin.xml文件的相关位如下
<platform name="android">
<preference name="PLAY_SERVICES_VERSION" default="17.2.0"/>
<preference name="ADMOB_APP_ID" default="ca-app-pub-...."/>
<framework src="com.android.support:appcompat-v7:27.1.0" />
<framework src="com.google.android.gms:play-services-ads:17.2.0"/>
Run Code Online (Sandbox Code Playgroud)
该config.xml应用程序的文件声明以下内容
<preference name="android-minSdkVersion" value="23" />
<preference name="android-targetSdkVersion" value="28" />
Run Code Online (Sandbox Code Playgroud)
加载和显示激励视频广告的 Java 代码遵循此处的讨论。
虽然这行得通,但我在这里困扰的是我使用了一个相当古老的play-services-adsAPI。问题是,如果我尝试根据此处显示的说明升级到最新的 API 。我修改后的plugin.xml文件反映了使用最新 API 所需的更改
<platform name="android">
<preference name="PLAY_SERVICES_VERSION" default="18.3.0"/>
<preference name="ADMOB_APP_ID" default="ca-app-pub-..."/>
<framework src="com.android.support:appcompat-v7:28.0.0" />
<framework src="com.google.android.gms:play-services-ads:18.3.0"/>
Run Code Online (Sandbox Code Playgroud)
问题是我无法再编译该应用程序。Cordova CLI 报告了我在下面显示的一系列问题
带有退出代码 1 错误输出:注意:path\to\app\platforms\android\CordovaLib\src\org\apache\cordova\engine\SystemCookieManager.java 使用或覆盖已弃用的 API。注意:使用 -Xlint:deprecation 重新编译以获取详细信息。path\to\app\platforms\android\app\src\main\AndroidManifest.xml:22:18-86 错误:属性 application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) 来自 [androidx.core:core: 1.0.0] AndroidManifest.xml:22:18-86 也出现在 [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4. app.CoreComponentFactory)。建议:将 'tools:replace="android:appComponentFactory"' 添加到 AndroidManifest.xml:4:5-21:19 的元素以覆盖。
FAILURE:构建失败,出现异常。
清单合并失败:来自 [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 的属性 application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) 也出现在 [com.android.support :support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory)。建议:将 'tools:replace="android:appComponentFactory"' 添加到 AndroidManifest.xml:4:5-21:19 的元素以覆盖。
我缩小了gms:play-services-ads似乎引入androidx与旧式 android 库不兼容的库的问题。上面来自 Gradle 的有用建议 - ** add tools:replace="android:appComponentFactory ** 没有帮助,因为无法识别节点的tools:replace属性application。
我已经实施的解决方案如下
我创建了一个build-extras.gradle下文件path/to/myapp/platforms/android与行
android.useAndroidX=true android.enableJetifier=true
作为权宜之计,我使用了这个插件来处理 androidx 和 android 库之间的不兼容性。虽然这有效,但我不太热衷于使用其他插件。我怀疑这个插件所做的只是确保 AndroidManifest.xml 是正确的,但我无法看到如何。我将非常感谢任何能够解释需要做什么才能在没有额外插件的情况下使工作正常进行的人。
Luc*_*as 8
只需阅读:https : //cordova.apache.org/announcements/2020/06/29/cordova-android-9.0.0.html
为了确定 :
然后 :
在 config.xml 中添加以下内容:
<preference name="AndroidXEnabled" value="true" />
<preference name="GradlePluginKotlinEnabled" value="true" />
<preference name="GradlePluginKotlinCodeStyle" value="official" />
<preference name="GradlePluginKotlinVersion" value="1.3.50" />
Run Code Online (Sandbox Code Playgroud)
(AndroidXEnabled 首选项在 gradle.properties 中添加 jetifyer 和 androidX)
你的构建现在应该可以工作了
| 归档时间: |
|
| 查看次数: |
10322 次 |
| 最近记录: |