我可以从我的 Cordova config.xml 控制 AndroidManifest.xml 文件的 <supports-screen> 设置吗?

Can I control the <supports-screen> setting of an AndroidManifest.xml file from my Cordova config.xml?

我希望在从 Cordova CLI 进行构建时能够控制 AndroidManifest.xml 文件中的 "supports-screens" 元素。

具体来说,我想控制 AndroidManifest.xml 内的以下元素:

    <supports-screens android:anyDensity="true" 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:resizeable="true" 
    android:smallScreens="true" 
    android:xlargeScreens="true" />

理想情况下,我希望 Cordova config.xml 文件中有一个可用的设置,可以让我直接控制支持的屏幕尺寸。

我试过像下面这样的 config.xml 设置,但无济于事:

<platform name="android">
    <supports-screen xlargeScreens="false"/>
</platform>

我知道我可以在我的源代码管理中存储一个自定义的 AndroidManfiest.xml 文件,然后使用 Cordova 挂钩简单地复制它,但这样做感觉有点笨拙,我担心未来的调整config.xml 文件可能不会进入 AndroidManifest.xml,因为我们忘记了我们在 after_prepare 挂钩期间覆盖生成的文件。

使用 Cordova CLI 可以实现我所要求的吗?如果是这样,我们将不胜感激 config.xml 实现此目标的示例。

据我所知,钩子是实现这一点的方法。 yeoman iconic framework generator 有一个很好的例子,它可以获取许多 android 特定标签并将它们复制到生成的 config.xml。参见 this file here from this slick ionic generator

Config.xml 来自代码 (https://github.com/diegonetto/generator-ionic/blob/master/templates/hooks/after_prepare/update_platform_config.js) 的示例:

<config-file target="AndroidManifest.xml" parent="/*>
    <supports-screens
        android:xlargeScreens="false"
        android:largeScreens="false"
        android:smallScreens="false" />
    <uses-permission android:name="android.permission.READ_CONTACTS" android:maxSdkVersion="15" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
</config-file>

挂钩可以自动 运行 从 hooks 文件夹中,这个特定的挂钩将驻留在 hooks/after_prepare 中,或者在配置中作为 <hook type="after_prepare" src="path/to/file/update_platform_config.js" />

有关钩子的更多文档可以在钩子自述文件中找到:http://cordova.apache.org/docs/en/dev/guide/appdev/hooks/index.html#Hooks%20Guide

编辑:更新 git 生成器和 cordova 文档的存储库。

this change in the latest cordova > 6.3 versions 开始,我们应该可以使用新的 edit-config 标签来编辑 Android Manifest.mf 文件,如下所示:

<edit-config file="AndroidManifest.xml" target="/manifest/supports-screens" mode="merge">
   <supports-screens android:resizeable=["true"| "false"]
                     android:smallScreens=["true" | "false"]
                     android:normalScreens=["true" | "false"]
                     android:largeScreens=["true" | "false"]
                     android:xlargeScreens=["true" | "false"]
                     android:anyDensity=["true" | "false"]
                     android:requiresSmallestWidthDp="integer"
                     android:compatibleWidthLimitDp="integer"
                     android:largestWidthLimitDp="integer"/>
</edit-config>

您还需要将 xmlns:android="http://schemas.android.com/apk/res/android" 添加到 config.xml 中的小部件元素。

更多信息there and there