Pages

Friday, June 20, 2014

Lỗi : Data exceeds UNCOMPRESS_DATA_MAX

Khi phát trển một ứng dụng Android, bất kỳ file dữ liệu nào, file ảnh hoặc XML... mà chúng ta sử dụng trong ứng dụng đều được đóng gói vào gói ứng dụng ( application package = APK )  để phân phân phối, phân bổ. Bạn có biết, Android Asset Packaging Tool, hay được gọi tắt là aapt, chịu trách nhiệm cho việc tạo gói đó ( gói = bundle), bạn có thể xem gói đó như là một file ZIP với bố trí, thiết kế riêng để cho hệ điều hành Android có thể hiểu. Khi ứng dụng của bạn được cài đặt, file APK được đặt vào một ví trí trên file hệ thống của thiết bị ( filesystem ).

Trong một phần của việc chuẩn bị cho file APK, aapt sẽ nén các file trong assest để tiết kệm không gian cho thiết bị. Aapt sẽ quyết định nén hay không dựa trên phần đuổi của file. Mãng sau là danh sách các phần đuôi file mặc định là không được nén : 
static const char* kNoCompressExt[] = {
    ".jpg", ".jpeg", ".png", ".gif",
    ".wav", ".mp2", ".mp3", ".ogg", ".aac",
    ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
    ".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
    ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
    ".amr", ".awb", ".wma", ".wmv"
};

Trên điện thoại hệ điều hành 2.2/2.3 các file lớn hơn 1M APK không đọc được, nói đúng ra thì nó không chịu đọc. Thông thường các bạn hay đặt phần đuôi mở rộng của file dữ liệu là , ví dụ : test.db , test.sqlite ... những loại đuôi file này sẽ được kiểm tra kích cở ( size ) trước khi APK đọc và lấy nó, và được nhiên nếu file đó lớn hơn 1M thì xin thưa nó không chịu đọc. Để khắc phục điều này trên phiên bản 2.2/2.3 Android thì chúng ta nên đặt lại tên file được liệt kê như mãng kNoCompressExt[] trên : test.mid chẳng hạn.OK, vậy là ta đã giải quyết được vấn đề.

No comments:

Post a Comment