Как заставить 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);