فایل(ها) (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.-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 (
.aar) و بایگانیهای Java (.jar): فراداده سطح کتابخانه، سنجههای گردآوری DEX، تأثیر قانون حفظ، و مؤلفههای بومی بستهبندیشده را ارزیابی میکند.
دستههای تحلیل (--analysis)
بهطور پیشفرض، همه دستههای تجزیهوتحلیل دردسترس انجام میشود. از
--analysis=<category> برای فیلتر کردن برونداد به دستههای خاص
(جداشده با کاما) استفاده کنید.
basic: فرادادههای اصلی مانند نام بسته و نسخه برای برنامهها: جزئیات شناسایی برنامه را گزارش میکند (مثلاً نام بسته، نام نسخه، و کد نسخه برای برنامهها).optimization: بهینهسازیهای کامپایلر، اندازههای DEX، و فرادادههای کوچک کردن کد:- برای برنامهها (
.aab،.apk): نسخه «افزایه Gradle برای Android» (AGP)، اندازه DEX غیرفشرده، تنظیمات و درصدهای بهینهسازی و کوچکسازی R8، وضعیت بهینهسازی منبع R8، و فراداده نشانگر DEX را گزارش میکند. - برای کتابخانهها (
.aar،.jar): اندازههای D8 و R8 DEX، نسبت حفظ، خلاصههای مجموعه موارد (کلاسها، روشها، و فیلدهای حفظشده درمقابل کل)، قوانین حفظ سراسری بسته استفادهشده و استفادهنشده با شعاع تأثیر، قوانین حفظ مصرفکننده مسدودشده، کتابخانههای بومی بستهبندیشده (فایلهای.so)، و هشدارهای مربوط به الگوهای ضدبهینهسازی شناساییشده را گزارش میکند.
- برای برنامهها (
قالببندی برونداد (-f, --format)
- بهطور پیشفرض، برونداد در قالب خلاصه قابلخواندن برای انسان چاپ میشود.
-f json, --format=json: JSON ماشینخوانا را منتشر میکند که برای تجزیه برنامهای توسط دستورگان و خطوط لوله CI مناسب است.-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"
}
]
}