วิเคราะห์ไฟล์ (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"
}
]
}