gpt4 book ai didi

android - 将 Cordova Android 项目迁移到 AndroidX

转载 作者:行者123 更新时间:2023-12-05 00:09:26 25 4
gpt4 key购买 nike

我目前正在使用 AdMob 测试广告测试混合 Cordova/Android 应用程序。该应用程序使用一个自定义(即内部)插件,我可以通过该插件访问 Google Play Services 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"/>
config.xml该应用程序的文件声明以下内容
 <preference name="android-minSdkVersion" value="23" />
<preference name="android-targetSdkVersion" value="28" />

用于加载和显示奖励视频广告的 Java 代码遵循讨论 here .

虽然这行得通,但在这里困扰我的是我使用的是相当古老的 play-services-ads API。问题是如果我尝试按照说明升级到最新的 API shown here .我的修改 plugin.xml反射(reflect)使用最新 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"/>

问题是我不再能够编译应用程序。 Cordova CLI 报告了我在下面显示的一系列问题

iled with exit code 1 Error output: Note: path\to\app\platforms\android\CordovaLib\src\org\apache\cordova\engine\SystemCookieManager.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. path\to\app\platforms\android\app\src\main\AndroidManifest.xml:22:18-86 Error: Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:4:5-21:19 to override.



FAILURE:构建失败并出现异常。
  • 什么地方出了错:
    任务“:app:processDebugManifest”执行失败。

    Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:4:5-21:19 to override.


  • 我将问题缩小到 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
  • 作为权宜之计,我使用了this plugin它处理 androidx 和 android 库之间的不兼容性。虽然这可行,但我不太热衷于使用其他插件。我怀疑这个插件所做的只是确保 AndroidManifest.xml 是正确的,但我不知道怎么做。我将非常感谢任何能够解释在没有额外插件的情况下需要做什么才能让事情正常工作的人。
  • 最佳答案

    只需阅读:
    https://cordova.apache.org/announcements/2020/06/29/cordova-android-9.0.0.html
    为了确定 :

  • 清除您的 gradle 缓存目录(在 home/.gradle/caches 中)
  • 移除并添加android平台
  • 按照上面的文章查看您的要求

  • 然后 :
    在 config.xml 中添加以下内容:
    <preference name="AndroidXEnabled" value="true" />
    <preference name="GradlePluginKotlinEnabled" value="true" />
    <preference name="GradlePluginKotlinCodeStyle" value="official" />
    <preference name="GradlePluginKotlinVersion" value="1.3.50" />
    (AndroidXEnabled 偏好在 gradle.properties 中添加 jetifyer 和 androidX)
  • 添加 https://www.npmjs.com/package/cordova-plugin-androidx-adapter插入。
  • 然后准备android平台

  • 你的构建现在应该可以工作了

    关于android - 将 Cordova Android 项目迁移到 AndroidX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59429175/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com