Пользовательский плагин Gradle вызывает исключение "Несколько файлов dex определяют XXX" - PullRequest
0 голосов
/ 28 мая 2018

Я определил плагин gralde, используя transform api, но когда я скомпилировал приложение с ним, jar-файлы в каталоге build \ middleates \ transforms \ myplugin не могут быть удалены, и выдает исключение следующим образом:

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

Единственный способ удалить jar - это выйти из android studio и удалить его из файловой системы.

что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 29 мая 2018

Мой настроенный плагин gradle использовал API-интерфейсы gradle-transform и 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;
}
...