Intereting Posts
Как создать скользящий макет, например, основное меню Android? Этот класс обработчика должен быть статическим или может возникнуть утечка: AsyncQueryHandler Андроидный залп JsonObjectRequest, который не возвращает ни одного тела всего 200 Как определить тип файла MIME в android? Невозможно изменить зависимости конфигурации (после включения моментального запуска) Как разобрать CSV-файл в приложении Android? Обрезать изображение фиксированного размера в Android Определение XML-родительского стиля градиента / формы / углов Картинные карты мерцают между рельефом и обычными типами SharedPrefs сбрасывается после настройки локали приложения Android Как совместно использовать изображение + текст, используя ACTION_SEND в android? Org.w3c.dom.Node.insertBefore: NullPointerException, ошибка? Установить стиль на TableRow на Android Android ActivityManager vs WindowManager Android – определение цветов путем ссылки на другие определенные цвета

Отображение метода dex по пакету

Я работаю над андроидным приложением, которое работает против ограничения количества меток dex. Есть ли простой способ показать количество методов, сгруппированных по пакету ? Я могу получить общее количество методов, но мое приложение имеет несколько компонентов, и я пытаюсь выяснить, какой компонент является самым большим источником этого.

Solutions Collecting From Web of "Отображение метода dex по пакету"

Это даст вам представление о том, насколько каждая иерархия пакетов способствует подсчету метода. Результаты включают все классы в этот каталог / пакет и все подкаталоги / пакеты.

baksmali blah.apk -o out cd out find * -type d -print -exec sh -c "smali {} -o {}/classes.dex && sh -c \"dexdump -f {}/classes.dex | grep method_ids_size\"" \; 

Эта слегка измененная версия похожа, за исключением того, что она предназначена только для классов в этом конкретном каталоге / пакете, не включая поддиры / подпакеты

 baksmali blah.apk -o out cd out find * -type d -print0 | xargs -0 -I{} sh -c "echo {} && find {} -maxdepth 1 -name \"*.smali\" -print0 | xargs -r -0 smali -o {}/classes.dex" find -name "*.dex" -print -exec sh -c "dexdump -f {} | grep method_ids_size" \; 

Я написали инструмент dex-method-counts , который выводит метод каждого пакета быстрее и точнее, чем инструменты, основанные на smali, на которые ссылается ответ JesusFreke. Он может быть установлен с https://github.com/mihaip/dex-method-counts .

[1], что скрипт дизассемблирует .dex и повторно собирает его по пакету, но это означает, что методы, на которые ссылаются несколько пакетов, подсчитываются дважды

Я и коллеги опубликовали в прошлом месяце службу, которая может помочь вам с вашей целью: http://www.methodscount.com/ . Он показывает количество методов и другую аккуратную информацию

Введите описание изображения здесь

Под капотом мы используем gradlew для получения зависимостей и инструмента SDK для Android gradlew для вычисления информации dex. Мы применяем процедуру рекурсивно к библиотеке и ее зависимостям. Мы также сохраняем результаты для уже вычисленных библиотек, чтобы ускорить процесс по последующим запросам.

Если вы используете Android Studio или IntelliJ, вы можете просто установить плагин, чтобы иметь всю информацию в качестве удобного подсказки (плагин также использует эту услугу).

Напишись на старый вопрос, я написал плагин Gradle, который будет сообщать количество методов в вашем APK для каждой сборки. Он использует тот же код анализа DEX, который использует проект AOSP. Вы можете найти его на странице https://github.com/KeepSafe/dexcount-gradle-plugin .

Я оценил работу со всеми разработчиками выше, и я всегда рад, что у меня такое замечательное сообщество, но так как Android studio 2.2 команда Google выпустила APK Analyzer -> https://developer.android.com/studio/build/apk-analyzer. HTML

Теперь у всех нас есть встроенный инструмент для анализа количества методов, размера наших ресурсов и даже мы можем сравнить два файла .apk снова друг с другом. Наконец, у всех нас есть этот инструмент. Разработка Android станет проще и проще.

BTW: Чтобы узнать, сколько у вас методов, откройте свой .apk-файл в Android Studio (только с поддержкой 2.2+) и нажмите файл classes.dex. После этого вы сможете увидеть, как методы учитываются во всех библиотеках и в вашем проекте.

Вы также можете попробовать использовать https://github.com/KeepSafe/dexcount-gradle-plugin, который позволяет вам видеть количество меток в пакете графически через html.