【问题标题】:How to make dex2jar to skip certain classes while converting dex to jar?如何让 dex2jar 在将 dex 转换为 jar 时跳过某些类?
【发布时间】:2014-03-04 23:54:40
【问题描述】:

我正在制作一个使用 dex2jar 库将 dex 文件(来自 android 应用程序包)转换为 jar 文件的应用程序。但是这个过程需要很长时间,尤其是由于 android.support.x 类。有没有办法让 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);

【问题讨论】:

    标签: java android jar dex dex2jar


    【解决方案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);
    

    【讨论】:

    • @JesusFreke...我会试一试..但是有个小疑问..我们为什么要指定 API 级别?
    • 有什么方法可以直接从 apk 文件中读取 classes.dex 吗?
    • @niranjan94 Api 级别是决定使用哪组操作码。 DexFileFactory.loadDexFile 接受 dex 文件或 apk。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多