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). साथ ही, बिल्ड, स्ट्रक्चर, और परफ़ॉर्मेंस के मेटाडेटा की पूरी जानकारी देता है.

इस्तेमाल किए जा सकने वाले फ़ाइल टाइप

android analyze, ऐप्लिकेशन पैकेज और लाइब्रेरी संग्रह, दोनों के साथ काम करता है:

  • Android ऐप्लिकेशन बंडल (.aab) और APK (.apk): यह ऐप्लिकेशन-लेवल के मेटाडेटा, कंपाइलेशन कॉन्फ़िगरेशन, DEX की विशेषताओं, और ऑप्टिमाइज़ेशन आउटपुट का आकलन करता है.
  • Android संग्रह (.aar) और Java संग्रह (.jar): यह लाइब्रेरी-लेवल के मेटाडेटा, DEX कंपाइलेशन मेट्रिक, कीप रूल के असर, और बंडल किए गए नेटिव कॉम्पोनेंट का आकलन करता है.

विश्लेषण की कैटगरी (--analysis)

डिफ़ॉल्ट रूप से, विश्लेषण की सभी उपलब्ध कैटगरी का इस्तेमाल किया जाता है. आउटपुट को खास कैटगरी के हिसाब से फ़िल्टर करने के लिए, --analysis=<category> का इस्तेमाल करें (कॉमा लगाकर अलग किए गए).

  • basic: ऐप्लिकेशन के लिए पैकेज का नाम और वर्शन जैसा बुनियादी मेटाडेटा: ऐप्लिकेशन की पहचान करने वाली जानकारी की रिपोर्ट (जैसे, ऐप्लिकेशन के लिए पैकेज का नाम, वर्शन का नाम, और वर्शन कोड).

  • optimization: कंपाइलर ऑप्टिमाइज़ेशन, DEX के साइज़, और कोड छोटा करने से जुड़ा मेटाडेटा:

    • ऐप्लिकेशन के लिए (.aab, .apk): Android Gradle प्लग इन (एजीपी) के वर्शन, कंप्रेस नहीं किए गए DEX के साइज़, R8 के छोटा करने और ऑप्टिमाइज़ेशन की सेटिंग और प्रतिशत, R8 के संसाधन ऑप्टिमाइज़ेशन की स्थिति, और DEX मार्कर के मेटाडेटा की जानकारी देता है.
    • लाइब्रेरी के लिए (.aar, .jar): D8 और R8 DEX के साइज़, कीप रेशियो, आइटम कलेक्शन की खास जानकारी (रखे गए बनाम कुल क्लास, तरीके, और फ़ील्ड), इस्तेमाल किए गए और इस्तेमाल नहीं किए गए पैकेज-वाइड कीप रूल और उनके असर का दायरा, ब्लॉक किए गए उपभोक्ता कीप रूल, पैकेज की गई नेटिव लाइब्रेरी (.so फ़ाइलें), और ऑप्टिमाइज़ेशन के एंटीपैटर्न का पता चलने पर चेतावनियां.

आउटपुट फ़ॉर्मैटिंग (-f, --format)

  • डिफ़ॉल्ट रूप से, आउटपुट को ऐसे समरी फ़ॉर्मैट में प्रिंट किया जाता है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है.
  • -f json, --format=json: यह मशीन से पढ़े जा सकने वाले JSON को दिखाता है. यह स्क्रिप्ट और सीआई पाइपलाइन के ज़रिए प्रोग्राम के हिसाब से पार्स करने के लिए सही है.
  • -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

optimization कैटगरी के लिए फ़िल्टर की गई Android ARchive (AAR) लाइब्रेरी का विश्लेषण करें और 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"
    }
  ]
}