PhoneGap - сделать функцию Android необязательной

Я хочу, чтобы для моего приложения для Android не потребовалось установки нескольких параметров, поэтому Google 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" />

2 ответа

Решение

Нашел решение! Основано на документации PhoneGap - элементы файла конфигурации, просто нужно добавить что-то вроде этого в мой файл 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"

<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" />

Надеюсь, поможет

Другие вопросы по тегам