android analyze

วิเคราะห์ไฟล์ (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 อย่างน้อย 1 รายการ เช่น แพ็กเกจแอปพลิเคชัน (.aab, .apk) หรือที่เก็บถาวรของไลบรารี (.aar, .jar) และรายงานข้อมูลเมตาโดยละเอียดเกี่ยวกับบิลด์ โครงสร้าง และประสิทธิภาพ

ประเภทไฟล์ที่รองรับ

android analyze รองรับทั้งแพ็กเกจแอปพลิเคชันและที่เก็บถาวรของไลบรารี ดังนี้

  • Android App Bundle (.aab) และ APK (.apk): ประเมินข้อมูลเมตาระดับแอปพลิเคชัน, การกำหนดค่าการคอมไพล์, ลักษณะ DEX และเอาต์พุตการเพิ่มประสิทธิภาพ
  • Android Archives (.aar) และ Java Archives (.jar): ประเมินข้อมูลเมตาระดับไลบรารี, เมตริกการคอมไพล์ DEX, ผลกระทบของกฎการเก็บรักษา และคอมโพเนนต์เนทีฟที่รวมมาด้วย

หมวดหมู่การวิเคราะห์ (--analysis)

โดยค่าเริ่มต้น ระบบจะดำเนินการวิเคราะห์ทุกหมวดหมู่ที่มี ใช้ --analysis=<category> เพื่อกรองเอาต์พุตเป็นหมวดหมู่ที่เฉพาะเจาะจง (ที่คั่นด้วยคอมมา)

  • basic: ข้อมูลเมตาพื้นฐาน เช่น ชื่อแพ็กเกจและเวอร์ชันของแอปพลิเคชัน: รายงานรายละเอียดการระบุตัวตนของแอปพลิเคชัน (เช่น ชื่อแพ็กเกจ ชื่อเวอร์ชัน และรหัสเวอร์ชันของแอปพลิเคชัน)

  • optimization: การเพิ่มประสิทธิภาพคอมไพเลอร์, ขนาด DEX และข้อมูลเมตาการลดขนาดโค้ด:

    • สําหรับแอปพลิเคชัน (.aab, .apk): รายงานเวอร์ชันปลั๊กอิน Android Gradle (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 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"
    }
  ]
}