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任务?
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |