Подтвердить что ты не робот

Как удалить комментарии в необработанных XML файлах с помощью Gradle, когда файл упакован

В моем проекте есть файлы XML в каталоге ресурсов raw моего проекта Android:

Макет проекта

Я хотел бы удалить комментарии (<!-- ... -->) из этих файлов, когда он упакован в файл .apk:

Пример исходного файла:

<?xml version="1.0" encoding="utf-8"?>
    <celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="celebrations_schema.xsd">

    <!-- This is a very important comment useful during development -->
    <celebration name="celebration 1" type="oneTime" ... />

    <!-- This is another very important comment useful during development -->
    <celebration name="celebration 2" type="reccurent" ... />
</celebrations>

Ожидаемый отфильтрованный файл:

<?xml version="1.0" encoding="utf-8"?>
<celebrations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:noNamespaceSchemaLocation="celebrations_schema.xsd">
    <celebration name="celebration 1" type="oneTime" ... />
    <celebration name="celebration 2" type="reccurent" ... />
</celebrations>

Я нашел несколько интересных подобных решений здесь, но я не могу справиться с этим. Добавление этих строк в мое приложение build.gradle

processResources {
    filesMatching('**/myxmlfiletobestrippedfromcomments.xml') {
        filter {
            String line -> line.replaceAll('<!--.*-->', '')
        }
    }
}

генерирует следующую ошибку:

Error:(86, 0) Gradle DSL method not found: 'processResources()'

Для открытия и разбора XML файла из java-кода я использую следующий метод:

InputStream definition = context.getResources().openRawResource(resId);
...
try {
    XmlPullParser parser = Xml.newPullParser();
    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
    parser.setInput(definition, null);
    parser.nextTag();
    return parseCelebrations(parser);
} finally {
    definition.close();
}    
4b9b3361

Ответ 1

Комментарий по умолчанию xml не будет содержать пакет в apk, вы можете декомпилировать его, чтобы протестировать его.

Ответ 2

Я решил проблему, переместив файл в каталог res\xml. В этом случае XML файл "скомпилирован" и нечитабелен, если я открою архив APK.

Однако мне пришлось изменить открытие и код разбора моего XML файла на что-то вроде этого:

XmlResourceParser xmlResourceParser = context.getResources().getXml(resId);
...
// I had to add this line (to skip START_DOCUMENT tag, which was not needed
// with opening from the `raw` directory)
while (xmlResourceParser.next() != XmlPullParser.START_TAG);

return parseCelebrations(xmlResourceParser);