本文整理汇总了Java中org.jf.dexlib2.dexbacked.DexBackedClassDef.getType方法的典型用法代码示例。如果您正苦于以下问题:Java DexBackedClassDef.getType方法的具体用法?Java DexBackedClassDef.getType怎么用?Java DexBackedClassDef.getType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.jf.dexlib2.dexbacked.DexBackedClassDef
的用法示例。
在下文中一共展示了DexBackedClassDef.getType方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: buildCode
import org.jf.dexlib2.dexbacked.DexBackedClassDef; //导入方法依赖的package包/类
public static Set<String> buildCode(File smaliDir, File dexFile, DexDiffInfo info) throws IOException,
RecognitionException {
Set<String> classes = new HashSet<String>();
Set<DexBackedClassDef> classDefs = new HashSet<DexBackedClassDef>();
classDefs.addAll(info.getModifiedClasses());
classDefs.addAll(info.getAddedClasses());
final ClassFileNameHandler outFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
final ClassFileNameHandler inFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
DexBuilder dexBuilder = DexBuilder.makeDexBuilder();
File smaliFile;
String className;
for (DexBackedClassDef classDef : classDefs) {
ApkPatch.currentClassType = classDef.getType();
className = TypeGenUtil.newType(classDef.getType());
AfBakSmali.disassembleClass(classDef, outFileNameHandler, getBuildOption(classDefs, 19), false, false);
smaliFile = inFileNameHandler.getUniqueFilenameForClass(className);
classes.add(className.substring(1, className.length() - 1).replace('/', '.'));
SmaliMod.assembleSmaliFile(smaliFile, dexBuilder, true, true);
}
dexBuilder.writeTo(new FileDataStore(dexFile));
return classes;
}
示例2: scanClasses
import org.jf.dexlib2.dexbacked.DexBackedClassDef; //导入方法依赖的package包/类
public static Set<DexBackedClassDef> scanClasses(File smaliDir, List<File> newFiles) throws PatchException {
Set<DexBackedClassDef> classes = Sets.newHashSet();
try {
for (File newFile : newFiles) {
DexBackedDexFile newDexFile = DexFileFactory.loadDexFile(newFile, 19, true);
Set<? extends DexBackedClassDef> dexClasses = newDexFile.getClasses();
classes.addAll(dexClasses);
}
final ClassFileNameHandler outFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
final ClassFileNameHandler inFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
for (DexBackedClassDef classDef : classes) {
String className = classDef.getType();
ApkPatch.currentClassType = null;
AfBakSmali.disassembleClass(classDef, outFileNameHandler, getBuildOption(classes, 19), true, true);
File smaliFile = inFileNameHandler.getUniqueFilenameForClass(className);
}
} catch (Exception e) {
throw new PatchException(e);
}
return classes;
}
示例3: loadLocalClasses
import org.jf.dexlib2.dexbacked.DexBackedClassDef; //导入方法依赖的package包/类
private static synchronized void loadLocalClasses(DexBackedDexFile dexFile) {
/*
* Must collect all local classes before any analysis because an API method is defined as
* any non-local method. In multi-dex situations, there many be many API calls which are not
* local to a single DEX.
*/
for (DexBackedClassDef classDef : dexFile.getClasses()) {
String classPath = classDef.getType();
localClasses.add(classPath);
}
}
示例4: disassemble
import org.jf.dexlib2.dexbacked.DexBackedClassDef; //导入方法依赖的package包/类
public static File disassemble(File smaliDir, DexBackedClassDef dexBackedClassDef) throws PatchException {
Set<DexBackedClassDef> classes = Sets.newHashSet();
classes.add(dexBackedClassDef);
final ClassFileNameHandler outFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
final ClassFileNameHandler inFileNameHandler = new ClassFileNameHandler(smaliDir, ".smali");
String className = dexBackedClassDef.getType();
AfBakSmali.disassembleClass(dexBackedClassDef, outFileNameHandler, getBuildOption(classes, 19), true, false);
File smaliFile = inFileNameHandler.getUniqueFilenameForClass(className);
return smaliFile;
}
示例5: analyze
import org.jf.dexlib2.dexbacked.DexBackedClassDef; //导入方法依赖的package包/类
public void analyze() {
for (DexBackedClassDef classDef : dexFile.getClasses()) {
String classPath = classDef.getType();
DexClass dexClass;
try {
dexClass = new DexClass(classDef, fullMethodSignatures);
failedClasses++;
} catch (Exception e) {
Logger.warn("Failed to analyze class: " + classDef.getType() + "; skipping", e);
continue;
}
classPathToClass.put(classPath, dexClass);
for (DexMethod method : dexClass.getMethodSignatureToMethod().values()) {
String methodDescriptor = ReferenceUtil.getMethodDescriptor(method.getMethod());
methodDescriptorToMethod.put(methodDescriptor, method);
}
/*
* We want API counts here, not method calls to local classes.
* In Dalvik, you can reference a method or field of a parent class by referring to
* the child class. This means, to get *true* API fields and method calls, you'd
* need to map method calls to parent methods up the class hierarchy of Android
* framework classes. This is computationally expensive and there are multiple
* framework versions. As an approximation, remove field and method references
* to local, non-support classes.
*/
dexClass.getApiCounts().keySet()
.removeIf(k -> isLocalNonSupportClass(getComponentBase(k.getDefiningClass())));
dexClass.getFieldReferenceCounts().keySet()
.removeIf(k -> isLocalNonSupportClass(getComponentBase(k.getDefiningClass())));
for (DexMethod dexMethod : dexClass.getMethodSignatureToMethod().values()) {
dexMethod.getApiCounts().keySet().removeIf(
k -> isLocalNonSupportClass(getComponentBase(k.getDefiningClass())));
dexMethod.getFieldReferenceCounts().keySet().removeIf(
k -> isLocalNonSupportClass(getComponentBase(k.getDefiningClass())));
}
Utils.rollUp(opCounts, dexClass.getOpCounts());
Utils.rollUp(apiCounts, dexClass.getApiCounts());
Utils.rollUp(stringReferenceCounts, dexClass.getStringReferenceCounts());
Utils.rollUp(fieldReferenceCounts, dexClass.getFieldReferenceCounts());
Utils.rollUp(methodAccessorCounts, dexClass.getMethodAccessorCounts());
Utils.rollUp(classAccessorCounts, dexClass.getClassAccessors());
fieldCount += dexClass.getFieldCount();
annotationCount += dexClass.getAnnotationCount();
registerCount += dexClass.getRegisterCount();
instructionCount += dexClass.getInstructionCount();
tryCatchCount += dexClass.getTryCatchCount();
debugItemCount += dexClass.getDebugItemCount();
cyclomaticComplexity += dexClass.getCyclomaticComplexity();
}
if (!classPathToClass.isEmpty()) {
cyclomaticComplexity /= classPathToClass.size();
}
}