config-file在cordova

时间:2018-04-11 10:57:29

标签: android cordova

edit-config is not working in config.xml in cordova

相关
❯ cordova --version
6.5.0

我想在AndroidManifest.xml

中添加以下配置
<intent-filter>
  <action android:name="android.intent.action.SEND" />
  <action android:name="android.intent.action.SEND_MULTIPLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="*/*" />
</intent-filter>

我检查了the official cordova docs以下示例

<config-file target="AndroidManifest.xml" parent="/manifest/application">
  <activity android:name="com.foo.Foo" android:label="@string/app_name">
    <intent-filter></intent-filter>
  </activity>
</config-file>

所以我将以下块添加到我的config.xml文件

<config-file target="AndroidManifest.xml" platform="android" parent="/manifest/application/activity" mode="merge">
  <intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
  </intent-filter>
</config-file>

没有任何成功。

注意:我使用的this plugin darryncampbell-cordova-plugin-intent使用config-file文件中的plugin.xml标记。但是同一个标记在config.xml文件中不起作用。

到目前为止,我用其他文档更加努力。正如the deprecated plugin cordova-plugin-intent

中所述
  

建议使用钩子或自定义配置插件,以确保自动添加上述XML,以防您想要重新结帐或删除/添加平台。

所以我去了the recommended plugin cordova-custom-config中列出的the related question about edit-config tag。并the documentation of this plugin tells me the exact same as the official cordova documentation about config-file tag in config.xml

  

但是:最近版本的Cordova / Phonegap CLI在config.xml中添加了官方支持和阻止功能(以前它们只在plugin.xml中使用)。

     

因此,如果您只想插入一个原生配置块或更改原生首选项,那么您可能根本不需要此插件。

我成功使用edit-configconfig.xml的自定义属性合并到AndroidManifest.xml,如下所示为绿色。

但我仍然不知道如何使用config-file更新AndroidManifest.xml,如上所示为红色。

❓所以问题是:关于config-file的cordova文档是错误的吗? 2018年向intent-filter添加自定义AndroidManifest.xml的最佳解决方案是什么?

关于cordova-custom-config

的说明

我添加了config.xml

<platform name="android">
  <allow-intent href="market:*" />
  <custom-config-file target="AndroidManifest.xml" parent="./application/activity">
    <intent-filter>
      <action android:name="android.intent.action.SEND" />
      <action android:name="android.intent.action.SEND_MULTIPLE" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:mimeType="*/*" />
    </intent-filter>
  </custom-config-file>
</platform>

该插件将自定义配置从config.xml应用到AndroidManifest.xml

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
  <intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
  </intent-filter>
  <intent-filter>
    <action android:name="com.darryncampbell.cordova.plugin.intent.ACTION" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

但自定义intent-filter未附加到intent-filter列表,但它取代了第一个

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
  <intent-filter android:label="@string/launcher_name">
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
    <action android:name="com.darryncampbell.cordova.plugin.intent.ACTION" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

2 个答案:

答案 0 :(得分:1)

使用cordova-custom-config设置多兄弟<intent-filter>元素时,必须确保它们具有唯一的标签属性作为插件distinguishes them by label。您可以在the example project中看到这一点。

这样的事情:

<custom-config-file target="AndroidManifest.xml" parent="./application/activity/[@android:name='MainActivity']">
    <intent-filter android:label="custom_filter">
        <action android:name="android.intent.action.SEND" />
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="*/*" />
    </intent-filter>
</custom-config-file>

免责声明:我是cordova-custom-config

的作者

答案 1 :(得分:0)

(这是一条评论,但我没有足够的代表)

我确认:<edit-config>在Cordova 7.0上不起作用(尽管<?xml version='1.0' encoding='utf-8'?> <widget ...> <platform name="android"> <config-file parent="/manifest/application" target="AndroidManifest.xml"> <test1 /> </config-file> <config-file parent="./application" target="AndroidManifest.xml"> <test2 /> </config-file> </platform> 可以),请参阅我的 config.xml

./application

...被完全忽略。

只需安装 cordova-custom-config 就可以解决此问题。 不过,您只需要使用相对的XPath,例如cordova-custom-config: Error updating config for platform 'android': Cannot use absolute path on element ,否则会出现错误:

{{1}}