Thống kê lượng method dùng trong file .apk
Bài đăng này đã không được cập nhật trong 8 năm
Đâ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 Files\Java\jdk1.8.0_45\bin>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 Files\Java\jdk1.8.0_45\bin>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 . )
Kết luận
Có công cụ này trong tay giờ bạn thử tạo 1 project android nhỏ chỉ có 1 view đơn giản, trong đó import 2 bộ thư viện sau : android suport.v7, và google play service . (Thử dùng tool này xem 2 thư viện trên ngốn của bạn bao nhiêu method nhé, so sánh với con số 65k method max mà eclip có thể build cho bạn, sẽ có 1 bất ngờ lớn đó .) Bất ngờ ra sao, và giải quyết nó như thế nào mình sẽ giải đáp kĩ hơn ở bài sau :Tối ưu thư viện google play service . Rất mong các bạn ủng hộ .
All rights reserved