12/08/2018, 13:48

Thống kê lượng method dùng trong file .apk

Đây là bài chia sẻ đầu tiên của mình trên viblo, trong loạt bài đầu tiên này mình muốn chia sẻ với mọi người cách mình sử dụng thư viện trong android cũng như việc tối ưu từng thư viện sử dụng.Trong quá trình code việc sử dụng thư viện do các lập trình viên khác viết là hoàn toàn bình thường và ...

Đây là bài chia sẻ đầu tiên của mình trên viblo, trong loạt bài đầu tiên này mình muốn chia sẻ với mọi người cách mình sử dụng thư viện trong android cũng như việc tối ưu từng thư viện sử dụng.Trong quá trình code việc sử dụng thư viện do các lập trình viên khác viết là hoàn toàn bình thường và tiện lợi, tuy nhiên việc sử dụng quá nhiều thư viện thường gay ra rất nhiều khó khăn trong việc quản lí code, tối ưu code , cũng như maintain fixbug sau này do đó cần tối ưu được các thư viện ngay từ khi mới sử dụng sao cho hợp lí nhất. Với kinh nghiệm của mình trong loạt bài về lib mình sẽ chia sẻ 1 số bài như sau :

  • Dex method count : công cụ thống kê mothod, cấu trúc code
  • Tối ưu thư viện google play service.
  • Thư viện xử lí ảnh.
  • Thư viện download ....

Bài đầu tiên mình sẽ giới thiệu về tool mình rất hay dùng dex mothod count.

Giới thiệu chung :

Dex method count là một tool khá đơn giản thống kê số lượng method sử dụng trong 1 file apk sau khi được build xong. Có lẽ nhiều bạn thắc mắc: "tại sao lại thống kê số lượng method để làm gì?", hoặc "method cần thì dùng thôi, thống kê làm gì nhỉ?" , hiện nay Android đa số được dev trên ide Android studio đã suport khá tốt việc build -multi-dex thế nhưng lỗi

Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536

lại là 1 lỗi ám ảnh tôi (và có lẽ rât nhiều dev android sử dụng eclip). Việc xử lí bug trên khá phức tạp vì phải optimize lại source code, giảm tải lượng method để eclip có thể build okie chính vì vậy tool method count này hỗ trợ dev rất nhiều trong việc thống kê, cũng như hệ thống lại source code của mình.

Hướng dẫn cài đặt và sử dụng

( Các bạn có thể lấy source code cũng như hướng dẫn khá chi tiết trên github tại địa chỉ https://github.com/mihaip/dex-method-counts ).

  • B1 : các bản tải suorce code trên githup : https://github.com/mihaip/dex-method-counts
  • B2 : Các bạn tạo 1 project java trên eclip.
  • B3 : copy toàn bộ source code trong folder : /src của thư mục bạn vừa tải vào thư mục /src của project bạn vừa tạo.
  • B4 : export project thành file runable (.jar)
  • B5 : mở cmd tại thư mục bin của java/jdk. sau đó thực hiện câu lệnh để hiện số lượng method :
java -jar path_of_file_.jar path_of_file_apk

ví dụ :

C:Program FilesJavajdk1.8.0_45in>java -jar E:method.jar E:pic.apk

Khi đó trên màn hình cmd của bạn sẽ hiện ra thống kê số lượng method

        codehaus: 6189
            jackson: 6189
                annotate: 62
                format: 31
                impl: 545
                io: 128
                map: 4025
                    annotate: 34
                    deser: 887
                        impl: 81
                        std: 423
                    exc: 5
                    ext: 102
                    introspect: 496
                    jsontype: 164
                        impl: 138
                    module: 49
                    ser: 749
                        impl: 97
                        std: 368
                    type: 303
                    util: 213
                node: 498
                schema: 9
                sym: 96
                type: 47
                util: 329
        joda: 37
            time: 37
                format: 6
        json: 67
        w3c: 4
            dom: 4
                bootstrap: 2
                ls: 2
        xml: 1
            sax: 1
        xmlpull: 13
            v1: 13
    techonology: 1429
        nexts: 1429
            media: 1429
                adapter: 170
                controller: 180
                    cache: 32
                    update: 38
                fragments: 91
                objects: 119
                views: 377
                    dialog: 79
                    quickaction: 48
    vn: 409
        nexts: 409
            backup: 84
            constant: 9
            help: 52
            manager: 133
                location: 35
            model: 103
            receiver: 5
            se: 10
            service: 13
Overall method count: 60301

Ngoài ra bạn có các lựa chọn :

  • --count-fields: Thay đếm method chuyển sang đếm fields
  • --include-classes: Treat classes as packages and provide per-class method counts. One use-case is for protocol buffers where all generated code in a package ends up in a single class.
  • --package-filter=...: chỉ đếm package có bắt đầu bằng..
  • --max-depth=...: giới hạn độ sâu cây method
  • --filter=[all|defined_only|referenced_only]: Whether to count all methods (the default), just those defined in the input file, or just those that are referenced in it. Note that referenced methods count against the 64K method limit too.
  • --output-style=[flat|tree]: hiển thị kết quả dạng cây thư mục hay thẳng hàng.

Ví dụ

C:Program FilesJavajdk1.8.0_45in>java -jar E:method.jar --max-depth=1 --output-style=TREE E:mp3.apk
Processing E:mp3.apk
Read in 60301 method IDs.
<root>: 60301
    <default>: 1
    android: 13568
    bolts: 183
    com: 36314
    dalvik: 2
    java: 1435
    javax: 38
    okio: 461
    org: 6455
    techonology: 1429
    vn: 409
Overall method count: 60301

Ngoài ra bạn có thể thay đổi 1 số logic trong file main.java, output.java để có thể xuất kết quả ra file hoặc thay đổi cấu trúc cây method như bạn muốn.(vấn đề custom này mình nghĩ các bạn tự khám phá sẽ vui và thú vị hơn rất nhiều             </div>
            
            <div class=

0