重建应用程序时,Cordova Android 未将自定义 URL Scheme 插件中的所有 xml 添加到 AndroidManifest

Cordova Android not adding all xml from Custom URL Scheme plugin to AndroidManifest when rebuilding app

我将插件 https://github.com/EddyVerbruggen/Custom-URL-scheme 添加到我的 cordova 项目中。

该插件在 plugin.xml 文件中有这个 Android:

<config-file target="AndroidManifest.xml" parent="/manifest/application/activity">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="$URL_SCHEME"/>
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="$ANDROID_SCHEME"
          android:host="$ANDROID_HOST"
          android:pathPrefix="$ANDROID_PATHPREFIX" />
  </intent-filter>
</config-file>

安装插件时,我提供 CUSTOM_URL 变量的值:

cordova plugin add cordova-plugin-customurlscheme --variable URL_SCHEME=appscheme

然后我 运行 模拟器中的应用程序与 cordova 运行 android --emulator。 Android 清单已正确生成,包括两个 intent 过滤器块:

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="appscheme"/>
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme=" " android:host=" " android:pathPrefix="/" />
  </intent-filter>

一切都按预期进行。

但是,如果我随后对我的项目进行任何更改,并再次通过 运行ning cordova 运行 android 重建应用程序,那么其中一个 intent 过滤器块将丢失Android 清单文件,插件功能不起作用。

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme=" " android:host=" " android:pathPrefix="/" />
  </intent-filter>

我需要删除插件,然后再添加回来,才能正确生成 AndroidManifest.xml。

知道为什么它会在重建时删除其中一个 intent-filter 块吗?

感谢您的帮助!

我在阅读此 post 上已接受解决方案的第一条评论后找到了解决方案:

我需要从我的 config.xml 文件中删除一个:

    <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity[@android:name='MainActivity']">
        <activity android:theme="@style/Full" />
    </edit-config>

而是在项目中使用 cordova-custom-config 插件,在 config.xml:

<custom-preference name="android-manifest/application/activity/@android:theme" value="@style/Full" />

现在一切都在进入 AndroidManifest.xml 文件。