0
我們如何統計庫文件中的代碼行數。JAR和AAR的代碼行數(LOC)
例如,JAR或AAR。
注 - CLOC是一個很棒的工具,但不幸的是,它不處理「.class」文件。
轉換JAR-> DEX和反編譯DEX->代碼是實現它的一種方法,但在轉換和反編譯期間可能會丟失精度。
我們如何統計庫文件中的代碼行數。JAR和AAR的代碼行數(LOC)
例如,JAR或AAR。
注 - CLOC是一個很棒的工具,但不幸的是,它不處理「.class」文件。
轉換JAR-> DEX和反編譯DEX->代碼是實現它的一種方法,但在轉換和反編譯期間可能會丟失精度。
在某些情況下,您可能能夠使用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文件中的指令數的替代指標。例如
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));
}
「我們如何計算庫文件中的代碼行數」 - 您不知道。這是一個毫無意義的概念。 「轉換JAR - > DEX和反編譯DEX - >代碼是實現它的一種方式,但在轉換和反編譯過程中可能會丟失精度」 - 然後迫使庫的開發人員用槍來交出源代碼代碼到圖書館。請注意,在某些司法轄區這可能是非法的。只有當你有源代碼時纔可能計算源代碼行。其他度量標準 - 類別計數,方法計數等 - 可以在已編譯的Java/DEX字節碼上執行。 – CommonsWare