自定义gradle pluginin导致“多个dex文件定义XXX”异常

时间:2018-05-28 07:14:31

标签: android android-studio gradle-plugin

我使用transform api定义了一个gralde插件,但是当我用它编译app时,无法删除目录build \ intermediates \ transforms \ myplugin下的jar,并抛出异常,如下所示:

Error converting bytecode to dex:
Cause:com.android.dex.DexException:Multiple dex files define Lcom/android/XXXX;

删除jar的唯一方法是退出android studio并从文件系统中删除它。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我的自定义gradle插件使用gradle-transform api和javassist来编辑java中的字节码。 javassit持久化一个classPool,它包含所有jar文件和其他类文件。所以解决方案:在编译后清除池:

private static javassist.ClassPool pool;
private static List<ClassPath> paths;
public static void addPath(String path){
    ClassPath classPath = pool.appendClassPath(path)
    paths.add(classPath);
}
public static void clearPath(){
    pool.clearImportedPackages();

    if(paths != null && paths.size()>0){
        for(ClassPath path : paths){
            pool.removeClassPath(path)
        }
        paths.clear()
    }
    pool = null;
}