تجزیه‌وتحلیل Android

فایل(ها) (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"
    }
  ]
}