analiza na Androidzie

Analizuje pliki (AAB, APK, JAR, AAR) w podanych lokalizacjach i raportuje wszystkie dostępne szczegóły.

Wykorzystanie

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

Opcje

  • --analysis=PARAM – kategoria analizy, według której mają być filtrowane dane wyjściowe (podstawowa, optymalizacja). Obsługuje wartości rozdzielane przecinkami (domyślnie: wszystkie).
  • -f,--format=PARAM – format wyjściowy: json, textproto. Jeśli zostanie pominięty, dane wyjściowe będą sformatowane w sposób zrozumiały dla człowieka.
  • -h,--help – wyświetla komunikat pomocy dotyczący określonego polecenia.

Opcje: android:

  • --sdk=PARAM – ścieżka do pakietu Android SDK.
  • -v,--verbose – włącz szczegółowe dane wyjściowe na potrzeby rozwiązywania problemów.
  • -V,--version – wyświetla informacje o wersji i kończy działanie.

Argumenty pozycyjne

  • <path> – ścieżka do plików docelowych do przeanalizowania (AAB, APK, JAR, AAR).

Opis

android analyze sprawdza co najmniej 1 artefakt Androida, np. pakiety aplikacji (.aab, .apk) lub archiwa bibliotek (.aar, .jar), i raportuje szczegółowe metadane dotyczące kompilacji, struktury i wydajności.

Obsługiwane typy plików

android analyze obsługuje zarówno pakiety aplikacji, jak i archiwa bibliotek:

  • Pakiety Android App Bundle (.aab) i pliki APK (.apk): ocenia metadane na poziomie aplikacji, konfiguracje kompilacji, charakterystykę DEX i wyniki optymalizacji.
  • Archiwa Androida (.aar) i Javy (.jar): ocenia metadane na poziomie biblioteki, dane kompilacji DEX, wpływ reguł zachowywania i dołączone komponenty natywne.

Kategorie analizy (--analysis)

Domyślnie przeprowadzane są wszystkie dostępne kategorie analiz. Użyj --analysis=<category>, aby filtrować dane wyjściowe według określonych kategorii (rozdzielonych przecinkami).

  • basic: podstawowe metadane, takie jak nazwa pakietu i wersja aplikacji: raportuje szczegóły identyfikacyjne aplikacji (np. nazwę pakietu, nazwę wersji i kod wersji aplikacji).

  • optimization: optymalizacje kompilatora, rozmiary plików DEX i metadane zmniejszania kodu:

    • W przypadku aplikacji (.aab, .apk): raportuje wersję wtyczki Androida do obsługi Gradle (AGP), nieskompresowany rozmiar DEX, ustawienia i wartości procentowe zmniejszania i optymalizacji R8, stan optymalizacji zasobów R8 oraz metadane znaczników DEX.
    • Biblioteki (.aar, .jar): raportuje rozmiary DEX D8 i R8, współczynnik zachowania, podsumowania kolekcji elementów (zachowane i łączne klasy, metody i pola), używane i nieużywane reguły zachowania na poziomie pakietu z promieniem wpływu, zablokowane reguły zachowania konsumentów, spakowane biblioteki natywne (pliki .so) i ostrzeżenia dotyczące wykrytych antywzorców optymalizacji.

Formatowanie danych wyjściowych (-f, --format)

  • Domyślnie dane wyjściowe są wyświetlane w formacie podsumowania zrozumiałym dla człowieka.
  • -f json, --format=json: generuje plik JSON w formacie czytelnym dla komputerów, który nadaje się do analizy programowej przez skrypty i potoki CI.
  • -f textproto, --format=textproto: generuje format tekstowy Protobuf (textproto).

Przykłady

Analizowanie pliku APK ze wszystkimi kategoriami domyślnymi:

android analyze app-release.apk

Analizowanie wielu artefaktów jednocześnie:

android analyze app-release.apk library.aar

Przeanalizuj plik AAB i wygeneruj wyniki w formacie JSON:

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

Przykładowe dane wyjściowe 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"
        }
      }
    }
  ]
}

Analizowanie biblioteki archiwum Java (JAR) ze wszystkimi kategoriami domyślnymi:

android analyze library.jar

Analizowanie biblioteki pliku Android Archive (AAR) z filtrowaniem według kategorii optimization i generowaniem danych wyjściowych w formacie JSON:

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

Przykładowe dane wyjściowe 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"
    }
  ]
}