2016-12-14 14 views
53

Sau khi nâng cấp lên appcompat 25.1.0 Tôi đã bắt đầu bị lỗi có dây.AppCompatActivity.onCreate chỉ có thể được gọi từ trong cùng một nhóm thư viện

Trong mã của tôi:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

tôi nhận được lỗi lint:

AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support)

Làm thế nào để ngăn chặn hành vi như vậy?

+6

thay thế 'invalidateOptionsMenu()' bằng 'supportInvalidateOptionsMenu()'. nó nên làm công việc –

+1

Tôi không sử dụng các phương pháp như vậy trong mã của tôi – pixel

+3

Âm thanh như là một lỗi: https://code.google.com/p/android/issues/detail?id=230387 –

Trả lời

48

Như Felipe đã chỉ ra trong số comment, đây là bug trong phiên bản trước khi phát hành của các công cụ.

Bạn có thể workaround nó bây giờ, cho đến khi Google phát hành bản vá, bằng cách thêm đoạn mã sau vào tập tin build.gradle mô-đun dự án của bạn:

android { 
    lintOptions { 
    disable 'RestrictedApi' 
    } 
} 

Nó đáng chú ý là điều này có thể che giấu lỗi đúng trong dự án của bạn như nó ngăn chặn tất cả các lỗi thuộc loại đó, vì vậy tùy chọn tốt hơn là hạ cấp phiên bản Android Studio và các công cụ được sử dụng trong dự án.

+4

Tôi muốn đề xuất @ Câu trả lời của Cbr dưới đây, nó chỉ ngăn chặn ở mức phương thức, và nó hoạt động trên Android Studio 3, không giống như '// noinspection RestrictedApi'. – Sakiboy

56

Vô hiệu hóa cảnh báo trong lintOptions không phải là một lựa chọn tốt, tốt hơn nên chặn kiểm tra ở cấp tuyên bố.

Thêm nhận xét này trên các dòng mã mà cung cấp cho các cảnh báo:

//noinspection RestrictedApi 
+1

Tôi sẽ làm với cái này. Tôi có thể là giải pháp tốt hơn để không vô hiệu hóa lintOptions trên toàn cầu. Thx –

+2

Không hoạt động trong Android Studio 3. Có một số thay đổi không? – vovahost

+0

không thể nói rằng tôi đang sử dụng bản beta mới nhất cho tất cả các dự án của mình. Và không tìm thấy bất kỳ vấn đề nào – Killer

45

Như phản ứng trước nhấn mạnh, đó là lỗi. Tôi khuyên bạn không nên vô hiệu hóa cảnh báo lint cụ thể trên toàn dự án, nhưng chỉ cho phương pháp đó. Chú thích phương pháp của bạn như sau:

@SuppressLint("RestrictedApi") 
@Override 
public void setupDialog(Dialog dialog, int style) { 
    super.setupDialog(dialog, style); 
    //your code here 
} 
+2

Câu trả lời này là tốt nhất vì nó không vô hiệu hóa trên toàn cầu, nó giải quyết lỗi/cảnh báo trong IDE và tại thời gian biên dịch, dễ hiểu vì nó được liệt kê rõ ràng ở đầu phương thức (không giống '// noinspection RestrictedApi' được ẩn dưới dạng nhận xét và chỉ im lặng cảnh báo trong IDE, nhưng không phải lúc biên dịch) và nó hoạt động với phiên bản Android Studio và Gradle mới nhất. – Sakiboy

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