PhoneGap-使Android功能成为可选功能

PhoneGap-使Android功能成为可选功能,android,cordova,phonegap-build,uses-feature,Android,Cordova,Phonegap Build,Uses Feature,我想为我的android应用程序设置一些不需要的设置,这样谷歌的play store就会认识到它对平板电脑也很有用。 我需要将以下两行添加到我的AndroidManifest.xml中: <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.telephony" android:re

我想为我的android应用程序设置一些不需要的设置,这样谷歌的play store就会认识到它对平板电脑也很有用。 我需要将以下两行添加到我的AndroidManifest.xml中:

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

因为我使用PhoneGap构建来编译我的应用程序,所以我需要以某种方式将它们添加到config.xml文件中,以便PhoneGap在构建过程中将它们添加到正确的位置(我猜)。。。但是没有成功!是否需要使用任何特定语法通过config.xml文件进行添加

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

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

找到了解决方案!基于,只需在我的'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>
看起来非常有用,可以覆盖。。。。唉,这似乎是PhoneGap唯一的功能。对于Cordova,您可能需要使用挂钩

我们可以找到一个很好的例子

我修改了脚本,添加了我需要的功能(我需要GPS和摄像头作为可选功能)

module.exports=函数(上下文){
var fs=context.requireRecordovaModule('fs'),
path=context.requireRecordovaModule('path');
var platformRoot=path.join(context.opts.projectRoot,'platformRoot/android');
var manifestFile=path.join(platformRoot'AndroidManifest.xml');
if(fs.existsSync(manifestFile)){
readFile(manifestFile,'utf8',函数(err,data){
如果(错误){
抛出新错误('无法找到AndroidManifest.xml:'+错误);
}
var insertAt=data.indexOf(“”);
var optionalFeatures=“”;
var结果=data.slice(0,insertAt)+可选特征+data.slice(insertAt);
writeFile(manifestFile,result,'utf8',function(err){
if(err)抛出新错误('无法写入AndroidManifest.xml:'+err);
})
});
}
})

然后在config.xml中设置钩子

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


希望它有助于

感谢@JamesBaxter对您的关注。关键是我在问这个问题之前就已经检查过了,但这并没有帮助,因为我想让它们不是必需的,而不是让它们成为应用程序所必需的。。。或者也许我遗漏了一些东西,或者我的错误是没有正确理解-我已经把问题说得更清楚了,以防其他人可以帮助我的坏蛋选择不好的标题。。。谢谢你的改进:)即使你不把它们放进去,它也会被列在平板电脑上,不是吗?不过,你需要在列表中添加一个平板电脑屏幕截图。
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);
        })

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