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

red*_*nzz 6 java android proguard gradle

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

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
Run Code Online (Sandbox Code Playgroud)

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

但是,当它进入程序时,Android Builder中定义的默认proguard任务会将classes.jar文件作为libraryJars.

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