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.
- W przypadku aplikacji (
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"
}
]
}