2012-07-02 11 views
8

Wciąż wracam do tego problemu, ponieważ nie wydaje się, że jest to czyste rozwiązanie. Czy ktoś ma dobrą strategię, aby wykluczyć zasoby z projektu podrzędnego w systemie Android?Warunkowe włączenie/wyłączenie zasobów dla apk z Androidem

Mam dwa scenariusze:

1 - projekt biblioteki bazowa pliki lokalizacyjne dla en, es, itp

--Child projekt 1 wykorzystuje wszystkie lokalizacje, a wszystko jest dobre

- -Dziecki projekt 2 jest zlokalizowany tylko w języku angielskim, ale ostateczny .apk miałby częściową lokalizację z powodu zasobów nadrzędnych (chociaż ADT19 lub tak dodał reguły Lint, aby ostrzec/uniemożliwić zrobienie tego).

Jedyne rozwiązanie, jakie mam teraz, to posiadanie oddzielnej biblioteki nadrzędnej dla lokalizacji i uwzględnianie go tylko w projekcie podrzędnym 1. Jest to duży problem, jeśli masz dużo projektów bibliotecznych.

2 - Wykluczenie zasobów związanych z budową. Mam kilka zdjęć, które są potrzebne tylko dla moich specyficznych dla Nooków wersji moich aplikacji, które są uruchamiane przez flagę. Kod warunkowy działa świetnie, ale zasoby są zawsze uwzględniane.

Wolałbym nie tworzyć kolejnego projektu potomnego dla KAŻDEGO z moich aplikacji. Czy jest jakiś sposób, aby ustawić flagę kompilacji/kompilacji, aby przycinać określone zasoby obrazu, aby nie dostały się do ostatecznego pliku .apk?

Drugi problem może być specyficzny dla mnie, ale jestem zaskoczony, że nie mogę znaleźć żadnej dobrej dyskusji na temat pierwszego punktu. Czy żaden inny programista nie lokalizuje tylko niektórych aplikacji? A może większość ludzi po prostu ignoruje ten problem?

+0

Widziałem rozmowę o dodawaniu plików do.apk, ale szukam czegoś bardziej przypominającego ProGuarda - automatycznego i wbudowanego w narzędzia zamiast hackowania ostatecznego pliku .apk. – ProjectJourneyman

+0

Twoje scenariusze są możliwe do zrobienia za pomocą zewnętrznych narzędzi do budowania, takich jak Ant lub Maven, oba zapewniają możliwość precyzyjnego sterowania każdym krokiem podczas procesu kompilacji (kompilacja, dekompresja, pakowanie itd.). jeśli korzystasz z Mavena, wyłącz zasoby za pomocą [maven-resource-plugin] (http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html). – yorkw

+0

Może będę musiał pójść tą drogą. Miałem jednak nadzieję na czystsze (i idealnie prostsze) rozwiązanie. – ProjectJourneyman

Odpowiedz

3

1 - projekt biblioteki bazowa pliki lokalizacyjne dla en, es, itp

Masz dwa projekty z wykorzystaniem tej biblioteki, a tylko jeden z nich potrzebuje wszystkich tłumaczeń. Stąd te tłumaczenia mogą być w projekcie przy użyciu biblioteki i wymagające tłumaczeń, a nie w samej bibliotece. Nie różni się to niczym od innych projektów dostosowujących zasoby biblioteki (np. Zastępując ikony, zastępując układy).

Teraz, gdy zaczynasz wchodzić w bardziej skomplikowane miksy (np. Dwa projekty wymagają tłumaczenia, a trzeci nie), zaczynasz napotykać problemy.

Wykluczenie zasobów związanych z budową. Mam kilka zdjęć, które są potrzebne tylko dla moich specyficznych dla Nooków wersji moich aplikacji, które są uruchamiane przez flagę. Kod warunkowy działa świetnie, ale zasoby są zawsze uwzględniane.

Xav i ja rozmawialiśmy trochę o zasobach warunkowych in this issue. Koncentruje się na debugowaniu a produkcji (zasoby równoważne BuildConfig.DEBUG), ale brzmi to jak coś bardziej elastycznego.

Obie te rzeczy mogą być obsługiwane przez niestandardowy skrypt budowania wersji. W normalnych kompilacjach debugowania zostawiałbyś wszystko sam; w kompilacji produkcyjnej skrypt Ant powinien pracować z kopią projektu, przycinając katalogi, które nie są potrzebne, przed skompilowaniem, podpisaniem i zipalignowaniem.

+0

To właśnie zrobiłem dla projektu3, który ma jednorazowe tłumaczenie na włoski (a zatem kilka plików strings_libx.xml odpowiadających plikom macierzystym). Moje drzewo bibliotek i aplikacji jest jednak coraz bardziej złożone i jestem niezadowolony z dodawania złożoności (złożoność obsługi z powodu powielonych plików ciągów lub złożoność obszaru roboczego przy użyciu LibX w celu rozdzielenia zasobów językowych). Myślę, że napisanie może być na ścianie - muszę zagłębić się w narzędzia i napisać kilka akcji, by przyciąć wyniki. – ProjectJourneyman

+0

Nadal nie znalazłem czasu na tworzenie skryptów Anta, ale zaczynam myśleć, że to naprawdę jest właściwe rozwiązanie. Ponieważ moje potrzeby stają się bardziej złożone, nie ma zastępstwa dla elastyczności moich własnych skryptów. Nie sądzę, aby flaga DEBUG oferowała wystarczającą możliwość konfiguracji. Ponadto, jeśli wystarczająco długo czekam, nowy system kompilacji systemu Android z Gradle zostanie sfinalizowany i mogę się tego nauczyć: http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman