android analyze

Analisa os arquivos (AAB, APK, JAR, AAR) nos locais informados e informa todos os detalhes disponíveis.

Uso

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

Opções

  • --analysis=PARAM: categoria de análise para filtrar a saída (básica, otimização). Aceita valores separados por vírgulas (padrão: todos).
  • -f,--format=PARAM: formato de saída: json, textproto. Se omitida, a saída será formatada para leitura humana.
  • -h,--help: mostra a mensagem de ajuda do comando especificado.

Opções de android:

  • --sdk=PARAM: caminho para o SDK do Android.
  • -v,--verbose: ativa a saída detalhada para solução de problemas.
  • -V,--version: mostra informações sobre a versão e sai.

Argumentos posicionais

  • <path>: caminho para os arquivos de destino a serem analisados (AAB, APK, JAR, AAR).

Descrição

O android analyze inspeciona um ou mais artefatos do Android, como pacotes de aplicativos (.aab, .apk) ou arquivos de biblioteca (.aar, .jar), e informa metadados detalhados de build, estrutura e desempenho.

Tipos de arquivos compatíveis

O android analyze é compatível com pacotes de aplicativos e arquivos de biblioteca:

  • Android App Bundles (.aab) e APKs (.apk): avalia metadados no nível do aplicativo, configurações de compilação, características de DEX e saídas de otimização.
  • Arquivos do Android (.aar) e arquivos Java (.jar): avalia metadados no nível da biblioteca, métricas de compilação DEX, impacto da regra de manutenção e componentes nativos incluídos.

Categorias de análise (--analysis)

Por padrão, todas as categorias de análise disponíveis são realizadas. Use --analysis=<category> para filtrar a saída para categorias específicas (separadas por vírgulas).

  • basic: metadados básicos, como nome do pacote e versão dos aplicativos: informa detalhes de identificação do aplicativo (por exemplo, nome do pacote, nome da versão e código da versão dos aplicativos).

  • optimization: otimizações do compilador, tamanhos de DEX e metadados de redução de código:

    • Para aplicativos (.aab, .apk): informa a versão do Plug-in do Android para Gradle (AGP), o tamanho do DEX descompactado, as configurações e porcentagens de redução e otimização do R8, o status de otimização de recursos do R8 e os metadados do marcador DEX.
    • Para bibliotecas (.aar, .jar): informa os tamanhos de DEX do D8 e do R8, a proporção de retenção, os resumos de coleta de itens (classes, métodos e campos mantidos x totais), as regras de retenção usadas e não usadas em todo o pacote com raio de impacto, as regras de retenção de consumidor bloqueadas, as bibliotecas nativas empacotadas (arquivos .so) e os avisos para antipadrões de otimização detectados.

Formatação de saída (-f, --format)

  • Por padrão, a saída é impressa em um formato de resumo legível por humanos.
  • -f json, --format=json: emite JSON legível por máquina, adequado para análise programática por scripts e pipelines de CI.
  • -f textproto, --format=textproto: emite o formato de texto do Protobuf (textproto).

Exemplos

Analise um APK com todas as categorias padrão:

android analyze app-release.apk

Analisar vários artefatos juntos:

android analyze app-release.apk library.aar

Analise um AAB e mostre os resultados como JSON:

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

Exemplo de saída 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"
        }
      }
    }
  ]
}

Analise uma biblioteca de arquivos Java (JAR) com todas as categorias padrão:

android analyze library.jar

Analise uma biblioteca de arquivo do Android (AAR) filtrando pela categoria optimization e gerando como JSON:

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

Exemplo de saída 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"
    }
  ]
}