2011-10-01 41 views
9

Chúng tôi có một ứng dụng (với số lượng vừa phải chuỗi) mà chúng tôi dịch sang hơn 27 ngôn ngữ. Chúng tôi tạo 2 bản dựng của ứng dụng. Hai bản dựng này chỉ khác nhau về tên của gói. Vì vậy, về cơ bản chúng tôi lần đầu tiên thực hiện việc xây dựng ứng dụng của chúng tôi với tên gói cho phép nói com.android.sad.app và sau đó một tên khác có tên gói là com.android.even.sadder.app. Chúng tôi đã có cơ hội để thử nghiệm ứng dụng của chúng tôi trên một loạt các thiết bị Android và chúng tôi đã phát hiện ra rằng trên một số thiết bị như Samsung ACE, Samsung Galaxy S hoặc LG Optimus 2x ứng dụng của chúng tôi không thể tải/đọc các tài nguyên vì vậy ngay cả biểu tượng ứng dụng không được hiển thị và khi ứng dụng được bắt đầu, nó bị treo với android.content.res.Resources.NotFoundException. Trên các thiết bị khác, mọi thứ đều hoạt động tốt.Không tìm thấy tài nguyên Android trên một số thiết bị

Chúng tôi đã phát hiện ra rằng nếu chúng tôi giảm tổng số lượng chuỗi trong tài nguyên của ứng dụng, ứng dụng của chúng tôi có thể chạy thành công trên các thiết bị được đề cập ở trên. Tuy nhiên chúng tôi không nghĩ rằng đây là giải pháp thực sự cho vấn đề của chúng tôi bởi vì việc xây dựng gỡ lỗi với chuỗi đầy đủ trong tài nguyên có thể được chạy trên các thiết bị được đề cập.

Vì vậy, câu hỏi của tôi sẽ là ai đó biết những gì có khả năng có thể gây ra hành vi rất lạ này?

Trả lời

0

Tôi sẽ giả định rất nhiều ở đây, nhưng tôi sẽ bỏ tiền vào nó liên quan đến số lượng chuỗi. Tất cả các chuỗi của bạn sẽ tiêu thụ bộ nhớ và có thể các thiết bị mục tiêu này không đủ khả dụng cho ứng dụng của bạn. Đối với sự khác biệt tên gói của bạn, ngắn hơn một sẽ tiêu thụ ít byte hơn so với một trong những khóa học dài hơn.

Tôi khuyên bạn nên giảm số lượng chuỗi đang sử dụng và xem liệu chuỗi đó có giải quyết được sự cố của bạn hay không.

2

Sau một số thử nghiệm và thử nghiệm lỗi, chúng tôi đã phát hiện ra rằng sự cố xảy ra với gói apk. Trong quá trình xây dựng của chúng tôi, chúng tôi thêm một số tệp vào ứng dụng của chúng tôi apk ngay sau khi bản dựng hoàn tất nhưng trước khi ký và căn chỉnh tệp apk. Ban đầu chúng tôi đã giải nén và đóng gói lại apk bằng công cụ riêng của chúng tôi (được viết bằng Java và do đó sử dụng triển khai Java Zip).

Chúng tôi đã nhận thấy rằng sau khi đóng gói lại apk với công cụ của chúng tôi, chúng tôi đã có thể giảm kích thước của apk để một nửa kích thước của bản gốc apk tạo ra bởi các Android build. Vì chúng tôi đã phát hiện ra việc này đóng gói lại là nguyên nhân của sự cố của chúng tôi!

Như thí nghiệm của chúng tôi đã cho thấy nếu repacked apk là nhỏ hơn sau đó ~ 1,6 Mb, tất cả các thiết bị đã có thể đọc và làm việc với các mới repackedapk. Tuy nhiên, nếu kích thước của apk đã vượt quá ~ 1.6 Mb các thiết bị (và trình mô phỏng) được đề cập trong bài đăng này không thể đọc hoặc làm việc chính xác với ứng dụng apk.

Tôi đã tìm kiếm một số đặc điểm kỹ thuật ở định dạng tệp APK (chủ yếu là jar), nhưng tôi không tìm thấy điều gì giải thích hành vi rất kỳ quặc này. Vì vậy, ai đó có thể xin vui lòng làm rõ tại sao hành vi lạ này xảy ra và lý do chính xác là gì?

Lưu ý: từ bây giờ chúng ta đang sử dụng Androidaaptcông cụ để chèn file của chúng tôi để gói, thay vì công cụ này chúng tôi đã sử dụng và gói ứng dụng cuối cùng có thể được đọc bởi tất cả các thiết bị

Các vấn đề liên quan