计算JAR和AAR的代码行(LOC)

时间:2016-02-17 14:47:43

标签: android count dex loc

我们如何计算库文件中的代码行数。

例如,Jar或AAR。

注意 - CLOC是一个很棒的工具,但不幸的是,它不会处理“.class”文件。

转换JAR - > DEX和反编译DEX - >代码,是一种方法,但在转换和反编译过程中精度可能会丢失。

1 个答案:

答案 0 :(得分:1)

在某些情况下,您可以使用dex文件中的调试信息大致了解行数。

使用dexlib2,您可以执行以下操作:

public static void main(String[] args) throws IOException {
    DexFile dexFile = DexFileFactory.loadDexFile(args[0], 15);

    long lineCount = 0;

    for (ClassDef classDef: dexFile.getClasses()) {
        for (Method method: classDef.getMethods()) {
            MethodImplementation impl = method.getImplementation();
            if (impl != null) {
                for (DebugItem debugItem: impl.getDebugItems()) {
                    if (debugItem.getDebugItemType() == DebugItemType.LINE_NUMBER) {
                        lineCount++;
                    }
                }
            }
        }
    }

    System.out.println(String.format("%d lines", lineCount));
}

比较代码大小的替代指标可能是dex文件中的指令数。 e.g。

public static void main(String[] args) throws IOException {
    DexFile dexFile = DexFileFactory.loadDexFile(args[0], 15);

    long instructionCount = 0;

    for (ClassDef classDef: dexFile.getClasses()) {
        for (Method method: classDef.getMethods()) {
            MethodImplementation impl = method.getImplementation();
            if (impl != null) {
                for (Instruction instruction: impl.getInstructions()) {
                    instructionCount++;
                }
            }
        }
    }

    System.out.println(String.format("%d instructions", instructionCount));
}