SlideShare a Scribd company logo
1 of 28
Download to read offline
OPTYMALIZACJE APLIKACJI
MOBILNYCH
Maciej Węglarczyk
Senior Software Engineer
WWW.GANYMEDE.EU
CO OPTYMALIZUJEMY?
Wersja Kryptonim API Dystrybucja
2.2 Froyo 8 0.4%
2.3.3 – 2.3.7 Gingerbread 10 6.9%
4.0.3 – 4.0.4 Ice Cream Sandwich 15 5.9%
4.1.x
Jelly Bean
16 17.3%
4.2.x 17 19.4%
4.3 18 5.9%
4.4 KitKat 19 40.9%
5.0 Lollipop 21 3.3%
Wersja OpenGL ES Dystrybucja
2.0 67.5%
3.0 32.5%
Żródło:
http://developer.android.com/about/dashboards/index.html
OPTYMALIZACJA WYDAJNOŚCI
1
CO TO ZNACZY „WYDAJNIE”
Blisko 60 FPS (klatek na sekundę)
Na renderowanie 1 klatki jest
0.01(6)s = ~17ms
• W tym obliczenia
• W tym przerzucenie danych do
karty graficznej
• W tym rysowanie
ALGORYTMY
„Premature optimization is the root of all evil”
D. Knuth
Cięższe obliczenia w osobnych wątkach
Zlokalizować wąskie gardła
PROFILER
PROFILER Z KODU
Debug.startMethodTracing(„my_trace”);
// ...
Debug.stopMethodTracing();
adb pull /sdcard/my_trace.trace /tmp
traceview /tmp/my_trace
GARBAGE COLLECTOR
W grach - twój wróg
Czas Tag Wiadomość
04-07
12:03:32.572:
D/dalvikvm(1155): WAIT_FOR_CONCURRENT_GC blocked 53ms
04-07
12:03:32.792:
D/dalvikvm(4001): GC_CONCURRENT freed 1541K, 9% free 55437K/60432K, paused 6ms+5ms, total
45ms
04-07
12:03:33.133:
D/dalvikvm(910): GC_EXPLICIT freed 987K, 24% free 77193K/101164K, paused 5ms+18ms, total 219ms
04-07
12:03:33.593:
D/dalvikvm(17788): GC_CONCURRENT freed 474K, 13% free 51228K/58828K, paused 9ms+4ms, total
38ms
04-07
12:03:35.225:
D/dalvikvm(910): GC_EXPLICIT freed 461K, 24% free 77108K/101164K, paused 13ms+16ms, total
236ms
PRZERYSOWANIA GPU
Opcja w ustawieniach
Optymalizacja layoutu
HIERARCHY VIEWER
OPTYMALIZACJA PAMIĘCI
2
BITMAPY
Rozmiar na dysku =/= rozmiar w
pamięci
Grafika full hd to:
1920 x 1080 x 4B = 8 294 400B
PALETA!
Paleta RGB565 jest dobra dla teł
1920 x 1080 x 2 = 4 147 200B
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.my_bitmap, options);
MEMORY MONITOR
GĘSTOŚĆ PIKSELI
Foldery drawable-<dpi> [Android]
Suffiksy @2x~ipad itp. [iOS]
WCZYTYWANIE DUŻYCH BITMAP #1
public Bitmap loadScaledDownPhoto(String path) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, MAX_WIDTH, MAX_HEIGHT);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(path, options);
}
WCZYTYWANIE DUŻYCH BITMAP #2
private int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1; // inSampleSize powinno być w potędze 2
if (height > reqHeight || width > reqWidth) {
// …
}
return inSampleSize;
}
OPTYMALIZACJA ROZMIARU APKI
3
APK SPLIT
android {
//...
splits {
density {
enable true
exclude "ldpi", "tvdpi", "xxhdpi", "xxxhdpi"
compatibleScreens 'normal', 'large', 'xlarge'
}
}
}
IMAGEOPTIM / TEXTUREPACKER
Kompresja grafik średnio o 40-50%
Pozbycie się danych EXIF
Atlasy tekstur
IMAGEOPTIM
PROGUARD
Główny cel - obfuskacja
…ale przy okazji i zmniejszenie binarki
Utrudnia debugowanie
INNE
android:installLocation="auto"
compile 'com.google.android.gms:play-services:7.0.0‚
compile 'com.google.android.gms:play-services-games:7.0.0'
POMOCNICZE NARZĘDZIA
4
NETLIMITER
Ograniczenie prędkości łącza
Optymalizacja protokołu
WOLNE URZĄDZENIE
Warto mieć najsłabsze urządzenie, które się
wspiera (zarówno hardware / software)
Emulator nie wystarcza
INTEGRACJA Z C++ (JNI)
Wzrost wydajności?
Narzut komunikacyjny
Debugowanie nadal niełatwe
Maciej Węglarczyk: Optymalizacje aplikacji mobilnych

More Related Content

Similar to Maciej Węglarczyk: Optymalizacje aplikacji mobilnych

Poland - Dev Days 2005
Poland - Dev Days 2005Poland - Dev Days 2005
Poland - Dev Days 2005Tomasz Cieplak
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnieCode-House
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...GOG.com dev team
 
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...PROIDEA
 
Optymalizacja Serwisów WWW
Optymalizacja Serwisów WWWOptymalizacja Serwisów WWW
Optymalizacja Serwisów WWWPaweł Harajda
 
Mobile Game Development Process
Mobile Game Development ProcessMobile Game Development Process
Mobile Game Development Process3camp
 
Niezbędnik administratora - prezentacja Bartosz Sałach
Niezbędnik administratora - prezentacja Bartosz SałachNiezbędnik administratora - prezentacja Bartosz Sałach
Niezbędnik administratora - prezentacja Bartosz SałachBartosz Sałach
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. Redge Technologies
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 
Maciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutówMaciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutówGameDesire Academy
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerLukas Lesniewski
 

Similar to Maciej Węglarczyk: Optymalizacje aplikacji mobilnych (15)

Poland - Dev Days 2005
Poland - Dev Days 2005Poland - Dev Days 2005
Poland - Dev Days 2005
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...
PLNOG 8: Krzysztof Adamski, Tymoteusz Bilyk - Wady i zalety systemu Android w...
 
Optymalizacja Serwisów WWW
Optymalizacja Serwisów WWWOptymalizacja Serwisów WWW
Optymalizacja Serwisów WWW
 
Mobile Game Development Process
Mobile Game Development ProcessMobile Game Development Process
Mobile Game Development Process
 
Niezbędnik administratora - prezentacja Bartosz Sałach
Niezbędnik administratora - prezentacja Bartosz SałachNiezbędnik administratora - prezentacja Bartosz Sałach
Niezbędnik administratora - prezentacja Bartosz Sałach
 
[JUG] JCuda
[JUG] JCuda[JUG] JCuda
[JUG] JCuda
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego.
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
Maciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutówMaciej Węglarczyk: Wielowymiarowy świat layoutów
Maciej Węglarczyk: Wielowymiarowy świat layoutów
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Dcamcut dla SOLIDWORKS i Inventor
Dcamcut dla SOLIDWORKS i InventorDcamcut dla SOLIDWORKS i Inventor
Dcamcut dla SOLIDWORKS i Inventor
 

More from GameDesire Academy

Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?GameDesire Academy
 
Konrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w UnityKonrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w UnityGameDesire Academy
 
Stan Just: Po co nam producent
Stan Just: Po co nam producentStan Just: Po co nam producent
Stan Just: Po co nam producentGameDesire Academy
 
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.GameDesire Academy
 
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...GameDesire Academy
 
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...GameDesire Academy
 
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?GameDesire Academy
 
Michał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold PostmortemMichał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold PostmortemGameDesire Academy
 
Łukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indykaŁukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indykaGameDesire Academy
 
Jakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce luduJakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce luduGameDesire Academy
 
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)GameDesire Academy
 
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gryJakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gryGameDesire Academy
 
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio GameDesire Academy
 
Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować! Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować! GameDesire Academy
 
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?GameDesire Academy
 
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.GameDesire Academy
 
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...GameDesire Academy
 
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych GameDesire Academy
 
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gierKonrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gierGameDesire Academy
 
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...GameDesire Academy
 

More from GameDesire Academy (20)

Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
Michał Witkowski: Analiza zachowania graczy, jak zbudować grę w oparciu o dane?
 
Konrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w UnityKonrad Gadzina: Visual scripting w Unity
Konrad Gadzina: Visual scripting w Unity
 
Stan Just: Po co nam producent
Stan Just: Po co nam producentStan Just: Po co nam producent
Stan Just: Po co nam producent
 
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
Michał Azarewicz: O cinematikach słów kilka, czyli z czym to się je.
 
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
Wojtek Mroczek: Jak nie sprzedać swojej gry - 10 prostych kroków, czyli błędy...
 
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
Kacper Pitala: Filmik mówi więcej niż tysiąc screenów - jak przygotować video...
 
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
Natalia Dołżycka: Jak promować grę indie bez rozbijania banku?
 
Michał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold PostmortemMichał Marcinkowski: King Arthur's Gold Postmortem
Michał Marcinkowski: King Arthur's Gold Postmortem
 
Łukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indykaŁukasz Malik: Trudne życie indyka
Łukasz Malik: Trudne życie indyka
 
Jakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce luduJakub Wójcik: Development w ręce ludu
Jakub Wójcik: Development w ręce ludu
 
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
Tomasz Kaczmarek: Zupa z indyka dla pracownika korpo(racji)
 
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gryJakub Lisiński: Czynnik ludzki w procesie tworzenia gry
Jakub Lisiński: Czynnik ludzki w procesie tworzenia gry
 
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
Krzysztof Bińczak: Wprowadzenie do interaktywnego audio
 
Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować! Konrad Gadzina: Inspiruj i daj się zainspirować!
Konrad Gadzina: Inspiruj i daj się zainspirować!
 
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
Ulyana Krystaszek: Mam pomysł na grę… i co dalej?
 
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
 
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
Tomasz Świerszcz: Moja pierwsza gra. Organizacja pracy, potrzebna wiedza, nar...
 
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
Artur Staszczyk: Optymalizacje i wydajność w grach komputerowych
 
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gierKonrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
 
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
Artur Staszczyk, Maciej Weglarczyk: Projekt, produkcja, biznes, czyli jak stw...
 

Maciej Węglarczyk: Optymalizacje aplikacji mobilnych