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" />
Надеюсь, поможет