我们如何计算库文件中的代码行数。
例如,Jar或AAR。
注意 - CLOC是一个很棒的工具,但不幸的是,它不会处理“.class”文件。
转换JAR - > DEX和反编译DEX - >代码,是一种方法,但在转换和反编译过程中精度可能会丢失。
答案 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));
}