phân tích android

Phân tích(các) tệp (AAB, APK, JAR, AAR) tại(các) vị trí đã cho và báo cáo lại tất cả thông tin chi tiết có sẵn.

Cách sử dụng

android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>

Tùy chọn

  • --analysis=PARAM – Danh mục phân tích để lọc kết quả (cơ bản, tối ưu hoá). Hỗ trợ các giá trị được phân tách bằng dấu phẩy (mặc định: tất cả).
  • -f,--format=PARAM – Định dạng đầu ra: json, textproto. Nếu bạn bỏ qua, kết quả sẽ được định dạng để người dùng có thể đọc được.
  • -h,--help – Hiện thông báo trợ giúp cho lệnh được chỉ định.

android lựa chọn:

  • --sdk=PARAM – Đường dẫn đến SDK Android.
  • -v,--verbose – Bật kết quả chi tiết để khắc phục sự cố.
  • -V,--version – In thông tin phiên bản rồi thoát.

Đối số vị trí

  • <path> – Đường dẫn đến(các) tệp mục tiêu cần phân tích (AAB, APK, JAR, AAR).

Mô tả

android analyze kiểm tra một hoặc nhiều cấu phần phần mềm Android (chẳng hạn như gói ứng dụng (.aab, .apk) hoặc tệp lưu trữ thư viện (.aar, .jar)) và báo cáo siêu dữ liệu chi tiết về bản dựng, cấu trúc và hiệu suất.

Các loại tệp được hỗ trợ

android analyze hỗ trợ cả gói ứng dụng và tệp lưu trữ thư viện:

  • Android App Bundle (.aab) và tệp APK (.apk): Đánh giá siêu dữ liệu ở cấp ứng dụng, cấu hình biên dịch, đặc điểm DEX và kết quả tối ưu hoá.
  • Android Archives (.aar) và Java Archives (.jar): Đánh giá siêu dữ liệu ở cấp thư viện, chỉ số biên dịch DEX, tác động của quy tắc giữ lại và các thành phần gốc đi kèm.

Danh mục phân tích (--analysis)

Theo mặc định, tất cả danh mục phân tích có sẵn đều được thực hiện. Sử dụng --analysis=<category> để lọc kết quả đầu ra theo các danh mục cụ thể (phân tách bằng dấu phẩy).

  • basic: Siêu dữ liệu cơ bản như tên gói và phiên bản cho ứng dụng: Báo cáo thông tin nhận dạng ứng dụng (ví dụ: tên gói, tên phiên bản và mã phiên bản cho ứng dụng).

  • optimization: Các tính năng tối ưu hoá trình biên dịch, kích thước DEX và siêu dữ liệu rút gọn mã:

    • Đối với ứng dụng (.aab, .apk): Báo cáo phiên bản Trình bổ trợ Android cho Gradle (AGP), kích thước DEX chưa nén, chế độ cài đặt và tỷ lệ phần trăm tối ưu hoá và rút gọn R8, trạng thái tối ưu hoá tài nguyên R8 và siêu dữ liệu điểm đánh dấu DEX.
    • Đối với thư viện (.aar, .jar): Báo cáo kích thước D8 và R8 DEX, tỷ lệ giữ lại, tóm tắt tập hợp mục (lớp, phương thức và trường được giữ lại so với tổng số), quy tắc giữ lại trên toàn gói được sử dụng và không được sử dụng có bán kính tác động, quy tắc giữ lại bị chặn của người dùng, thư viện gốc được đóng gói (tệp .so) và cảnh báo về các mẫu phản tối ưu hoá được phát hiện.

Định dạng đầu ra (-f, --format)

  • Theo mặc định, kết quả được in ở định dạng tóm tắt mà con người có thể đọc được.
  • -f json, --format=json: Phát ra JSON có thể đọc được bằng máy, phù hợp để phân tích cú pháp có lập trình bằng tập lệnh và quy trình CI.
  • -f textproto, --format=textproto: Phát ra định dạng văn bản Protobuf (textproto).

Ví dụ

Phân tích một tệp APK với tất cả danh mục mặc định:

android analyze app-release.apk

Phân tích nhiều dữ liệu cùng lúc:

android analyze app-release.apk library.aar

Phân tích một tệp AAB và xuất kết quả dưới dạng JSON:

android analyze --format=json app-release.aab

Kết quả JSON mẫu:

{
  "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"
        }
      }
    }
  ]
}

Phân tích thư viện Java Archive (JAR) với tất cả danh mục mặc định:

android analyze library.jar

Phân tích một thư viện Android Archive (AAR) lọc theo danh mục optimization và xuất dưới dạng JSON:

android analyze --analysis=optimization -f json library.aar

Kết quả JSON mẫu:

{
  "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"
    }
  ]
}