Dodaj zasoby aplikacji

Zasoby aplikacji, takie jak ikony aplikacji, zlokalizowane ciągi znaków i mapy bitowe, są uporządkowane w katalogach specyficznych dla typu w katalogu res/ każdego modułu. Możesz też dodać alternatywne wersje każdego pliku zoptymalizowane pod kątem różnych konfiguracji urządzenia, np. wersję bitmapy w wysokiej rozdzielczości na ekrany o wysokiej gęstości pikseli.

Android Studio pomaga na kilka sposobów dodawać nowe zasoby i zasoby alternatywne, w zależności od typu zasobu, który chcesz dodać. Na tej stronie opisujemy, jak dodawać podstawowe pliki zasobów, jak zmieniać lokalizację zasobów i jak działa scalanie zasobów.

W Jetpack Compose interfejs użytkownika definiujesz w Kotlinie, a nie w układach XML. Nadal jednak używasz katalogu res/ do przechowywania statycznych zasobów na poziomie aplikacji, takich jak ikony, czcionki i tłumaczenia. Aby dowiedzieć się, jak uzyskać dostęp do tych zasobów w funkcjach kompozycyjnych, przeczytaj artykuł Zasoby w Compose.

Szczegółowe informacje o tym, jak tworzyć określone typy zasobów, znajdziesz na tych stronach:

Informacje o tym, jak odwoływać się do zasobów z kodu aplikacji, znajdziesz w artykule Omówienie zasobów aplikacji.

Dodawanie pliku zasobu XML

Chociaż linki na poprzedniej stronie opisują przepływy pracy dostosowane do każdego typu zasobu, możesz dodać dowolny plik zasobu XML, wykonując te czynności:

  1. W oknie Projekt w widoku Android lub Projekt kliknij moduł aplikacji docelowej.
  2. Wybierz Plik > Nowy > Plik zasobu Androida.

    Rysunek 1. Okno Nowy plik zasobu.

  3. Wypełnij szczegóły w oknie:
    • Nazwa pliku: wpisz nazwę pliku XML (nie musi mieć sufiksu .xml).
    • Typ zasobu: wybierz typ zasobu, który chcesz utworzyć.
    • Element główny: w razie potrzeby wybierz główny element XML dla pliku. Niektóre typy zasobów obsługują tylko 1 typ elementu głównego. W zależności od wybranego typu zasobu ta opcja może być niedostępna do edycji.
    • Zbiór źródeł: wybierz zbiór źródeł w którym chcesz zapisać plik.
    • Nazwa katalogu: katalog musi mieć nazwę, która jest specyficzna dla typu zasobu i kwalifikatorów konfiguracji. Nie edytuj tej opcji, chyba że chcesz ręcznie dodać kwalifikatory konfiguracji do nazwy katalogu (zamiast tego użyj opcji Dostępne kwalifikatory).
    • Dostępne kwalifikatory: zamiast ręcznie dodawać kwalifikatory konfiguracji do nazwy katalogu, możesz je dodać, wybierając kwalifikator z listy i klikając Dodaj .
  4. Gdy dodasz wszystkie kwalifikatory, kliknij OK.

Wbudowane złożone zasoby XML

Niektóre złożone zasoby wymagają wielu plików zasobów XML. Na przykład, chociaż Compose ma zaawansowane interfejsy API animacji, może być konieczne użycie animowanego obiektu rysowalnego wektorowo, który ma obiekt rysowalny wektorowo i obiekt animacji oraz wymaga co najmniej 3 plików XML.

W tym przykładzie możesz utworzyć i zachować 3 oddzielne pliki XML, jeśli chcesz ponownie użyć co najmniej 1 z nich. Jeśli jednak pliki XML są używane tylko w przypadku tego animowanego obiektu rysowalnego wektorowo, możesz zamiast tego użyć formatu zasobu wbudowanego dostępnego w narzędziu Android Asset Packaging Tool (AAPT). Za pomocą AAPT możesz zdefiniować wszystkie 3 zasoby w 1 pliku XML. Więcej informacji znajdziesz w artykule Wbudowane złożone zasoby XML.

Dodawanie katalogu zasobów

Aby dodać nowy katalog zasobów, wykonaj te czynności:

  1. W oknie Projekt kliknij moduł aplikacji docelowej.
  2. Wybierz Plik > Nowy > Katalog zasobów Androida.

    Rysunek 2. Okno Nowy katalog zasobów.

  3. Wypełnij szczegóły w oknie:
    • Nazwa katalogu: katalog musi mieć nazwę, która jest specyficzna dla typu zasobu i kombinacji kwalifikatorów konfiguracji. Nie edytuj tej opcji, chyba że chcesz ręcznie dodać kwalifikatory konfiguracji do nazwy katalogu (zamiast tego użyj opcji Dostępne kwalifikatory).
    • Typ zasobu:wybierz typ zasobu, który ma zawierać katalog.
    • Zbiór źródeł:wybierz zbiór źródeł, w którym chcesz umieścić katalog.
    • Dostępne kwalifikatory:zamiast ręcznie dodawać kwalifikatory konfiguracji do nazwy katalogu, możesz je dodać, wybierając kwalifikator z listy i klikając Dodaj .
  4. Gdy dodasz wszystkie kwalifikatory, kliknij OK.

Zmiana katalogu zasobów

Domyślnie zasoby znajdują się w katalogu module-name/src/source-set-name/res/. Na przykład zasoby głównego zbioru źródeł modułu znajdują się w katalogu src/main/res/, a zasoby zbioru źródeł debugowania – w katalogu src/debug/res/.

Możesz jednak zmienić te ścieżki na dowolną inną lokalizację (względną względem pliku build.gradle) za pomocą właściwości res.srcDirs w bloku sourceSets. Na przykład:

Dynamiczny

android {
    sourceSets {
        main {
            res.srcDirs = ['resources/main']
        }
        debug {
            res.srcDirs = ['resources/debug']
        }
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            res.srcDirs("resources/main")
        }
        getByName("debug") {
            res.srcDirs("resources/debug")
        }
    }
}

Możesz też określić wiele katalogów zasobów dla 1 zbioru źródeł, a narzędzia do kompilacji scalą je ze sobą. Na przykład:

Dynamiczny

android {
    sourceSets {
        main {
            res.srcDirs = ['res1', 'res2']
        }
    }
}

Kotlin

android {
    sourceSets {
        main {
            res.srcDirs("res1", "res2")
        }
    }
}

Więcej informacji znajdziesz w artykule Zestawy źródeł.

Scalanie zasobów

Zasoby w końcowym pliku aplikacji mogą pochodzić z 3 źródeł:

Gdy wszystkie zasoby z każdego zbioru źródeł lub biblioteki są unikalne, są dodawane do końcowej aplikacji. Zasób jest uważany za unikalny, jeśli jego nazwa pliku jest unikalna zarówno w katalogu typu zasobu, jak i w kwalifikatorze zasobów (jeśli jest zdefiniowany).

Jeśli istnieje co najmniej 2 pasujące wersje tego samego zasobu, w końcowej aplikacji zostanie uwzględniona tylko 1 wersja. Narzędzia do kompilacji wybierają wersję, którą należy zachować, na podstawie tej kolejności priorytetów (najwyższy priorytet po lewej):

wariant kompilacji > typ kompilacji > wersja produktu > główny zestaw źródeł > zależności biblioteki

Jeśli na przykład główny zbiór źródeł zawiera:

  • res/values/strings.xml
  • res/values-es/strings.xml

A rodzaj kompilacji do debugowania zawiera:

  • res/values/strings.xml

Wtedy końcowa aplikacja zawiera res/values/strings.xml z rodzaju kompilacji do debugowania i res/values-es/strings.xml z głównego zbioru źródeł.

Jeśli jednak konfiguracja kompilacji określa wiele folderów zasobów dla danego zbioru źródeł i występują konflikty między tymi źródłami, wystąpi błąd i scalanie się nie powiedzie, ponieważ każdy katalog zasobów ma ten sam priorytet.