Android Studio cho biết "không thể phân giải biểu tượng" nhưng dự án biên dịch


97

Tôi đang nhập twitter4j trong AndroidStudio, sử dụng phần sau trong build.gradle của mình:

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
  compile files('libs/twitter4j-core-3.0.4.jar')
}

Dự án biên dịch tốt và tôi có thể tạo các đối tượng twitter mà không gặp vấn đề gì. Tuy nhiên, trong Android studio, bất kỳ thứ gì tham chiếu đến thư viện đó hiển thị "không thể phân giải biểu tượng" và hiển thị màu đỏ. Tôi cần làm gì để Android Studio nhận ra thư viện?

Tôi đã thử xây dựng lại dự án, ./gradlew clean, đóng và mở lại dự án của mình.



năm 2018, Android Studio 3+: đôi khi, Android Studio và Gradle không đồng ý. giải pháp tại đây: stackoverflow.com/questions/50313885/…
user1506104

Tôi đã gặp sự cố tương tự sau khi nhập một dự án bài tập vào Android Studio. Khi Android Studio được nhập đã đưa cho tôi những cảnh báo và đề xuất cập nhật phiên bản sdk, vì vậy tôi đã làm theo lời khuyên. Sau đó, một số thứ không còn tương thích nữa, vì vậy Android Studio đề xuất thay đổi một phiên bản khác của thứ khác. Sau khi làm theo tất cả những lời khuyên này, tôi đã có cùng một vấn đề "không thể tìm thấy biểu tượng". Tôi đã đảo ngược thay đổi, nhập lại dự án và không làm theo các gợi ý của Android Studio lần này. Sau đó các lỗi đã biến mất. Hãy cẩn thận với việc làm theo các gợi ý của chương trình đó một cách mù quáng.
David

Câu trả lời:


237

Không biết liệu điều này có hiệu quả hay không nhưng suy nghĩ duy nhất của tôi cho đến nay: nhấp chuột phải vào tệp jar trong cây tệp trong AS và chọn "Thêm làm thư viện ..."

CHỈNH SỬA: Bạn có thể thực hiện "Tệp" -> "Vô hiệu hoá bộ nhớ cache ..." và chọn tuỳ chọn "Vô hiệu hoá và Khởi động lại" để sửa lỗi này.

CHỈNH SỬA 2: Bản sửa lỗi này sẽ hoạt động cho tất cả các sự cố tương tự và không phải là giải pháp cụ thể cho twitter4j.


Tôi không nhận được điều đó như một tùy chọn khi tôi nhấp chuột phải vào bình. Tôi đang chạy 0.2.13.
TG-T

Điều này có thể có nghĩa là bạn đã làm điều này. Hãy thử Tệp> Cấu trúc Dự án và xác nhận rằng bạn thấy tệp .jar trong nút mô-đun.
doydoy

11
Việc vô hiệu hóa bộ nhớ đệm và khởi động lại không hoạt động đối với tôi. Tôi cũng đã thử cài đặt lại studio android và nhập lại dự án. Điều này rất khó chịu ...
thợ đồng hồ

3
"Tệp" -> "Không hợp lệ bộ nhớ cache ..." vừa lưu ngày của tôi. Tôi đã lãng phí quá nhiều thời gian cho vấn đề này. Tại sao câu trả lời này không phải là kết quả tìm kiếm hàng đầu? Cảm ơn bạn rất nhiều!
Eric Cochran

1
tung lên trong lòng biết ơn của tôi
Yevgeny Simkin

33

Thử thay đổi thứ tự của các phụ thuộc trong Tệp> Cấu trúc Dự án> (chọn dự án của bạn)> Phụ thuộc.

Bộ nhớ đệm không hợp lệ không hoạt động với tôi, nhưng việc di chuyển công trình của tôi từ cuối danh sách lên đầu đã làm được.


Thay đổi thứ tự của các phụ thuộc giúp tôi, tôi đã thử tất cả các giải pháp được đưa ra trong các câu trả lời, chỉ bạn giúp tôi, cảm ơn.
wqycsu

Việc chỉ chuyển một phần phụ thuộc lên đã là một mẹo nhỏ đối với tôi! (Android Studio 3.0.1).
Sébastien

Vâng, không quan trọng bạn di chuyển phụ thuộc nào, chỉ cần thay đổi thứ tự của bất kỳ ai, điều này cũng hoạt động cho Android Studio 3.3.
karique

12

Đây là những gì làm việc cho tôi.

Trong bảng Project, nhấp chuột phải vào tên dự án và chọn Open Module Settingstừ menu bật lên.

sau đó thay đổi Compile SDK Version phiên bản tối thiểu có sẵn (phiên bản sdk tối thiểu bạn đặt trong dự án). đợi studio android tải mọi thứ.

Nó sẽ cung cấp cho bạn một số lỗi, hãy bỏ qua những lỗi đó.

Bây giờ hãy truy cập tệp java của bạn và android studio sẽ đề xuất bạn nhập

nhập android.support.v4.app.FragmentActivity;

Nhập nó, sau đó quay lại Open Module Settingsvà thay đổi phiên bản sdk biên dịch trở lại như trước đó.

Chờ mọi thứ tải và thì đấy.


đó là một công việc tuyệt vời. trong trường hợp của tôi, Android Studio đã báo cáo cho tôi tất cả các Lớp SDK không thể giải quyết (bao gồm Chuỗi, Số nguyên, TextView, v.v.). trước đó, aStudio cũng nói với tôi rằng cô ấy không thể tìm ra SDK android-14 mà tôi đã sử dụng để biên dịch các dự án của mình. Tôi đã bỏ qua điều đó để các vấn đề xảy ra. cuối cùng, tôi tìm thấy câu trả lời này và làm theo, thay đổi phiên bản sdk biên dịch sau đó hoạt động. cảm ơn để tiết kiệm thời gian cho tôi.
VinceStyling

Now go to your java file and android studio will suggest you importKhông phải trong trường hợp của tôi
NineCattoRules 02/02

9

Đối với tôi là do dự án thư viện đã nhập gây ra, hãy nhập một cái gì đó vào build.gradle và xóa nó một lần nữa và nhấn đồng bộ ngay bây giờ, lỗi đã biến mất.


6

Tôi cũng gặp sự cố này với ứng dụng Android của mình tùy thuộc vào một số thư viện Android của riêng tôi (sử dụng Android Studio 3.0 và 3.1.1).

Bất cứ khi nào tôi cập nhật lib và quay lại ứng dụng, kích hoạt Gradle Sync, Android Studio không thể phát hiện các thay đổi mã mà tôi đã thực hiện đối với lib. Quá trình biên dịch hoạt động tốt, nhưng Android Studio hiển thị các dòng lỗi màu đỏ trên một số mã sử dụng lib.

Sau khi điều tra, tôi phát hiện ra rằng đó là do gradle liên tục trỏ đến phiên bản đã biên dịch cũ của libs của tôi. Nếu bạn truy cập yourProject / .idea / architects /, bạn sẽ thấy danh sách các tệp xml có chứa liên kết đến phiên bản đã biên dịch của libs của bạn. Các tệp này bắt đầu bằng Gradle__artifacts _ *. Xml (trong đó * là tên của lib của bạn).

Vì vậy, để Android Studio lấy phiên bản libs mới nhất của bạn, bạn cần xóa các tệp Gradle__artifacts _ *. Xml này và Android Studio sẽ tạo lại chúng, trỏ đến phiên bản libs được biên dịch mới nhất của bạn.

Nếu bạn không muốn làm điều đó theo cách thủ công mỗi khi bạn nhấp vào "Đồng bộ hóa Gradle" (ai muốn làm điều đó ...), bạn có thể thêm nhiệm vụ gradle nhỏ này trong tệp build.gradle của ứng dụng.

task deleteArtifacts {
    doFirst {
        File librariesFolderPath = file(getProjectDir().absolutePath + "/../.idea/libraries/")
        File[] files = librariesFolderPath.listFiles({ File file -> file.name.startsWith("Gradle__artifacts_") } as FileFilter)

        for (int i = 0; i < files.length; i++) {
            files[i].delete()
        }
    }
}

Và để ứng dụng của bạn luôn thực thi tác vụ này trước khi thực hiện đồng bộ hóa gradle, bạn chỉ cần vào cửa sổ Gradle, sau đó tìm tác vụ "deleteArtifacts" trong yourApp / Tasks / other /, nhấp chuột phải vào nó và chọn "Execute Trước khi đồng bộ hóa "(xem bên dưới).

Cửa sổ Gradle để định cấu hình thực thi tác vụ

Giờ đây, mỗi khi bạn thực hiện đồng bộ hóa Gradle, Android Studio sẽ buộc phải sử dụng phiên bản libs mới nhất của bạn.


5

Khi tôi gặp phải vấn đề này (mã màu đỏ nhưng chúng hoạt động chính xác) trong dự án của tôi;

Đầu tiên, tôi đã thực hiện điều đó (Tệp -> Cho biết Cashes) -> (Vô hiệu hóa và Khởi động lại).

Cuối cùng, tôi đồng bộ hóa lại tệp build.gradle trong ứng dụng của mình. Sau khi vấn đề được giải quyết.


3

Invalidate Caches / Restart không làm việc cho tôi lần này.

Đã tìm thấy một giải pháp như thế này:

  1. Loại bỏ compile ***hoặc implementation ***dòng trong build.gradle.

  2. Làm sạch và xây dựng lại. Lỗi cần được nêu ra ở đây.

  3. Thêm dòng ở bước 1 trở lại build.gradle.

  4. Làm sạch và xây dựng lại.

Kỳ dị...


2

Sự cố này đã xảy ra với tôi khi dự án Glass của tôi không sử dụng SDK được cài đặt ở vị trí mặc định của Android Studio. Tôi đang sử dụng một vị trí khác mà tôi đã có trước đây từ ADT, vì tôi cố gắng tránh tải lại mọi thứ. Sau khi tôi trỏ dự án trở lại vị trí SDK trong vị trí cài đặt của Android Studio, sự cố đã biến mất.


Vâng, tôi đoán đó cũng là một thông tin tốt: theo mặc định, android studio sẽ quyết định tất cả SDK được cài đặt trong thư mục cài đặt android studio mặc định. Điều này sẽ cần được sửa đổi nếu bất kỳ điều gì không tuân theo mô hình đó.
doydoy

2

Tôi đã gặp vấn đề này trong vài ngày nay và cuối cùng đã tìm ra nó! Tất cả các giải pháp khác không làm việc cho tôi btw.

Giải pháp: Tôi đã có các ký tự đặc biệt trong đường dẫn dự án của mình!

Chỉ cần đảm bảo không có giải pháp nào trong số đó và bạn sẽ ổn hoặc ít nhất một trong các giải pháp khác sẽ phù hợp với bạn.

Hy vọng điều này sẽ giúp ai đó!


Vui lòng kiểm tra xem bạn có đường dẫn dự án có các ký tự đặc biệt như thế nào không! (dấu chấm than). Trong một sự cố tương tự mà tôi đã gặp phải stackoverflow.com/questions/32477067/… , đây là nguyên nhân gốc rễ. Nhiều ứng dụng Java dường như không chấp nhận các ký tự đặc biệt như vậy (ví dụ: thực hiện 'làm sạch gradlew' từ thiết bị đầu cuối sẽ không thành công và ném RunTimeException.). Không có giải pháp nào khác được đăng trực tuyến đã giúp tôi. Nhưng, một khi tôi đã loại bỏ! từ đường dẫn và đã xây dựng sạch sẽ, Android Studio đã hoạt động một cách kỳ diệu.
Jim C

THẬT TUYỆT VỜI! Cảm ơn :)
Josep Escobar

1

Gần đây, tôi đã gặp sự cố tương tự với Android Studio 1.3. Giải pháp hoạt động duy nhất là xóa các thư mục .gradle và .idea và nhập lại dự án vào Android Studio.


1

Đối với những người đã thử câu trả lời được chấp nhận và không thành công,

Tôi cũng đã thử câu trả lời được chấp nhận và không hiệu quả với tôi. Sau đó, tôi đã cập nhật dự án của mình với kho lưu trữ và đồng bộ hóa dự án và các cảnh báo không thể giải quyết đã biến mất.




0

Trong trường hợp của tôi, tôi đã tạo một tệp mới bằng GUI và xác định một giao diện trong tệp. Tôi tiếp tục gặp lỗi biểu tượng này vì tệp không phải là tệp "java". Nó không có phần mở rộng nào trên đó.

Sau khi sửa đổi phần mở rộng tệp thành ".java", hệ thống tìm thấy các ký hiệu một cách chính xác.


0

Trong trường hợp của tôi, tệp jar không có tệp META-INF / MANIFEST.MF. Sau khi thêm một, nó đã hoạt động!


0

Đối với trường hợp của tôi khi làm việc với AndroidStudio 2.2.3, giải pháp là thay đổi trình bao bọc / phân phối gradle để sử dụng trình bao bọc / phân phối cục bộ trong Cài đặt Gradle (mặc dù được "khuyến nghị"). nhập mô tả hình ảnh ở đây


0

Điều này đã làm việc cho tôi-- (Tệp -> Cho biết Cashes) -> (Vô hiệu hóa và Khởi động lại).


0

Tôi đã thử Vô hiệu hóa bộ nhớ cache / khởi động lại hoặc Dự án sạch -> xây dựng lại dự án. Những thứ này không hiệu quả với tôi.

Giải pháp cuối cùng là mở cửa sổ Dự án ở phía bên trái của IDE, trong chế độ Dự án, xóa thư mục .gradle và .idea, THÌ bạn có thể vô hiệu hóa bộ nhớ đệm và khởi động lại. Điều này đã sửa nó.


0

Thay đổi biên dịch thành hiện thực trong build.gradle.


0

Thay đổi cài đặt chèn ngôn ngữ phù hợp với tôi.

Đặt con trỏ vào bất kỳ mã gạch chân màu đỏ nào và Alt + Enter

nhập mô tả hình ảnh ở đây

Bây giờ hãy chọn Language Injection Settingsvà một cửa sổ sẽ mở ra như hình dưới đây.

nhập mô tả hình ảnh ở đây

Bỏ chọn tùy chọn đã chọn và nhấp vào Ok

nhập mô tả hình ảnh ở đây

Hy vọng điều này sẽ giúp ai đó.


0

Điều đó đã xảy ra với tôi khi tôi xóa toàn bộ tệp trong .gradle/cachesđó, sau đó studio tải xuống phần phụ thuộc. Những phụ thuộc không được hiển thị trong External Librariesnhưng tôi có thể xây dựng Ứng dụng thành công. rebuild clean Invalidate and Restartkhông có tác dụng. Tôi đã giải quyết vấn đề theo các bước:

  • Đóng hoàn toàn Android Studio
  • Tẩy .idea gói trong dự án của bạn
  • Khởi động lại Android Studio

0

Tôi đã thử điều này nhưng không có gì hiệu quả với tôi:

  • Invalidate Caches / Restart
  • Changing the order of dependencies
  • Sync project with Gradle Files
  • Clean -> Rebuild Project

Trong trường hợp của tôi, chỉ cần làm:

  • Delete all files in .idea/libraries folder
  • Rebuild Project

0

Đối với tôi, tôi đã cập nhật gradle-wrapper.properties thành 4.4

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

0

Tôi tìm thấy cách dễ nhất

Xác định thư viện gây ra lỗi cú pháp trong Studio.

Ví dụ, nếu AppCompatActivityđang hiển thị lỗi thì bạn sẽ thực hiện thao tác dưới đây trên AppCompat Dependency.

  • Xóa phần phụ thuộc đang hiển thị lỗi cú pháp & Đồng bộ hóa.
  • Thêm lại & Đồng bộ hóa.

Đó là nó, lỗi đã biến mất!

Trước

Trước

Sau

Sau


0

Không có câu trả lời nào ở trên phù hợp với tôi.

Sau nhiều lần cố gắng, tôi đã nâng cấp com.android.tools.build:gradle trong Project / build.gradle từ 2.3.0 lên 3.0.1 và nó hoạt động.

Tôi đoán phiên bản của com.android.tools.build:gradle phải khớp với phiên bản AndroidStudio và phiên bản AS của tôi là 3.2.1



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.