ACRA chính nó là đâm với một vấn đề lẻ:ACRA có thể được sử dụng trong một dự án thư viện không?
IllegalStateException: Cannot access ErrorReporter before ACRA#init
Tôi có một ứng dụng với ACRA 4.3.0 mà làm việc một cách hoàn hảo. Tôi đã thay đổi toàn bộ ứng dụng thành một thư viện, vì vậy tôi có thể tạo ra các biến thể nhỏ. Tôi đã tạo một dự án mới hoàn toàn trống không phải là tệp kê khai và liên kết đến thư viện mới này. Đối với bất kỳ ai khác cố gắng điều này, trong AcraApplication.java bạn phải loại bỏ dòng "resToastText = R.string.crash_toast_text" và thêm một dòng mới bên dưới Acra.init (điều này);
ACRA.getConfig().setResToastText(R.string.crash_toast_text);
Dự án xây dựng tốt và trong debug Tôi đã xác nhận ACRA.init (this); được chạy trước mã chương trình chính của tôi và trước khi xảy ra lỗi. Trong chương trình chính, tại điểm mà chúng tôi thiết lập một số dữ liệu tùy chỉnh:
ACRA.getErrorReporter().putCustomData("Orientation", "L");
Nó gây ra sự sụp đổ (hay chính xác hơn, ACRA bản thân gây ra lỗi) và không có báo cáo ACRA được tạo ra.
Bất kỳ ý tưởng nào cần thử tiếp theo hoặc con trỏ ở đâu để tìm? Nó có thể là ACRA không tương thích với các thư viện, mà nếu đây là trường hợp, tôi có thể kéo nó ra một xử lý nó một cách khác nhau, nhưng loại thất bại mục đích của thư viện.
Giải pháp: Thay vì thêm dòng dưới đây Acra.init(this);
thêm ba dòng trước dòng init:
ACRAConfiguration config = ACRA.getNewDefaultConfig(this);
config.setResToastText(R.string.crash_toast_text);
ACRA.setConfig(config);
ACRA.init(this);
Chú giải này chỉ hoạt động trong v4.3.0 và sau đó.
Hi, ngay cả với những dòng trong proguard.cfg của tôi, tôi vẫn nhận được một "NoSuchFieldError: SILENT" trong bản phát hành của mình. Tôi không thể hình dung ra – Arnaud