与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-config
将config.xml
的自定义属性合并到AndroidManifest.xml
,如下所示为绿色。
但我仍然不知道如何使用config-file
更新AndroidManifest.xml
,如上所示为红色。
❓所以问题是:关于config-file
的cordova文档是错误的吗? 2018年向intent-filter
添加自定义AndroidManifest.xml
的最佳解决方案是什么?
我添加了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>
答案 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}}