我使用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并从文件系统中删除它。
我该怎么做才能解决这个问题?
答案 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;
}