wtorek, 9 kwietnia 2019

Screen size - czyli jaki rozmiar powinna mieć grafika tła

Przygotowałam moją Bardzo Ważną Aplikację.
Pracowałam nad nią długo, nadszedł dzień premiery i... nie dało się jej otworzyć na niektórych urządzeniach.
Okazało się, że dodane przeze mnie grafiki były za duże - urządzenia nie radziły sobie z ich dopasowaniem.

Podstawa, tak, jednak jakoś przeoczyłam.

Poczytałam trochę, między innymi:
https://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/
https://blog.prototypr.io/designing-for-multiple-screen-densities-on-android-5fba8afe7ead
https://medium.com/@sashaserg/a-mysterious-density-independent-pixel-a-quick-introduction-to-android-design-111d68be7cf5

I od tamtej pory wielkość grafik tła w moich projektach to około:
  • mdpi - 360x480 px
  • hdpi - 480x800 px
  • xhdpi - 720x1280 px
  • xxhdpi - 1080x1920 px
  • xxxhdpi - 1440x2560 px

Zazwyczaj nie mam odzielnych plików dla każdej wielkości ekranu - mam tylko jeden i dodaję go do katalogu, do którego najbardziej pasuje.
Staram się mimo wszystko nie mieć za dużych plików - to zazwyczaj one zwiększają rozmiar aplikacji, więc jeśli grafika nie jest najważniejszym elementem, dbam o oszczędność pamięci użytkownika

czwartek, 28 lutego 2019

Dobre praktyki - Lekcja 1


  1. Testuj małe elementy - im mniej, tym lepiej, nawet jeśli to tylko zmiana koloru - upewnij się, że się zmienił tam gdzie powinien.
  2. Testuj małe elementy - nawet jeśli nie powodują widocznej zmiany wyglądu lub zachowania - sprawdzaj, czy nic nie popsuły.
  3. Czytaj materiały branżowe regularnie - warto się uczyć od innych.
  4. Porządnie planuj - najpierw zgrubnie, później coraz dokładniej, im mniejsze zadania tym łatwiej je wykonać nawet przy zmęczeniu.
  5. Usuwaj logi, których nie potrzebujesz.
  6. Upewnij się, że element, którego używasz !=null

czwartek, 9 sierpnia 2018

Jak ustawić własne czcionki w aplikacji

  1. Pobierz pliki czcionek, których potrzebujesz
  2. Przekonwertuj czcionki do formatu .ttf (jeśli są w innym)
  3. Utwórz katalog czcionek w swoim projekcie (jeśli go nie ma)
    1. Wybierz menu konekstowe z katalogu res
    2. New -> Android Resource Directory
    3. Recource type: font
  4. Dodaj do katalogu font swoje czcionki
  5. Wprowadź swoje czcionki do projektu, np.
    1. Dodaj je do swojego stylu: <item name="android:fontFamily">@font/pt_sans</item> (API >=16)
    2. Dodaj je do swojego obiektu tekstowego w layout: android:fontFamily="@font/pt_sans"
    3. Dodaj je w kodzie swojej aplikacji do obiektu tekstowego

wtorek, 7 sierpnia 2018

Exception - org.json.JSON.typeMismatch

Dlaczego wystąpił?

Myślałam, że parsowany string to JSONObject a to był JSONArray.
Plik .json (a właściwie String) zrobiłam sama, więc wystarczyło usunąć [ ] z początku i końca.

niedziela, 5 sierpnia 2018

Room - kilka słów o przechowywaniu danych

  1. Dodaj odpowiednie zależności do build.gradle(Module: app)
    def room_version = "1.1.1"
    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version"
    testImplementation "android.arch.persistence.room:testing:$room_version"
  2. Zsynchronizuj build.gradle
    1. kliknij prawym przyciskiem na build.gradle
    2. wybierz Synchronize build.gradle
  3. Dodaj klasę obiektu, który będzie reprezentował tabelę
    1. Daj jej annotację @Entity
    2. Dodaj kolumnę @PrimaryKey
    3. Dodaj pozostałe kolumny
    4. Dodaj gettery i settery elementów obiektu (na potrzeby Room)
      @Entity
      public class StoryObject {
          @PrimaryKey
          private int storyId;
          @ColumnInfo(name = "main_text")
          private String mainText;
  4. Stwórz interfejs z metodami dostępu do bazy - DAO
    1. Daj jej annotację @Dao
    2. Dodaj metody dostępu (napisane w SQL)
      @Dao
      public interface StoryDao {
          @Query("SELECT * FROM story")
          List<StoryObject> getAll();
          @Insert
          void insertAll(StoryObject... objects);
          @Delete
          void delete(StoryObject object);
      }
  5. Stwórz klasę (abstract) bazy danych
    1. Dodaj jej annotację @Database i przypisz klasy, które ją reprezentują (entities)
    2. Dodaj metodę (abstract), która zwróci odpowiedni obiekt Dao
      @Database(entities = {StoryObject.class}, version = 1)
      public abstract class StoryDatabase extends RoomDatabase {
          public abstract StoryDao getStoryDao();
      }
  6. W kodzie aplikacji wywołaj budowanie bazy danych
    StoryDatabase db = Room.databaseBuilder(getApplicationContext(),
            StoryDatabase.class, "story_database").build();

poniedziałek, 30 lipca 2018

Release – checklista

  • Change log - powiązanie z zadaniami (historyjkami) - scope of work vs lista commitów
  • Kiedy wypuszczono produkt
  • Jaki jest tag w repozytorium
  • Jakie były testy i gdzie są raporty
  • Gdzie znajduje się backup
  • Dokumentacja i konfiguracja - aktualne wersje

sobota, 28 lipca 2018

Android - testy wydania

Kilka dni temu wysłałam kolejną wersję aplikacji, jeszcze ciągle w wersji próbnej, testowej, w trakcie pracy. Ogólnie wydawałoby się - nic poważnego. Ale jednak wysłałam ją komuś - to jest poważne, powinnam być za to odpowiedzialna. Zrozumiałam, że nie zrobiłam jej wcześniej absolutnie podstawowych testów wydania. Nawet nie mam przygotowanych... Pora to zmienić.

Testy wydania aplikacji - android (ogólne)

  1. Aplikacja aktualizuje się z poprzedniej wersji do nowej (update)
  2. Aplikacja w aktualnej wersji może być zainstalowana na "czystym" urządzeniu (na takim, na którym nie jest zainstalowana) (instal)
  3. Aplikacja po wybraniu ikony włącza się i pokazuje ekran startowy (start)
  4. Aplikacja po wybraniu przycisku cofinij wyłącza się (end)
  5. Aplikacja wykonuje podstawową funkcję (work)
  6. Aplikacja aktualizuje się do poprzedniej wersji (downgrade)

Testy wydania aplikacji - android (dodatkowe)

  1. Aplikacja działa bez internetu (internet permission)
    1. brak wyjątków
    2. informacja o braku połączenia
    3. niezakłócone działanie
  2. Aplikacja działa przy obracaniu ekranu (orientation)
    1. dźwięk
    2. obraz
    3. funkcje
  3. ...