2

我想为我的 android 应用程序设置一些不需要的设置,以便 Google 的 Play 商店会认识到它对平板电脑也很有用。我需要将这两行添加到我的 AndroidManifest.xml 中:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />

由于我使用PhoneGap build 来编译我的应用程序,我需要以某种方式将它们添加到config.xml文件中,所以PhoneGap 会在构建过程中将它们添加到正确的位置(我猜)......但没有成功!我需要使用任何特定的语法来通过config.xml文件添加使用功能吗?

请注意,我通过在我的config.xml文件中添加以下行来设置minSdkVersion做了几乎相同的事情,并且在构建后我将它放在我的清单文件中:

<preference name="android-minSdkVersion" value="11" />
4

2 回答 2

2

找到了解决方案!基于PhoneGap Documentation - Config File Elements,只需在我的 'config.xml' 文件中添加如下内容:

<gap:config-file platform="android" parent="/manifest" mode="add">
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.telephony" android:required="false" />
</gap:config-file>

还需要向小部件节点添加间隙命名空间:

xmlns:gap="http://phonegap.com/ns/1.0"
于 2015-04-06T08:14:14.177 回答
1

<config-file>看起来超级有用的覆盖......唉,这似乎是PhoneGap唯一的功能。对于 Cordova,您可能需要使用钩子。

一个很好的例子可以在这里找到

我修改了脚本以添加我需要的功能(我需要 GPS 和相机作为可选功能)。

module.exports = function (context) {

var fs = context.requireCordovaModule('fs'),
    path = context.requireCordovaModule('path');

var platformRoot = path.join(context.opts.projectRoot, 'platforms/android');


var manifestFile = path.join(platformRoot, 'AndroidManifest.xml');

if (fs.existsSync(manifestFile)) {

    fs.readFile(manifestFile, 'utf8', function (err, data) {
        if (err) {
            throw new Error('Unable to find AndroidManifest.xml: ' + err);
        }

        var insertAt = data.indexOf("</manifest>");

        var optionalFeatures = "<uses-feature android:name=\"android.hardware.LOCATION\" android:required=\"false\"/><uses-feature android:name=\"android.hardware.location.GPS\" android:required=\"false\"/><uses-feature android:name=\"android.hardware.camera\" android:required=\"false\"/><uses-feature android:name=\"android.hardware.camera.autofocus\" android:required=\"false\"/>";

        var result = data.slice(0, insertAt) + optionalFeatures + data.slice(insertAt);

        fs.writeFile(manifestFile, result, 'utf8', function (err) {
            if (err) throw new Error('Unable to write into AndroidManifest.xml: ' + err);
        })

    });
}

};

然后在 config.xml 中设置钩子

 <hook type="after_build" src="scripts/afterBuild.js" />

希望能帮助到你

于 2016-07-04T15:50:33.190 回答