android analyze

Анализирует файлы (AAB, APK, JAR, AAR) в указанных местоположениях и возвращает все доступные сведения.

Использование

android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>

Параметры

  • --analysis=PARAM – категория анализа для фильтрации выходных данных (базовый, оптимизация). Поддерживает значения, разделенные запятыми (по умолчанию: все).
  • -f,--format=PARAM – формат вывода: json, textproto. Если этот параметр не указан, выходные данные форматируются для удобства чтения.
  • -h,--help – показывает справочное сообщение для указанной команды.

android вариант:

  • --sdk=PARAM – путь к Android SDK.
  • -v,--verbose – включить подробный вывод для устранения неполадок.
  • -V,--version – показать информацию о версии и выйти.

Позиционные аргументы

  • <path> - Путь к целевым файлам для анализа (AAB, APK, JAR, AAR).

Описание

android analyze проверяет один или несколько объектов Android, например пакеты приложений (.aab, .apk) или архивы библиотек (.aar, .jar), и сообщает подробные метаданные о сборке, структуре и производительности.

Поддерживаемые типы файлов

android analyze поддерживает как пакеты приложений, так и архивы библиотек:

  • Наборы Android App Bundle (.aab) и APK-файлы (.apk). Оцениваются метаданные на уровне приложения, конфигурации компиляции, характеристики DEX и результаты оптимизации.
  • Android Archives (.aar) и Java Archives (.jar). Оцениваются метаданные на уровне библиотеки, показатели компиляции DEX, влияние правил сохранения и встроенные нативные компоненты.

Категории анализа (--analysis)

По умолчанию выполняется анализ по всем доступным категориям. Используйте --analysis=<category>, чтобы отфильтровать вывод по определенным категориям (разделенным запятыми).

  • basic – основные метаданные, такие как название пакета и версия приложений. Содержит идентификационные данные приложений (например, название пакета, название версии и код версии приложений).

  • optimization – оптимизация компилятора, размеры DEX-файлов и метаданные сокращения кода.

    • Для приложений (.aab, .apk). Отчеты о версии плагина Android Gradle (AGP), размере несжатого файла DEX, настройках и процентах сжатия и оптимизации R8, статусе оптимизации ресурсов R8 и метаданных маркера DEX.
    • Для библиотек (.aar, .jar). Отчеты о размерах DEX-файлов D8 и R8, коэффициенте сохранения, сводках по коллекциям элементов (сохраненные и общие классы, методы и поля), используемых и неиспользуемых правилах сохранения на уровне пакета с радиусом воздействия, заблокированных правилах сохранения потребителей, упакованных нативных библиотеках (файлы .so) и предупреждениях об обнаруженных антипаттернах оптимизации.

Форматирование выходных данных (-f, --format)

  • По умолчанию выходные данные выводятся в человекочитаемом формате сводки.
  • -f json, --format=json – выдает машиночитаемый JSON, подходящий для программного синтаксического анализа скриптами и конвейерами непрерывной интеграции.
  • -f textproto, --format=textproto – вывод в текстовом формате Protobuf (textproto).

Примеры

Проанализировать APK-файл со всеми категориями по умолчанию:

android analyze app-release.apk

Анализ нескольких объектов вместе:

android analyze app-release.apk library.aar

Проанализировать AAB-файл и вывести результаты в формате JSON:

android analyze --format=json app-release.aab

Пример выходных данных в формате JSON:

{
  "results": [
    {
      "optimization": {
        "bundleAnalysisResult": {
          "agpVersion": "9.3.2",
          "r8Json": {
            "version": "9.3.16",
            "options": {
              "isRepackageClassesEnabled": true,
              "isProguardCompatibilityModeEnabled": false
            },
            "stats": {
              "shrinkingRatio": 0.9606,
              "optimizationRatio": 0.9551,
              "obfuscationRatio": 0.9622
            },
            "resourceOptimizationStatus": "R8_RESOURCE_OPTIMIZATION_STATUS_DISABLED",
            "r8DexChecksumStatus": "EXACT_MATCH"
          },
          "r8DexMarkerMetadata": {
            "r8Enabled": true,
            "d8Enabled": false,
            "fullModeEnabled": true
          },
          "mappingObfuscationRatio": 0.97108626,
          "dexHeuristicObfuscationRatio": 0.97108626,
          "uncompressedDexSizeBytes": "6198152"
        }
      },
      "artifactPath": "app-release.aab",
      "basic": {
        "appInfo": {
          "packageName": "com.google.samples.apps.nowinandroid",
          "versionName": "1.0",
          "versionCode": "1"
        }
      }
    }
  ]
}

Проанализируйте библиотеку Java Archive (JAR) со всеми категориями по умолчанию:

android analyze library.jar

Проанализируйте библиотеку Android ARchive (AAR), отфильтровав ее по категории optimization и выведя результат в формате JSON:

android analyze --analysis=optimization -f json library.aar

Пример выходных данных в формате JSON:

{
  "results": [
    {
      "optimization": {
        "libraryAnalysisResult": {
          "dex": {
            "d8CompileResult": {
              "dexSizeBytes": 2117400
            },
            "r8CompileResult": {
              "dexSizeBytes": 1100,
              "configuration": {
                "keepRules": [
                  {
                    "source": "-keep class com.example.ExampleClass_* {\n  static *** builder();\n}",
                    "keptItemCount": 2
                  },
                  {
                    "source": "-keep class com.example.SomeClass {\n  public static *** SDK_ROOT_CLASS_NAME;\n}",
                    "keptItemCount": 2
                  }
                ]
              },
              "classes": {
                "itemCount": 3437,
                "keptItemCount": 2,
                "noObfuscationCount": 2,
                "noOptimizationCount": 2,
                "noShrinkingCount": 2
              },
              "fields": {
                "itemCount": 9835,
                "keptItemCount": 1,
                "noObfuscationCount": 1,
                "noOptimizationCount": 1,
                "noShrinkingCount": 1
              },
              "methods": {
                "itemCount": 16333,
                "keptItemCount": 1,
                "noObfuscationCount": 1,
                "noOptimizationCount": 1,
                "noShrinkingCount": 1
              }
            },
            "validateConsumerKeepRulesResult": {}
          },
          "r8Version": "9.5.17-dev",
          "version": "kg=1_r8=9.5.17-dev"
        }
      },
      "artifactPath": "library.aar"
    }
  ]
}