Pytanie Identyfikatory zasobów Androida nagle nie są ostateczne, przełącznik () jest uszkodzony


Przez jakiś czas miałem projekt Java na Androida. Dzisiaj zaktualizowałem narzędzia programistyczne Androida do najnowszej wersji Google. I projekt się zepsuł - dostaję garść "komunikatów o błędach kompilacji" wyrażeń sprawy muszą być wyrażeniami stałymi ".

Okazuje się, że plik R.java jest teraz generowany inaczej. Dawniej miałoby to sporo

public static final int MyID=0x12340000;

sprawozdania; teraz wygląda (po wyczyszczeniu / odbudowie) w ten sposób:

public static int MyID=0x12340000;

final przepadło. Więc wszystkie przełączniki identyfikatorów zasobów, które miałem (i miałem kilka) są błędne. Co się stało, proszę? Czy to tylko ja? Jakie jest uzasadnienie? Czy jest to udokumentowane w dowolnym miejscu? Mogę przynieść final wracasz jakoś?


17
2017-10-20 19:06


pochodzenie




Odpowiedzi:


Stało się tak wczoraj, kiedy wydano SDK / ADT 14:

Od ADT 14 nie ma już stałych zasobów w projektach bibliotecznych   finał. Zostało to wyjaśnione bardziej szczegółowo w http://tools.android.com/tips/non-constant-fields

Dostępna jest poprawka z ADT 14: http://tools.android.com/recent/switchstatementconversion

Aby zacytować z uzasadnienia:

W przypadku łączenia wielu projektów bibliotecznych rzeczywiste wartości parametru   pola (które muszą być unikalne) mogą kolidować. Przed ADT 14 wszystkie pola   były ostateczne, dlatego wszystkie biblioteki musiały mieć wszystkie   zasoby i powiązany kod Java skompilowane razem z główną   projekt, ilekroć były używane. To było złe dla wydajności, ponieważ   zbudował bardzo wolno. Zapobiegło to również dystrybucji biblioteki   projekty, które nie zawierały kodu źródłowego, ograniczając zakres zastosowania   projektów bibliotecznych.

Powód, dla którego pola nie są już ostateczne, oznacza, że ​​słoiki biblioteki można skompilować raz i ponownie wykorzystać bezpośrednio w innych projektach. Oprócz umożliwienia dystrybucji binarnej wersji projektów bibliotecznych (wchodzących w r15), powoduje to o wiele szybsze kompilacje.


24
2017-10-20 19:11



Właściwie to ma sens. Widzę, skąd pochodzą. Fakt, że biblioteki Androida były tylko połączonymi źródłami w przeciwieństwie do, dobrze, skompilowanych bibliotek, był dla mnie niewielkim problemem od jakiegoś czasu. Ponadto, dzięki Google zyskujesz magicznego refaktora. - Seva Alekseyev
To tylko konsekwencja idiotycznej decyzji projektowej zespołu Android. Za każdym razem, gdy zobaczysz jakiś wygenerowany plik z kilkoma stałymi liczbami magicznymi, powinieneś spojrzeć na to zabawnie. Dzięki, Google za złamanie bandy kodu źródłowego twoich programistów z powodu zupełnego braku przewidywania. Publiczne statyczne ints. Dużo lepiej?! - Nate