当前位置: 首页>>代码示例>>Java>>正文


Java DexBackedClassDef.getType方法代码示例

本文整理汇总了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;
}
 
开发者ID:alibaba,项目名称:atlas,代码行数:25,代码来源:SmaliDiffUtils.java

示例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;
    }
 
开发者ID:alibaba,项目名称:atlas,代码行数:25,代码来源:SmaliDiffUtils.java

示例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);
    }
}
 
开发者ID:CalebFenton,项目名称:apkfile,代码行数:12,代码来源:DexFile.java

示例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;

    }
 
开发者ID:alibaba,项目名称:atlas,代码行数:13,代码来源:SmaliDiffUtils.java

示例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();
    }
}
 
开发者ID:CalebFenton,项目名称:apkfile,代码行数:57,代码来源:DexFile.java


注:本文中的org.jf.dexlib2.dexbacked.DexBackedClassDef.getType方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。