2013-02-23 4 views
14

Tak więc wszystko szło całkiem nieźle, aż do niedawna, kiedy R.java zdecydował się na ten błąd po dodaniu ikony (dokładniej) (5_content_new.png).Dziwny błąd w R.java, nawet po wyczyszczeniu projektu: "Podsumowania można używać tylko z poziomem źródłowym 1.7 lub wyższym"

Próbowałem oczyścić projekt i ponownie uruchomić zaćmienie, bezskutecznie.

Kod Problem:

public static final class drawable { 
    public static final int 5_content_new=0x7f020000; 
    public static final int ic_launcher=0x7f020001; 
    ... 
} 

Czerwona linia pojawia się tuż pod 5_, a błąd mówi:

Underscores can only be used with source level 1.7 or greater

Czy ktoś napotkał problem jak to wcześniej?

+1

Nazwy zmiennych muszą rozpoczynać się od cyfry. Cyfra oznacza liczbę, a liczby mogą zawierać tylko podkreślenia w java 1.7 i wyższych. –

Odpowiedz

23

Jest to połączenie dwóch rzeczy:

  1. identyfikatory Java nie może zaczynać się od cyfry. Pierwsza postać powinna być literą.

  2. W języku Java 7 wprowadzono alternatywne składnie literałów całkowitych; na przykład 1_000 jest taki sam jak 1000.

Więc co się dzieje, jest to, że kompilator jest analizowanie 5_content_new jak 5_ content_new ... co jest uzasadnione, jeśli poziom był źródłem Java 7, a następnie mówi, że nie używasz Java 7. Jeśli zostało używając Java 7, ten błąd kompilacji zostałby zastąpiony przez błąd, który powiedział, że liczba całkowita (5_) nie była legalna w tym punkcie.

Krótko mówiąc, kod zawiera coś tak "poza ścianą", którego twórca kompilatora nie przewidział w kodzie diagnostycznym kompilatora.


Drugim punktem jest to, że za pomocą dowolnego podkreślenia w zmiennej, metoda, klasa lub nazwy pakietu Java jest naruszeniem styl. Podkreślenia należy używać tylko w nazwach stałych z całych nakładek, takich jak "MAX_VALUE".

+0

Bardzo pouczający! R.java jest generowany podczas budowania projektu Android, a małe litery i podkreślenia wydają się być stylem używanym dla zasobów. Najprawdopodobniej jest to zrobione, ponieważ są one przywoływane w xml, ale nie jestem autorytetem w nazewnictwie konwencji :) –

+1

Tak, dobrze ... błędy stylu w generowanym kodzie są niefortunne, ale nie powinieneś * potrzebować * patrzeć na to. W tym przypadku wygląda na to, że wygenerowany błąd 'R.java' ma błąd ... –

+0

Podsumowania mogą być używane jako separatory, w których przypadku wielbłąda nie działa dobrze. Na przykład. Posiadanie adresu URL jako części nazwy klasy. –

3

Właśnie teraz próbowali zmiany nazwy istniejącego rozciągliwej w kompilacji-fine Android projektu kopalni i Eclipse wyrzucił to okno się:

Eclipse Error (Jeśli nie można zobaczyć obraz bardzo dobrze, okno dialogowe jest mówiąc Nazwa zasobu musi zaczynać się od znaku.

sposób, który wyprodukowałem ten dialog została zmiana nazwy rozciągliwej pliku. Pierwotna nazwa rozciągliwej był button_blue_normal.9.png, przemianowano go 5_button_blue_normal.9.png i przycisnął Dialog wejść. pojawiło się natychmiast po naciśnięciu wprowadź:

Nigdy o tym nie wiedziałam, ale najwyraźniej będziesz potrzebował litery, ani cyfry, na samym początku nazwy pliku z wyciągami.

+1

Dziękujemy! To ma sens, widząc, że nazwy zmiennych (iirc) nie powinny zaczynać się od liczb w java. –

+0

Jesteś po prostu wspaniały: D: D +1 –

1

Wiem, że spóźniam się na imprezę, ale sam wpadłem na to, kiedy zacząłem pracować z komponentem ActionBar.

Odpowiedź ScootrNova doprowadziła mnie do rozwiązania. Problem polegał na tym, że dodatek ikon, zalecany przez system Android, został pobrany do użytku w samouczkach. Wszystkie nazwy plików zaczynały się od liczb całkowitych (1_xxx.png itd.). Usunąłem te, których nie używałem, zmieniono nazwy na coś, co zaczynało się na literę (użyłem jako przykładu "icon_xxx.png") i zostało skompilowane bez błędów.

+0

Tak, to ten sam problem, który miałem. 5_content_new.png był w zestawie ikon –

1

Miałem ten sam problem i rozwiązałem go po umieszczeniu cyfry po tekście nie na początku. Posiadałem linię 2_Activity i zmieniłem ją na Activity2. To było moje rozwiązanie. Mam nadzieję, że to pomoże komuś.

0

Miałem ten sam problem. Rozdzielczość: spójrz na pliki res, wyciągnięcia lub wewnątrz xml i zmień nazwy plików lub ciągów, które zaczynają się od (ciąg podkreśleń liczb) 1 ciąg łańcuchowy do łańcucha_1.

Mamy nadzieję, że pomoże to w rozwiązaniu problemu.

Powiązane problemy