android analyze, ניתוח של 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 SDK.
  • ‫-v,--verbose – הפעלת פלט מפורט לפתרון בעיות.
  • ‫-V,--version – הדפסת פרטי הגרסה ויציאה.

ארגומנטים תלויי מיקום

  • <path> - הנתיב לקובצי היעד לניתוח (AAB, ‏ APK, ‏ JAR, ‏ AAR).

תיאור

‫android analyze בודק פריט מידע אחד או יותר של Android, כמו חבילות של אפליקציות (.aab,‏ .apk) או ארכיונים של ספריות (.aar,‏ .jar), ומדווח על מטא-נתונים מפורטים של גרסת ה-build, המבנה והביצועים.

סוגי קבצים נתמכים

‫android analyze תומך גם בחבילות של אפליקציות וגם בארכיונים של ספריות:

  • קובצי Android App Bundle‏ (.aab) וקובצי APK‏ (.apk): הערכת מטא-נתונים ברמת האפליקציה, הגדרות קומפילציה, מאפייני DEX ופלט אופטימיזציה.
  • ‫Android Archives (.aar) ו-ארכיוני Java (.jar): הערכת מטא-נתונים ברמת הספרייה, מדדי קומפילציה של DEX, השפעה של כללי שמירה ורכיבים מקוריים בחבילה.

קטגוריות ניתוח (--analysis)

כברירת מחדל, המערכת מבצעת את כל קטגוריות הניתוח הזמינות. אפשר להשתמש ב---analysis=<category> כדי לסנן את הפלט לקטגוריות ספציפיות (מופרדות בפסיקים).

  • ‫basic: מטא-נתונים בסיסיים כמו שם החבילה והגרסה של האפליקציות: דיווח על פרטי הזיהוי של האפליקציה (למשל, שם החבילה, שם הגרסה וקוד הגרסה של האפליקציות).

  • ‫optimization: אופטימיזציות של קומפיילר, גודלי DEX ומטא-נתונים של כיווץ קוד:

    • לאפליקציות (.aab,‏ .apk): מדווח על גרסת הפלאגין של Android Gradle‏ (AGP), גודל DEX לא דחוס, הגדרות ואחוזים של כיווץ ואופטימיזציה של R8, סטטוס אופטימיזציה של משאבי R8 ומטא-נתונים של סמני DEX.
    • ‫לספריות (.aar,‏ .jar): מדווח על גודלי DEX של D8 ו-R8, יחס שמירה, סיכומי אוספי פריטים (מחלקות, שיטות ושדות שנשמרו לעומת סך כל המחלקות, השיטות והשדות), כללי שמירה בשימוש ושאינם בשימוש ברמת החבילה עם רדיוס השפעה, כללי שמירה חסומים של צרכנים, ספריות Native ארוזות (קובצי .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‏ (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"
    }
  ]
}