Ответ 1
Комментарий по умолчанию xml не будет содержать пакет в apk, вы можете декомпилировать его, чтобы протестировать его.
В моем проекте есть файлы 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();
}
Комментарий по умолчанию xml не будет содержать пакет в apk, вы можете декомпилировать его, чтобы протестировать его.
Я решил проблему, переместив файл в каталог 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);