Как заставить dex2jar пропускать определенные классы при конвертации dex в jar?

Я делаю приложение, которое использует библиотеку dex2jar для преобразования файла dex (из пакета приложения для Android) в файл jar. Но процесс занимает довольно много времени, особенно из-за поддержки android.support.х классов. Есть ли способ заставить dex2jar пропускать определенные классы (которые мы указываем) при декомпиляции?

Это код, который я сейчас использую:

DexFileReader reader = new DexFileReader(new File(PackageDir));
Dex2jar.from(reader)
.reUseReg(reuseReg)
.topoLogicalSort(topologicalSort || topologicalSort1)
.skipDebug(!debugInfo)
.optimizeSynchronized(optmizeSynchronized)
.printIR(printIR)
.verbose(verbose)
.to(file);

1 ответ

Решение

Вы можете использовать dexlib2 для загрузки файла dex, удаления классов, которые вам не интересны, а затем создать новый файл dex

int api = 19;
DexFile dexFile = DexFileFactory.loadDexFile(dexFilePath, api);

List<ClassDef> classes = new ArrayList<ClassDef>();

for (ClassDef classDef: dexFile.getClasses()) {
    if (!classDef.getType().startsWith("Landroid/support/")) {
        classes.add(classDef);
    }
}

dexFile = new ImmutableDexFile(classes);
DexFileFactory.writeDexFile(dexFilePath, dexFile);
Другие вопросы по тегам