android analyze

Menganalisis file (AAB, APK, JAR, AAR) di lokasi yang ditentukan dan melaporkan kembali semua detail yang tersedia.

Penggunaan

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

Opsi

  • --analysis=PARAM - Kategori analisis untuk memfilter output (dasar, pengoptimalan). Mendukung nilai yang dipisahkan koma (default: semua).
  • -f,--format=PARAM - Format output: json, textproto. Jika dihilangkan, output akan diformat agar dapat dibaca manusia.
  • -h,--help - Menampilkan pesan bantuan untuk perintah yang ditentukan.

Opsi android:

  • --sdk=PARAM - Jalur ke Android SDK.
  • -v,--verbose - Mengaktifkan output panjang untuk pemecahan masalah.
  • -V,--version - Mencetak informasi versi dan keluar.

Argumen posisi

  • <path> - Jalur ke file target yang akan dianalisis (AAB, APK, JAR, AAR).

Deskripsi

android analyze memeriksa satu atau beberapa artefak Android—seperti paket aplikasi (.aab, .apk) atau arsip library (.aar, .jar)—dan melaporkan metadata build, struktur, dan performa yang mendetail.

Jenis File yang Didukung

android analyze mendukung paket aplikasi dan arsip library:

  • Android App Bundle (.aab) dan APK (.apk): Mengevaluasi metadata tingkat aplikasi, konfigurasi kompilasi, karakteristik DEX, dan output pengoptimalan.
  • Android Archive (.aar) dan Java Archive (.jar): Mengevaluasi metadata tingkat library, metrik kompilasi DEX, dampak aturan keep, dan komponen native yang dipaketkan.

Kategori Analisis (--analysis)

Secara default, semua kategori analisis yang tersedia akan dijalankan. Gunakan --analysis=<category> untuk memfilter output ke kategori tertentu (dipisahkan koma).

  • basic: Metadata dasar seperti nama paket dan versi untuk aplikasi: Melaporkan detail identifikasi aplikasi (misalnya, nama paket, nama versi, dan kode versi untuk aplikasi).

  • optimization: Pengoptimalan compiler, ukuran DEX, dan metadata penyingkatan kode:

    • Untuk aplikasi (.aab, .apk): Melaporkan versi Plugin Android Gradle (AGP), ukuran DEX yang tidak dikompresi, setelan dan persentase penyingkatan dan pengoptimalan R8, status pengoptimalan resource R8, dan metadata penanda DEX.
    • Untuk library (.aar, .jar): Melaporkan ukuran DEX D8 dan R8, rasio keep, ringkasan koleksi item (class, metode, dan kolom yang dipertahankan vs. total), aturan keep seluruh paket yang digunakan dan tidak digunakan dengan radius dampak, aturan keep konsumen yang diblokir, library native yang dipaketkan (file .so), dan peringatan untuk antipola pengoptimalan yang terdeteksi.

Pemformatan Output (-f, --format)

  • Secara default, output dicetak dalam format ringkasan yang dapat dibaca manusia.
  • -f json, --format=json: Memunculkan JSON yang dapat dibaca mesin, cocok untuk penguraian terprogram oleh skrip dan pipeline CI.
  • -f textproto, --format=textproto: Memunculkan format teks Protobuf (textproto).

Contoh

Menganalisis APK dengan semua kategori default:

android analyze app-release.apk

Menganalisis beberapa artefak sekaligus:

android analyze app-release.apk library.aar

Menganalisis AAB dan menampilkan hasilnya sebagai JSON:

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

Contoh output 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"
        }
      }
    }
  ]
}

Menganalisis library Java Archive (JAR) dengan semua kategori default:

android analyze library.jar

Menganalisis pemfilteran library Android Archive (AAR) untuk kategori optimization dan menghasilkan output sebagai JSON:

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

Contoh output 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"
    }
  ]
}