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