Android

Is there a way to get count of number methods used in a jar file

Есть ли способ получить количество числовых методов, используемых в файле jar

Могу ли я получить количество всех методов, используемых в файле jar? Мой APK использует определенные внешние JAR-файлы, и существует несколько классов, около сотни, если быть точным.

Я использовал декомпиляторы, такие как dex2jar JAD и другие, чтобы назвать несколько, но все они, похоже, показывают методы только в определенном файле класса.

Есть ли способ, которым я могу получить общее количество?

Переведено автоматически
Ответ 1

Вы можете преобразовать jar в файл dex, а затем извлечь количество ссылок на методы из заголовка. Оно хранится как целое число в конце без знака со смещением 88 (0x58).

dx --dex --output=temp.dex orig.jar
cat temp.dex | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"'

Имейте в виду, что это количество уникальных методов, на которые ссылаются, а не количество ссылок на методы. Другими словами, если на конкретный метод дважды ссылаются в файле dex, он будет подсчитан только один раз при подсчете в заголовке. И когда вы импортируете этот jar в свой apk, ссылки на методы, которые являются общими для этих двух, дедуплицируются, поэтому общее количество ссылок на методы в конечном объединенном apk будет <= сумма двух.

Ответ 2

Этот плагин gradle https://github.com/KeepSafe/dexcount-gradle-plugin покажет вам общее количество методов после сборки, а также сгенерирует отчет с количеством методов в каждом пакете. Который после сортировки выглядит следующим образом:

30145    com
27704 org
20950 android
17140 org.spongycastle
16605 android.support
9760 com.google
8930 com.fasterxml.jackson
8930 com.fasterxml
8633 android.support.v4
7020 com.fasterxml.jackson.databind
6426 android.support.v7
5311 com.google.protobuf
4705 org.spongycastle.crypto
...

В сочетании с командой gradle

.\gradlew app:dependencies

который выводит дерево зависимостей, вы получите хороший обзор того, для какой зависимости требуется сколько методов.

Ответ 3

Cyvis может прочитать файл .jar or .class и покажет как общее количество методов, так и цикломатическую сложность и количество инструкций для каждого метода. Графический интерфейс немного ... переносимый ... но я запускал его в Ubuntu, и там написано, что он работает в Windows. Кажется довольно хорошим для первичного источника информации о том, насколько вероятно, что библиотека доставит вам проблемы.

Ответ 4

Используйте http://github.com/mihaip/dex-method-counts для вычисления количества методов отовсюду (JAR, AAR, DEX, APK)

DEX или APK:

./dex-method-counts <your_file_path>.DEX или ./dex-method-counts <your_file_path>.APK

JAR

просто создайте DEX из JAR, как было показано выше, вот так:

<your_path_to_android_buil_tools>/dx --dex --output=temp.dex orig.jar

и затем

./dex-method-counts temp.dex

AAR

Сначала распакуйте его (да, на самом деле это ZIP), а затем используйте classes.jar как показано выше в разделе JAR

unzip mylib.aar -d mylib

dx --dex --output=temp.dex mylib/classes.jar

dex-method-counts temp.dex

java android