2014-04-16 21 views
22

Android Lint than phiền về việc sử dụng assert() và khuyên bạn nên sử dụng BuildConfig.DEBUG kiểm tra có điều kiện thay thế."Kiểm tra điều kiện BuildConfig.DEBUG có điều kiện" là gì?

Tôi hiểu rõ lý do tại sao khẳng định không an toàn để sử dụng trên Android, nhưng những gì chính xác là "BuildConfig.DEBUG kiểm tra có điều kiện"?

Mã ví dụ sau được sửa đổi như thế nào?

Context ctx = getContext(); 
assert (ctx instanceof FragmentActivity); 
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager(); 

Trả lời

24

Tôi nghĩ rằng những gì lint đang cố gắng nói là thêm một tấm séc của BuildConfig.DEBUG cho tuyên bố khẳng định

if (BuildConfig.DEBUG)

assert (ctx instanceof FragmentActivity) ;

để khẳng định rằng chỉ có tác dụng khi bạn đang thử nghiệm các ứng dụng, nhưng trên phiên bản phát hành khẳng định sẽ không được gọi là

BuildConfig.DEBUG sẽ là sai lầm khi bạn xuất phát hành xây dựng.

Edit: Hình như bạn nên làm một cái gì đó như dưới đây thay vì sử dụng khẳng định

if(BuildConfig.DEBUG && !(ctx instanceof FragmentActivity)) 
     throw new RuntimeException(); 

thay vì khẳng định.

nguồn: http://tools.android.com/recent/androidstudio045released

Một số kiểm tra lint mới, và trong một đặc biệt mà cờ sử dụng các từ khóa khẳng định. Điều này không hoạt động đáng tin cậy trên các thiết bị và bạn nên sử dụng BuildConfig.DEBUG để thực hiện kiểm tra có điều kiện thay thế.

+1

Nhưng mã khẳng định() không được gọi/không hoàn toàn được triển khai trên dalvik, vì vậy ngay cả khi chạy thử nghiệm (trên trình giả lập), khẳng định() không nên được sử dụng. –

+1

AFAIK, khẳng định có thể được bật bằng cách sử dụng debug.assert = 1 hệ thống chống đỡ – nandeesh

+1

Theo bài đăng này http://code.google.com/p/android/issues/detail?id=65183 "[assert()] chưa bao giờ được hỗ trợ trong Dalvik. Thuộc tính hệ thống tồn tại, nhưng bị bỏ qua nhiều ở nhiều nơi khác nhau. Có một lý do khiến điều này không được ghi lại hoặc dễ sử dụng. " –

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