AppCompatActivity.onCreate chỉ có thể được gọi từ trong cùng một nhóm thư viện


107

Sau khi nâng cấp lên appcompat, 25.1.0tôi bắt đầu gặp lỗi có dây.

Trong mã của tôi:

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

Tôi gặp 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 đó?


6
thay thế invalidateOptionsMenu()bằng supportInvalidateOptionsMenu(). nó sẽ thực hiện 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 mình
pixel

3
Có vẻ như đó là một lỗi: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

Câu trả lời:


94

Như Felipe đã chỉ ra trong bình luận của mình, đây là một lỗi trong phiên bản trước khi phát hành của các công cụ.

Bạn có thể giải quyết vấn đề này ngay bây giờ, cho đến khi Google phát hành bản sửa lỗi, bằng cách thêm phần sau vào tệp build.gradle của mô-đun dự án của bạn:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

Cần lưu ý rằng điều này có thể ẩn các lỗi thực sự trong dự án của bạn vì 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 sẽ là hạ cấp phiên bản Android Studio và các công cụ được sử dụng trong dự án.


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

137

Như các câu trả lời trước đã đánh dấu, đó là lỗi. Tôi khuyên bạn không nên tắt toàn bộ dự án cảnh báo xơ vải cụ thể, nhưng chỉ dành 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
}

4
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 điểm biên dịch, rất dễ hiểu vì nó được liệt kê rõ ràng ở đầu phương pháp (không giống như //noinspection RestrictedApinó bị ẩn dưới dạng nhận xét và chỉ tắt tiế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

1
Câu trả lời này nên được sử dụng. Không bao giờ là ý tưởng hay để thực hiện việc vô hiệu hóa toàn cầu đối với dự án.
Christopher Smit

1
Bạn cũng có thể sử dụng chú thích này trên chỉ dòng bạn cần thay vì tắt cho toàn bộ phương pháp
Ben Kane

64

Tắt cảnh báo trong lintOptions có vẻ không phải là một lựa chọn tốt, tốt hơn là bạn nên ngăn chặn việc kiểm tra ở cấp câu lệnh.

Thêm nhận xét này phía trên dòng mã đưa ra cảnh báo:

//noinspection RestrictedApi

2
Tôi sẽ đi với cái này. Tôi có thể là giải pháp tốt hơn để không tắt lintOptions trên toàn cầu. Thx
Yoraco Gonzales

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

13
@vovahost tôi sử dụng @SuppressLint("RestrictedApi")thay vì //noinspection RestrictedApikhông có vấn đề gì trong Android Studio 3
vector

1
Có chắc chắn, cái đó cũng phù hợp với tôi nhưng // noinspection chỉ hoạt động cho một câu lệnh thì tốt hơn.
vovahost

1
@Sakiboy Giải pháp của Cbr áp dụng cho toàn bộ phương pháp mà tôi không muốn sử dụng vì nó có thể ẩn các lỗi khác.
vovahost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.