从proguard Android Gradle Buildscript中排除某些模块

时间:2014-05-22 18:20:50

标签: java android gradle proguard

我有以下形式的项目结构:

Root Project +------ Module A +------ Module B 现在模块B是一个庞大的项目,但我使用API​​来访问它,所以我想在运行时加载模块B的类。因此我想编译它,但在一个单独的DEX文件中。我可以通过以下要点编译一个单独的DEX文件:

https://gist.github.com/nickcaballero/7045993

在调试编译模式下,这可以正常工作,因为可以通过此表单中的buildscript更改DEXed库

def libraryFiles = new ArrayList<?>()
        variant.dex.libraries.each {
            File file ->
                // Exclude Module B from Dex library list
                if (!file.absolutePath.contains("ModuleB/unspecified/classes.jar")) {
                    libraryFiles.add(file);
                }
        }

        variant.dex.libraries = libraryFiles

现在这很有效,因为AndroidBuilder没有做proguard时,只是使用variant.dex.libraries来创建DEX文件,排除它很容易。当需要做中级班的进步时,痛苦就来了。由于ModuleB是编译时依赖项(出于资源集成/布局等目的),因此其类被编译到构建目录中。

然而,当它获得进展时,Android Builder中定义的默认proguard任务会将classes.jar文件作为libraryJars投入。

最后,任务创建classes-proguard,其中包含上述库Jars中的所有类。然后得到DEXed,并且通过Runtime加载的类存在于其中。有没有办法排除某些罐子没有被送入默认的proguard任务?

0 个答案:

没有答案