android – 如何在文件打包时用Gradle删除原始XML文件中的注释

我的项目在我的 Android项目的原始资源目录中有XML文件

当我打包在.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>

我找到了一些有趣的类似解决方here,但我无法管理它的工作.在我的应用程序build.gradle中添加这些行

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

会产生以下错误

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

对于从java代码打开和解析XML文件,我使用以下方法

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,你可以反编译来测试它.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...