تحليل 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: مسار حزمة تطوير البرامج (SDK) لنظام التشغيل Android
  • ‫-v,--verbose: لتفعيل الإخراج المطوَّل لتحديد المشاكل وحلّها
  • ‫-V,--version: لطباعة معلومات الإصدار والخروج

الوسيطات الموضعية

  • ‫<path> - مسار الملفات المستهدَفة المطلوب تحليلها (AAB وAPK وJAR وAAR).

الوصف

يفحص android analyze عنصرًا واحدًا أو أكثر من عناصر Android، مثل حِزم التطبيقات (.aab و.apk) أو أرشيفات المكتبات (.aar و.jar)، ويقدّم تقارير مفصّلة عن بيانات الإصدار والبنية والأداء الوصفية.

أنواع الملفات المتوافقة

يتيح android analyze استخدام كل من حزم التطبيقات وأرشيفات المكتبات:

  • مجموعات حزمات تطبيق Android‏ (.aab) وحزم APK‏ (.apk): يقيّم هذا المقياس البيانات الوصفية على مستوى التطبيق وإعدادات التجميع وخصائص DEX ونتائج التحسين.
  • ملفات Android Archives (.aar) وJava Archives (.jar): يقيّم هذا الاختبار البيانات الوصفية على مستوى المكتبة، ومقاييس تجميع DEX، وتأثير قواعد الاحتفاظ، والمكوّنات الأصلية المجمّعة.

فئات التحليل (--analysis)

يتم تلقائيًا إجراء جميع فئات التحليل المتاحة. استخدِم --analysis=<category> لفلترة النتائج حسب فئات معيّنة (مفصولة بفواصل).

  • basic: البيانات الوصفية الأساسية، مثل اسم الحزمة وإصدار التطبيقات: يتم إرسال تقارير بتفاصيل تعريف التطبيق (مثل اسم الحزمة واسم الإصدار ورمز الإصدار للتطبيقات).

  • optimization: تحسينات برامج التجميع وأحجام DEX والبيانات الوصفية لتقليص الرموز البرمجية:

    • بالنسبة إلى التطبيقات (.aab و.apk): يتم إرسال تقارير عن إصدار "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (AGP) وحجم ملف DEX غير المضغوط وإعدادات ونِسب تقليص وتحسين R8 وحالة تحسين موارد R8 والبيانات الوصفية لعلامة DEX.
    • بالنسبة إلى المكتبات (.aar و.jar): يتم إعداد تقارير عن أحجام ملفات DEX في D8 وR8، ونسبة الاحتفاظ، وملخّصات مجموعات العناصر (الفئات والطُرق والحقول المحفوظة مقارنةً بإجمالي عددها)، وقواعد الاحتفاظ المستخدَمة وغير المستخدَمة على مستوى الحزمة مع نطاق التأثير، وقواعد الاحتفاظ المحظورة للمستهلكين، والمكتبات المجمّعة من رموز برمجية أصلية (ملفات .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" ‏ (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"
    }
  ]
}