2014-02-07 9 views
2

나는 dex2jar 라이브러리를 사용하여 dex 파일 (안드로이드 응용 프로그램 패키지에서)을 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를 사용하고 새 덱스 파일을 만들 수

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 수준은 사용할 opcode 집합을 결정하는 것입니다. DexFileFactory.loadDexFile은 dex 파일 또는 apk를 허용합니다. – JesusFreke