Gradle实现资源文件的overlay

有时候一个Android Project需要用在不同的产品中,这些产品的需求各有差异,但又想使用同一套代码,一种做法是在res/value中写一个config.xml, 通过config.xml对各种需求进行配置。如果仅仅是写这样一个配置文件,这还是不够的,因为这个project应用于不同的产品时,它们的config.xml是一样的,那么如何做到不对这个project不做任何修改,而实现个产品不同的需求呢?
aapt的overlay机制此时就派上用场了。在项目的buld.gradle中增加aaptOptions

    aaptOptions {
        def resOverlayPath = '../../../os_extends/configs/DemoProject/src/main/res'
        File dir = file(resOverlayPath)
        if (dir.exists()) {
            additionalParameters '-S',
                    resOverlayPath,
                    '--auto-add-overlay'
            noCompress 'foo', 'bar'
            ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
        }
    }

DemoProject的config.xml的路径是src/main/res/values/config.xml, 产品的配置文件路径位于resOverlayPath/value/config.xml , 编译之后,打包生成的apk里面的config.xml是resOverlayPath下的,而不是DemoProject/src/main/res下的。
这样不同产品在各自的resOverlayPath下进行配置就实现了各自的需求。

猜你喜欢

转载自blog.csdn.net/liwei5730/article/details/79364708