2014-02-07 42 views
2

我正在製作一個應用程序,它使用dex2jar庫將dex文件(從android應用程序包)轉換爲jar文件。但是這個過程需要很長時間,特別是由於android.support。 x類。有沒有辦法讓dex2jar在反編譯時跳過某些類(我們指定的)?如何使dex2jar在將dex轉換爲jar時跳過某些類?

這是我目前使用的代碼:

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); 
+0

@JesusFreke ...我會試一試..但有一點疑問..爲什麼我們要指定API級別? – niranjan94

+0

有沒有什麼辦法可以直接從apk文件讀取classes.dex? – niranjan94

+1

@ niranjan94 Api級別用於確定要使用哪組操作碼。 DexFileFactory.loadDexFile接受一個dex文件或一個apk。 – JesusFreke