<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Various Technologies</title><description>Obsah zaoberajúci sa primárne Android systému a vývoju pre tento sýstém, ale aj iným technológiám (various technologies) a malwaru.</description><managingEditor>noreply@blogger.com (Various Technologies)</managingEditor><pubDate>Sun, 15 Sep 2024 19:30:06 -0700</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">8</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://vartech.blogspot.com/</link><language>en-us</language><item><title>Visual Studio - Task List</title><link>http://vartech.blogspot.com/2017/05/visual-studio-task-list.html</link><category>funkcie</category><category>komentáre</category><category>task list</category><category>visual studio</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Thu, 18 May 2017 13:07:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-449944322364374559</guid><description>&lt;div dir="ltr"&gt;
Visual studio je silný nástroj pre vývojára. Má množstvo funkcií, ktoré majú pomôcť vývojarovi v jeho práci. Jedna z takých funkcií je Zoznam úloh (Task list). Task list si treba zobraziť cez menu, ak nie je zobrazený:&lt;i&gt;View\Other Windows\Task List&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAt2-zjEtXW7KfvLLAaqeembUc_FgafDrsbUD4CUa4CXxVwu7ecwFW2NkxBDFH9Gs_MhKdvweMrvDDhNLJbWXCWYsRL0EqyccFtozHo51zEt3IEkFIVkXovcfDSljGMHSeVNYZno7Wqvg/s1600/Obr1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Príklad Visual Studia task listu" border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAt2-zjEtXW7KfvLLAaqeembUc_FgafDrsbUD4CUa4CXxVwu7ecwFW2NkxBDFH9Gs_MhKdvweMrvDDhNLJbWXCWYsRL0EqyccFtozHo51zEt3IEkFIVkXovcfDSljGMHSeVNYZno7Wqvg/s1600/Obr1.png" title="" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
Obr.1. Task List v strede na spodku Visual Studia&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Task List je rozdelený na dve časti. Horná časť je rozbaľovací zoznam (Combobox), v ktorom máme kategórie, môžeme si zvoliť užívateľské úlohy (User Tasks) a komentáre (Commnets). Dolná časť je zoznam, v ktorom sa zobrazia buď komentáre, alebo užívateľské úlohy, podľa voľby rozbaľovacieho zoznamu.&lt;br /&gt;
Popíšem najprv komentáre. Funguje to jednoducho. Začnete riadkový komentár v zdrojovom kóde nejakého programovacieho jazyka ( Visual Basic, C#) za ním kľúčové slovo TODO, HACK alebo UNDONE. Za kľúčovým slovom použijeme výstižný komentár. &lt;br /&gt;
Každý komentár, v ktorom sa na začiatku zobrazí nejaké z uvedených kľúčových slov sa zobrazí v zozname Task List. Po dvojitom kliknutí na neakú položku v zozname Vás Visual Studio automaticky prenesie na riadok s príslušným komentárom.&lt;br /&gt;
Musím poznamenať, že ak sa niekomu nepáčia použité slová, môže si ich zmeniť, alebo k ním pridať nové. Vykonať sa to dá cez menu &lt;i&gt;Tools\Options&lt;/i&gt;, element &lt;i&gt;Enviroment\Task List&lt;/i&gt;. Vývojár môže buď zmeniť, pridať, alebo zmazať kľúčové slovo. Možnosti nastavení pre Task List sú jednoduché a nebudem ich tu rozoberať.&lt;br /&gt;
&lt;br /&gt;
Ďalšia kategória sú User Task. Na pravej strane comboboxu po výbere kategórie User Tasks sa zobrazí&amp;nbsp; malé tlačítko, ktorým si môžeme pridávať úlohy do zoznamu a vyplnení popisu (Description). Po vykonaní úlohy ju môžeme buď vymazať zo zoznamu cez kontextové menu, alebo ju odfajknúť cez CheckBox, čo je na ľavej strane.&lt;br /&gt;
&lt;br /&gt;
Visual Studio obsahuje množstvo funkcií, ktorými si vývojár dokáže uľahčiť prácu, keď pozná túto funkčnosť. Nabudúce poviem niečo o klávesových skratkách a ako si ich meniť.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAt2-zjEtXW7KfvLLAaqeembUc_FgafDrsbUD4CUa4CXxVwu7ecwFW2NkxBDFH9Gs_MhKdvweMrvDDhNLJbWXCWYsRL0EqyccFtozHo51zEt3IEkFIVkXovcfDSljGMHSeVNYZno7Wqvg/s72-c/Obr1.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>Android Wear Developer Options</title><link>http://vartech.blogspot.com/2017/05/android-wear-developer-options.html</link><category>android</category><category>developer options</category><category>vývojarské možnosti</category><category>wear</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Mon, 8 May 2017 01:38:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-729124305429011505</guid><description>&lt;div style="text-align: justify;"&gt;
V nasledujúcich riadkoch sú opísané developer options pre android wear. Veľa týchto možností je rovnakých ako na mobilných a tabletových verziách android systému. O týchto možnostiach sa dá dočítať v predchádzajúcom článku:&amp;nbsp;&lt;a href="http://vartech.blogspot.sk/2016/12/android-developer-options.html" target="_blank"&gt;Android developer options&lt;/a&gt;.&lt;br&gt;
&lt;b&gt;&lt;br&gt;&lt;/b&gt;
&lt;b&gt;Stay awake when charging&lt;/b&gt; - rovnaké ako na mobiloch, no need to comment.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Bluetooth Snoop Logging&lt;/b&gt; - toto je totožné s options v mobile, vytvorí log súbor, kde je zachytená všetká komunikácia s mobilom cez technológiu Bluetooth. Log súbor a jeho cesta: /sdcard/btsnoop_hci.log alebo cez env premennú $EXTERNAL_STORAGE/btsnoop_hci.log. Súbor je možné analyzovať pomocou programu Wireshark. Súbor sa pochopiteľne nachádza v zariadení a treba ho vytiahnuť pomocou Adb utility, ale to je pre technicky zdatnejších jedincov.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Vibrate on connectivity change&lt;/b&gt; - hodinky zavibrujú pri strate Bluetooth pripojenia s mobilom alebo zavibrujú pri obnovení spojenia. Neviem či je na všetkých typoch hodinkách rovnaký vzor vibrovania, no moje (MOTO 360 v1) zavibrujú raz a dlhšie pri strate spojenia s mobilom a pri obnovení spojenia zavibrujú dva krát krátko po sebe.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;ADB debugging&lt;/b&gt; - no čo na to poviem, povolí spojenie ADB nástroja s hodinkami a umožní tak vývojárom svoju prácu a ladenie.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Location &lt;/b&gt;- o tomto som nenašiel viac informácií, ale odhadujem, že je to podobné voľbe pre mobily Allow moc locations.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Debug over Bluetooth&lt;/b&gt; - povoľuje ladenie aplikácií cez Bluetooth, tak že presmeruje aplikačný debugový výstup cez telefón, ktorý je pripojený k vývojovému počítaču. Viac info ohľadom pripojenia hodiniek je na následujúcom linku:&amp;nbsp;&lt;a href="https://developer.android.com/training/wearables/apps/bt-debugging.html" target="_blank"&gt;Debugging over Bluetooth&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Wear Developer Options -&amp;gt; Force display burn-in protection&lt;/b&gt; - všetky oled displeje sú skvelé, ale majú veľkú nevýhodu. Možeme si vypáliť do nich obraz. Hlavne pre tých, čo majú zapnutý ambient screen. Ako ochrana pred vypálením je toto nastavenie. Nastavenie sa zapne až po reštartovaní hodiniek. Ako to vyzerá je v tomto videu: &lt;a href="https://www.youtube.com/watch?v=labS3ANW-L8" target="_blank"&gt;Huawei Watch: AW Burn In Prevention 4K Lapse [N5X]&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Wear Developer Options -&amp;gt; Force low-bit ambient mode&lt;/b&gt;&amp;nbsp;- zníži sa rozsah farieb používaný na hodinkách, farby sú limitované na čiernu, bielu, modrú, červenú, zelenú, cyanovú, mangenta a žltú. Slúži na šetrenie batérie, aby dlhšie vydržali hodinky.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Revoke debugging authorization&lt;/b&gt; - rovnaké ako na mobiloch.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Allow mock locations&lt;/b&gt; - pomocou tohto je možné manuálne nastaviť lokalizačné informácie. Na nastavenie falošnej lokalizácie je potrebné aplikáciu. Ale pred použitím aplikácie je nutné túto položku povoliť.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Debug layouts&lt;/b&gt; - s týmto som si zapol ohraničenia prvkov na obrazovke (rovnaké ako na mobile, pod názvom &amp;nbsp;Show layout bounds).&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Debug overdraw&lt;/b&gt; - toto je rovnaké ako na mobiloch, len v skrátenej forme. Plné meno nastavenia v mobiloch je Debug GPU overdraw.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Debug GPU profiling&lt;/b&gt; -&amp;nbsp;spraví grafickú vizualizáciu vykresľovania GPU, rovnaké ako v mobile.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Pointer location&lt;/b&gt; - &amp;nbsp;rovnaké ako v mobilnej verzii android systému, zobrazí v hornej časti obrazovky lištu s informáciami o dotyku a polohe dotyku. Má to malý problém, lišta nie je celá vidieť, hlavne na zariadeniach so zaokrúhlenou obrazovkou ako hodinky Motorola Moto 360.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Show touches&lt;/b&gt; - povolenie umožní zobrazovať vizualizáciu v mieste dotyku, aby užívateľ videl, že sa dotkol. Má sa správať rovnako ako na mobiloch. Narazil som na problém, že povolenie tejto možnosti nezobrazí vizualizáciu. Dlhším pátraním som nenašiel nič, viacero developerov na tento problém poukazovalo a je možné, že problém je iba špecifický pre Motorola Moto 360 s určitou verziou.&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Bug report in menu&lt;/b&gt; - k tomuto nie je čo dodať, je to rovnaké ako v mobile. Chvíľu potrvá, kým sa report vygeneruje. Táto ponuka sa zobrazí v zozname aplikácií, teda v menu.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Automatic Wi-Fi toggle&lt;/b&gt; - automaticky zapína Wi-Fi, aj keď je pripojené k mobilu. Viac neviem zistiť. Malo zdokumentované.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Wi-Fi Verbose Logging&lt;/b&gt; - pomáha logovať viac informácií ohľadom Wi-Fi, v Logcat-e vidieť dodatočné informácie ohľadom Wi-Fi a uľahčuje odhaľovanie problémov.&lt;br&gt;
&lt;br&gt;
Pri týchto posledných možnostiach som nanešťastie viac nezistil. Ak sa niekomu podarí zistiť viac, budem rád, keď to bude so mnou a ostatnými vývojármi zdieľať. Na záver dodám, že tieto možnosti sa vyskytujú pri Android wear komponentách verzie 1, verziu 2 doplním priebežne.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Battery optimization&lt;/b&gt; -&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Wear Developer Options -&amp;gt; &amp;nbsp;Force software recognizer&lt;/b&gt;&amp;nbsp;-&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Wear Developer Options -&amp;gt; Audio Injector -&lt;/b&gt;&lt;/div&gt;
</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Firebase Cloud Messaging in Android</title><link>http://vartech.blogspot.com/2017/01/firebase-cloud-messaging-in-android.html</link><category>android</category><category>developer</category><category>fcm</category><category>firebase cloud messaging</category><category>gcm</category><category>google cloud messaging</category><category>notifkácie</category><category>push</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Wed, 4 Jan 2017 13:00:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-1735845187807064066</guid><description>&lt;div style="text-align: justify;"&gt;
Firebase Cloud Messaging (FCM) je v podstate nová platforma na posielanie push správy. Nahrádza starý framework Google Cloud Messaging (GCM), ktorý je momentálne deprecated. Trochu som sa hral s FCM-kom a popravde, mi zo začiatku prišlo zložitejšie, keďže môžem posielať dva typy správ, a to: Notification message a Data message. Správy môžeme posielať troma spôsobmi, teda jednému zariadeniu, skupine zariadení alebo zariadení, ktoré sú subscribnuté na nejaký topic. FCM ponúka ešte jednu možnosť, ale tú som osobne neskúšal, keďže som sa ešte nestretol počas vývoja s takým use caseom, jedná sa o posielanie správ smerom od zariadenia na server. Bližšie introduction ponúka následujúci link:&amp;nbsp;&lt;a href="https://firebase.google.com/docs/cloud-messaging/" target="_blank"&gt;Firebase Cloud Messaging&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style="text-align: justify;"&gt;
Pridanie Firebase Cloud Messaging-u do projektu&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
FCM má zmysel pre zariadenia verzie Android 2.3 a vyššie, je potrebné mať aj Google Play Services SDK &amp;nbsp;a minimálne Android Studio 1.5 alebo vyššie. Pri Google Play Services si treba dať ale pozor, spoločnosť Google oznámila, že prestane podporovať zariadenia Android verzie 2.3 a 3.0. To znamená, že Google Play Services verzie 10.2.0 už bude podporovať zariadenia s verzion 4.0 a vyššie, bližšie info:&amp;nbsp;&lt;a href="https://android-developers.googleblog.com/2016/11/google-play-services-and-firebase-for-android-will-support-api-level-14-at-minimum.html" target="_blank"&gt;Google Play Services and Firebase for Android will support API level 14 at-minimum&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pridať FCM je možné dvoma spôsobmi, a to manuálne alebo pomocou Assistant záložky v Android Studio. Použitie Assistanta neopíšem, pôjdem manuálnou cestou.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ako prvé je nutné vytvoriť vo Firebase konzole projekt, viď. obrázok:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLgmaAw7XMd9YImVn-Q3tUzy_xjdNyYVWC1gRGckb3WYzCBjtPS0y4ts2wGJlZDtLWlZcpHCfe8KkO2wT1qPf7B4FIm_z_e_zd3sCVq4tRRVqcp4eiSvdvzjE18CB8ecC5nF6mfUflxGs/s1600/Firebase+console_new_project.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLgmaAw7XMd9YImVn-Q3tUzy_xjdNyYVWC1gRGckb3WYzCBjtPS0y4ts2wGJlZDtLWlZcpHCfe8KkO2wT1qPf7B4FIm_z_e_zd3sCVq4tRRVqcp4eiSvdvzjE18CB8ecC5nF6mfUflxGs/s320/Firebase+console_new_project.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firebase console - create new project&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
Po vyplnení mená projektu nám ukáže ďaľšiu obrazovku, kde môžeme pridať aplikáciu do projektu. Po zvolení pridania, nám zobrazí dialóg, ktorý nás prevedie všetkými potrebnými krokmi. Prvá obrazovka je:&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihO6zHT_YSn1sQPBSJEcXeRXKHf_BrYqr2idU0WunBU0gMWzOztrTwyxjuwCgXlwnx9Uaq4Cld_vmsbx3WbaWaP5YGJ6FJKRUftN66aFYO0XAcDzIrAVuO126005YBX4KP-EyxfpyMpLw/s1600/Add+Andoid+app+to+firebase.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihO6zHT_YSn1sQPBSJEcXeRXKHf_BrYqr2idU0WunBU0gMWzOztrTwyxjuwCgXlwnx9Uaq4Cld_vmsbx3WbaWaP5YGJ6FJKRUftN66aFYO0XAcDzIrAVuO126005YBX4KP-EyxfpyMpLw/s320/Add+Andoid+app+to+firebase.png" width="298" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firebase console - dialóg pridanie aplikácie&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
V prvom dialógu pridania aplikácie je potrebné vyplniť package name aplikácie. Pozor, treba zadať presne a nepomýliťsa. Možné je aj dodať ďalšie voliteľné polia, viac sa o nich môžete dozvedieť tak v samotnom dialógu. Dialóg poskytuje nápovedu.&lt;/div&gt;
&lt;div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhda_lCUj7mCQzA2T_-zRbJsPKmA4ggJdFSod6FFMV8J4aAXXZUo_kecxmOE7oXK7zoLMweNyYiq7aViqINBLbyb6YH-2LHVxnVDWFrz5V-cEFl-J9sbo4Dd-rzXBQhU9kMrUF_pFxHToI/s1600/Add+Andoid+app+to+firebase+screen+2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhda_lCUj7mCQzA2T_-zRbJsPKmA4ggJdFSod6FFMV8J4aAXXZUo_kecxmOE7oXK7zoLMweNyYiq7aViqINBLbyb6YH-2LHVxnVDWFrz5V-cEFl-J9sbo4Dd-rzXBQhU9kMrUF_pFxHToI/s320/Add+Andoid+app+to+firebase+screen+2.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firebase console - vygenerovania a stiahnutie config súboru&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
V tejto obrazovke nám dialóg vygeneruje config súbor a začne automatické sťahovanie(možno vyzve na potvrdenie začatia sťahovania v prehliadači, záleží od konkrétneho prehliadača a jeho nastavení) config súboru, ktorý má meno google-services.json. Ten si treba pridať do Android Studia projektu, veď návod už je v dialógu, stačí len čítať.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg17E7bJqTgM9jSTlyImSIdJNgahIjSBCfL0HjceQ8B6q8-YfMgXQ0rGkthCOPb3OwgN9LqHfvtmyrAsk3ff9q5o3md_OZN5VXdOlDw_SHMNcU0oqbzfBc8WZ_w2KJFHenWknh6JzfLWAU/s1600/Add+Andoid+app+to+firebase+screen+3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg17E7bJqTgM9jSTlyImSIdJNgahIjSBCfL0HjceQ8B6q8-YfMgXQ0rGkthCOPb3OwgN9LqHfvtmyrAsk3ff9q5o3md_OZN5VXdOlDw_SHMNcU0oqbzfBc8WZ_w2KJFHenWknh6JzfLWAU/s320/Add+Andoid+app+to+firebase+screen+3.png" width="304" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firebase console - zakončenie dialógu a posledné úpravy v projekte Android Studia&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: justify;"&gt;
Následne je potrebné pridať niekoľko riadkov do build.gradlu ako je v poslednej časti dialógu. Keby nestačil návod v dialógu, alebo tento návod:&amp;nbsp;&lt;a href="https://firebase.google.com/docs/android/setup" target="_blank"&gt;Android firebase setup&lt;/a&gt;. Ako posledné je potrebné ešte pridať požadované dependencie:&amp;nbsp;&lt;i&gt;compile 'com.google.firebase:firebase-messaging:10.0.1' .&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;h3&gt;
Editácia manifestu a zdrojákov&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Pre ďalšiu prácu potrebujem pridať dve služby na projektu a definovať ich v manifeste. Vytvorím classu s menom&amp;nbsp;&lt;i&gt;MessagingService&lt;/i&gt;, kde extendnem triedu&amp;nbsp;&lt;i&gt;FirebaseMessagingService.&lt;/i&gt;&amp;nbsp;To nám poslúži ako kostra na pridanie eventu, ktorý obslúži push message. Potom vytvorím druhú classu&amp;nbsp;&lt;i&gt;TokenGenerationService&lt;/i&gt;, kde extendnem triedu&amp;nbsp;&lt;i&gt;FirebaseInstanceIdService&lt;/i&gt;, ktorá ma na starosti generovanie tokenu, ktorý neskôr využijeme. V manifeste projektu treba definovať ešte dve služby, a to:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;i&gt;&amp;lt;service android:name=".&lt;/i&gt;&lt;i&gt;MessagingService&lt;/i&gt;&lt;i&gt;"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;intent-filter&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;action android:name="com.google.firebase.MESSAGING_EVENT"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;&amp;lt;/service&amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;i&gt;&amp;lt;service android:name=".&lt;/i&gt;&lt;i&gt;TokenGenerationService&lt;/i&gt;&lt;i&gt;"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;intent-filter&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;action android:name="com.google.firebase.INSTANCE_ID_EVENT"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;&amp;lt;/service&amp;gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Položiek do manifestu súvisiacích s FCM je viacej, stačí sa obrátiť na tento zdroj&amp;nbsp;&lt;a href="https://firebase.google.com/docs/cloud-messaging/android/client" target="_blank"&gt;Set Up a Firebase Cloud Messaging Client App on Android&lt;/a&gt;. Dve ďaľšie súvisia s nastaveniami defaultnej ikony pre notifikácie a farby prichádzajúcej notifikácie. Týmto sme urobili všetko potrebné a stačí nám úž len v doplniť potrebný kód do tried, ktoré sme vyššie uviedli. Ešte poznámku, že ak chceme používať vygenerovaný token, netreba zabúdať, že sa vygeneruje nanovo vždy počas určitých udalostí, ktoré nastanú v zariadení, Vo vyššie uvedenom linku sa dá dočítať počas akých udalosti sa generuje na novo token. Udalosť, kde ohandlujeme novo vygenerovaný token by mohla vyzerať takto:&lt;/div&gt;
&lt;i&gt;&lt;br /&gt;public class TokenGenerationService extends FirebaseInstanceIdService {&lt;br /&gt;@Override&lt;br /&gt;public void onTokenRefresh() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; super.onTokenRefresh();&lt;br /&gt;&amp;nbsp; &amp;nbsp; String refreshedToken = FirebaseInstanceId.getInstance().getToken();&lt;br /&gt;&amp;nbsp; &amp;nbsp; //tymto mozeme vidiet v logcat-e ako vypada token&lt;br /&gt;&amp;nbsp; &amp;nbsp; Log.d("BAGA", refreshedToken);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; /*&lt;br /&gt;&amp;nbsp; &amp;nbsp; token mozeme posielat na backend server aby som subscribol aplikaciu pre&lt;br /&gt;&amp;nbsp; &amp;nbsp; odber noviniek a posielanie upozorneni uzivatelom na zariadenia alebo mozem&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;uplne ignorovat token, to zalezi od use case-u&lt;br /&gt;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp;}&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Posledná trieda má na starosti spracovanie push správ, ktoré prichádzaju v údalosti &lt;i&gt;onMessageReceived&lt;/i&gt;. Než doplním &amp;nbsp;poslednú triedu, ktorá bude mať na starosti príjem push správy a vytvorenie notifikácie v zariadení, vysvetlím aké typy push správ posiela server.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Push správy (Push message)&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Google predstavil dva typy správ a to &lt;i&gt;Notification message &lt;/i&gt;a &lt;i&gt;Data message&lt;/i&gt;. Každá z nich má určité výhody, ale aj nevýhody. Skúsim ich naznačit, ale bližšie informácie sa nájdu na tomto mieste:&amp;nbsp;&lt;a href="https://firebase.google.com/docs/cloud-messaging/concept-options?authuser=1" target="_blank"&gt;About FCM Messages&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Notification message:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;je ľahšia verzia správy s veľkosťou do 2 KB&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;má preddefinované kľúče, ktoré sa nedajú meniť ani dopĺňať(vysvetlím nižšie)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Takto vydapá Notification message, všetko čo object notification obsahuje, je preddefinované a nedajú sa dopĺňať dodatočné informácie. To znamená, že ak máme ešte potrebujeme poslať iné štruktúrované (xml, json alebo iné) údaje môžeme to poslať jedine v kľúči body, ale to by bolo neprehľadné. Ostatné kľúče sú vopred preddefinované a slúžia svojmu účelu. Tak napr. kľúč title je titulok notifikácie, ktorá sa zobrazí v zariadení a body je zase text notifikácie. Kľúč icon slúži na názov ikony, ktorú je potrebné použiť, ale s tou nemám také skúsenosti a neviem si to presne predstaviť ako to má fungovať.&lt;/div&gt;
&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/i&gt;&lt;/div&gt;
&lt;i&gt;
{&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;"notification" : {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"body" : "great match!",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"title" : "Portugal vs. Denmark",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"icon" : "myicon"&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;  }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Nakoniec tu máme Date message:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;správa môže byť veľkosťou do 4 KB&lt;/li&gt;
&lt;li&gt;môže mať užívateľom definované kľuče a hodnoty&lt;/li&gt;
&lt;/ul&gt;
&lt;i&gt;{&lt;br /&gt;&amp;nbsp;"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",&lt;br /&gt;&amp;nbsp;"data" : {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"Nick" : "Mario",&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"body" : "great match!",&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"Room" : "PortugalVSDenmark"&lt;br /&gt;&amp;nbsp;},&lt;br /&gt; }&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: justify;"&gt;
Nič nam nebráni v tom použiť ešte ďaľšie kľúče v Data message. Pre jednoduchší život radšej používajte Data message. Dôvod je hlavne taký, že aplikácia handluje prijatú správu, viac informácií je možné nájsť v následujúcom linku&amp;nbsp;&lt;a href="https://firebase.google.com/docs/cloud-messaging/android/receive" target="_blank"&gt;Receive Messages in an Android App&lt;/a&gt;. Na ozrejmenie nám poslúži následujúca tabuľka:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.nobrtable br { display: none }&lt;/style&gt;

&lt;br /&gt;
&lt;div class="nobrtable"&gt;
&lt;table border="1" bordercolor="#0033FF" style="background-color: black; color: black; color: white; text-align: center; text-decoration: none;"&gt;
&lt;caption&gt;Tabl 1. Správanie aplikácie pri Notification a Data message&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Stav aplikácie&lt;/th&gt;
&lt;th&gt;Notification&lt;/th&gt;
&lt;th&gt;Data&lt;/th&gt;
&lt;th&gt;Obidve&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foreground&lt;/td&gt;
&lt;td&gt;onMessageReceived&lt;/td&gt;
&lt;td&gt;onMessageReceived&lt;/td&gt;
&lt;td&gt;onMessageReceived&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background&lt;/td&gt;
&lt;td&gt;System tray&lt;/td&gt;
&lt;td&gt;onMessageReceived&lt;/td&gt;
&lt;td&gt;Notification: System tray&lt;br /&gt;
Data: v extras Intentu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ešte raz opakujem pre lepší život je vhodnejšie na začiatku používať Data message. Takže keď pošleme Notification message a aplikácia je v popredí(foreground), tak správa sa spracuje v udalosti &lt;i&gt;onMessageReceived &lt;/i&gt;služby&amp;nbsp;&lt;i&gt;MessagingService. &lt;/i&gt;Ak je aplikácia v pozadí (background), tak správa sa nespracuje v onMessageReceived, ale zobrazí sa v systemových notifikáciach a po tapnutý na notifikáciu otvorí hlavnú obrazovku aplikácie. Užívateľ nemá dosah pomocou aplikácie na to ako sa zobrazí notifikácia v systémovom tray bare a ani nemá dosah na to keď sa tapne aby sa zobrazila určitá obrazovka aplikácie. Ak sa jedná o Data message, život máme jednoduchší. Všetko sa môže spracovať v &lt;i&gt;onMessageReceived&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
onMessageReceived&lt;/h3&gt;
&lt;div&gt;
Tak prišiel čas na to implementovať túto udalosť a zobraziť jednoduchú notifikáciu v system tray bare. V podstate je tento event jednoduchý, stačí dobre ohandlovať, viď. nižšie:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;@Override&lt;br /&gt;public void onMessageReceived(RemoteMessage remoteMessage) {&lt;br /&gt;&amp;nbsp; super.onMessageReceived(remoteMessage);&lt;br /&gt;&amp;nbsp; if (remoteMessage.getData().size() &amp;gt; 0){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d("BAGA", remoteMessage.getData().get("Nick"));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d("BAGA", remoteMessage.getData().get("body"));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d("BAGA", remoteMessage.getData().get("Room"));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
Tento event je veľmi jednoduchý. Môžeme vybuildovať notifikáciu a pending intentom, ktorý spustí nami zvolenú aktivitu alebo inú akciu, záleží podľa use case-u.&lt;br /&gt;
&lt;br /&gt;
Na záver ukážem ako môžeme posielať push správy so servera do zariadenia. Príklad bude ale pod windowsom v PowerShell konzole, keďže som dlhoročný užívateľ windows.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Server a posielanie push správ&lt;/h3&gt;
Posielať push správy budeme posielať na Google servere a ten ich bude rozposielať jednotlivým zariadeniam. Adresa, na ktorú sa majú posielať jednotlivé push správy je:&amp;nbsp;&lt;a href="https://fcm.googleapis.com/fcm/send" target="_blank"&gt;https://fcm.googleapis.com/fcm/send&lt;/a&gt;. Posiela sa to ako HTTP POST. Treba definovať http hlavičku, kde idú polia:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;kľúč&lt;/b&gt;: &lt;i&gt;Content-Type&lt;/i&gt;, h&lt;b&gt;odota&lt;/b&gt;: &lt;i&gt;&amp;nbsp;application/json&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;kľúč&lt;/b&gt;: &lt;i&gt;Authorization, &lt;/i&gt;&lt;b&gt;hodnota&lt;/b&gt;: &lt;i&gt;key=&amp;lt;moj-server-kluc&amp;gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
Server kľúč je možné nájsť vo firebase konzole, nastaveniach projektu. Následne treba vygenerovať JSON, ktoré pôjde do HTTP tela. JSON bude mať následujúcu podobu:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;i&gt;{&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; "to":"cqlFlvpZvTw......",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "data": {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Nick" : "Mario",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "body" : "great match!",&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Room" : "PortugalVSDenmark"&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
V tomto prípade treba brať do úvahy, že kľúč "&lt;i&gt;to&lt;/i&gt;" obsahuje hodnotu, čo je token, ktorý vygenerovalo zariadenia. Tento token vieme získať so zariadenia a ho na server. V našom prípade ho ale vytiahneme z logcat-u. Ako štruktúrovať JSON správu a aké kľúče je možné použiť je možné vidieť v následujúcom linku&amp;nbsp;&lt;a href="https://firebase.google.com/docs/cloud-messaging/http-server-ref" target="_blank"&gt;Firebase Cloud Messaging HTTP Protocol&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Záver&lt;/h3&gt;
&lt;div&gt;
FCM je v podstate asi jednoduchšie oproti GCM. Jednotlivé rozdieli medzi FCM a GCM a ako migrovať si môžete prečítať tu:&amp;nbsp;&lt;a href="https://developers.google.com/cloud-messaging/android/android-migrate-fcm" target="_blank"&gt;Migrate a GCM Client App for Android to Firebase Cloud Messaging&lt;/a&gt;. Pre vývojárov je FCM veľmi jedoduchý implementovať v aplikácií. Osobne som sa s touto technológiou stretol prvýkrát a musím povedať, že som rýchlo pochopil koncept a aj implementoval v aplikácií pre zákazníka.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLgmaAw7XMd9YImVn-Q3tUzy_xjdNyYVWC1gRGckb3WYzCBjtPS0y4ts2wGJlZDtLWlZcpHCfe8KkO2wT1qPf7B4FIm_z_e_zd3sCVq4tRRVqcp4eiSvdvzjE18CB8ecC5nF6mfUflxGs/s72-c/Firebase+console_new_project.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Android developer options</title><link>http://vartech.blogspot.com/2016/12/android-developer-options.html</link><category>android</category><category>android settings</category><category>developer options</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Sun, 25 Dec 2016 13:21:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-7802369266030691757</guid><description>V oblasti Android developu sa pohybujem už nejaký čas. Mnohokrát som sa čudoval, aké rôzne možnosti pre vývojara ponúka Developer options, Mnohé možnosti sú úzko špecializované a ani ja nepoužívam všetky. V tomto článku si dám za úlohu vysvetliť tieto nastavenia. Niektoré nastavenia sú špecifické pre jednotlivé verzie a s každou novou verziou môže pribudnúť nové nastavenie alebo sa odstrániť staré nepotrebné.&lt;br /&gt;
&lt;h3&gt;
Povolenie vývojarských nastavení&lt;/h3&gt;
Ako prvé je nutné povoliť nastavenia, začínajúci developeri budú mať možno na začiatku problém, keďže nastavenia sú defaultne skryté v menu. Skúsenejší už vedia, čo treba spraviť. Aby sme si vedeli ich zobraziť, treba postupovať nasledujúco:&lt;br /&gt;
1) otvoriť nastavenia telefónu (Settings)&lt;br /&gt;
2) ísť do sekcie "Informácie o telefónne" (About device)&lt;br /&gt;
3) rýchlo treba tapnúť na položku "Číslo zostavy" (Build number)&lt;br /&gt;
&lt;br /&gt;
Po týchto krokoch by sa malo zobraziť krátke upozornenie, že ste sa stali developerom na mobilnom zariadení. Stačí vyjsť zo sekcie o úroveň vyššie a už bude možné nájsť Možnosti pre vývojárov (Developer Options).&lt;br /&gt;
&lt;h3&gt;
Developer Options&lt;/h3&gt;
&lt;br /&gt;
&lt;b&gt;Vytvoriť hlásenie o chybách (Make bug report / Take bug report)&lt;/b&gt; - zozbiera všetky log súbory v zariadení, pekne ich zabalí a pripraví na odoslanie. Odoslať si to môžeme buď na email, do cloudového uložiska, alebo inde. Chvíľu potrvá, než sa zozbierajú všetky údaje v zariadení a pripravia, trvá to od cca. 1 minúty do 2 minút. Keď Android zariadenie pripraví report, upozorní nás cez notifikáciu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Výber runtime prostredia (Select runtime)&lt;/b&gt; - v tomto prípade máme možnosť výberu behového prostredia pre aplikácie. Buď to bude dalvik virtual machine, čo je najpoužívanejšie, alebo to bude android runtime (ART). Táto voľba je zatiaľ experimentálna a je dostupná hlavne na android verziách 4.4. Vo vyšších verziách bola znova odstránená. Google uviedlo že ART by malo byť náhradou za Dalvik prostredie.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Heslo záloh v počítači (Desktop backup password)&lt;/b&gt; - pomocu ADB je možné zálohovať a obnovovať súbory ako aplikácie, dáta súvisiace s aplikáciou do počítača a z počítača. Touto možnosťou je možné ochrániť zálohy heslom. Bez hesla nebude možné obnoviť zálohy&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nevypínať obrazovku (Stay awake)&lt;/b&gt; - táto možnosť zapríčiní to, že mobil nebude vypínať obrazovku počas nabíjania (či už cez USB port na počítači alebo elektrickú zásuvku je jedno, proste bude zapnutá). Toto je skvelé pre vývojara, ale zlé pre užívateľa na vypálenie si obrazu na obrazovku&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Povoliť sledovanie Bluetooth HCI (Enable Bluetooth HCI snoop log)&lt;/b&gt; - pre potreby analýzy je občas nutné zachytávať bluetooth HCI(host controller interface) pakety. Povolením tejto možnosti tieto pakety uloží do súboru (/sdcard/btsnoop_hci.log). Takýto súbor je možné neskôr analyzovať pomocou programu ako je wireshark.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Chrániť kartu SD (Protect SD card)&lt;/b&gt; - povolením tejto možnosti vynutíme ochranu, že aplikácie nebudú môcť čítať externe úložisko pokiaľ nebudú mať permission READ_EXTERNAL_STORAGE v manifeste. Táto voľba platí pre staršie zariadenia ako Android 4.3 až Android 4.1. Tie aplikácie, ktoré proste nemajú túto permission proste havarujú na výnimke&amp;nbsp;SecurityException.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Štatistiky procesov (Process Stats)&lt;/b&gt; - cez túto položku sa dotaneme k ďaľšej sekcii developer options, konkrétne štatistiky procesov bežiacích v zariadení. Po tapnutí na určitý proces sa zobrazí obrazovka, kde vidieť podrobné štatistiky súvisiace s procesom. Je možné sledovať ako užívateľské procesy tak aj systémove.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ladenie USB (USB debugging)&lt;/b&gt; - toto treba mať zapnuté počas vývoja. Umožňuje komunikáciu medzi zariadením a počítačom cez USB port. Toto je najdôležitejšia položka pre vývojára. Okrem komunikácie je aj možné posielať ADB príkazy do zariadenia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Odvolanie autorizácií na ladenie USB (Revoke USB debugging authorizations)&lt;/b&gt; - &amp;nbsp;po prvý krát, keď pripojíme zariadenie k počítaču a je povolené USB ladenie, tak si vypýta najprv, aby sme autorizovali počítač na obrazovke zariadenia (povolili počítač v zariadení). Autorizovaním počítača si v zariadení vytvorí kľúčový pár alebo otlačok počítača a budeme môcť používať USB ladenie. Ak chceme znova aby sa počítače autorizovali v zariadení, tak ako prvý krát, treba &amp;nbsp;použiť túto možnosť.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Skratka hlásenia o chybe (Include bug reports in power menu / Bug report shortcut)&lt;/b&gt; - &amp;nbsp;vloží možnosť zozbieraťhlásenie o chybách a odoslať ich už v cez ponuku vypnutia zariadenia (teda cez tlačítko power buttonu)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Povoliť simulované polohy (Allow moc locations)&lt;/b&gt; - pomocou tohto je možné manuálne nastaviť lokalizačné informácie. Na nastavenie falošnej lokalizácie je potrebné aplikáciu. Ale pred použitím aplikácie je nutné túto položku povoliť.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vybrať aplikáciu na ladenie (Select app to be debugged / Select debug app)&lt;/b&gt; - máme možnosť zvoliť aplikáciu na ladenie a má to dva efekty, a to zabraňuje to vo vyvolaní chyby, ak sa zdržíte dlho v breakpointe počas ladenia a povolí ďalšiu ponuku Čakať na ladiaci nástroj.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Čakať na ladiaci nástroj (Wait for debugger)&lt;/b&gt; - Táto položka je zablokovaná do doby, než si zvolíte aplikáciu na ladenie pomocou hore uvedeného nastavenia. Pozdružuje štart zvolenej aplikácie do vtedy, než sa k nej pripojí ladiaci nástroj (debugger).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Overovať aplikácie z USB (Verify app over USB / Verify apps via USB)&lt;/b&gt; - umožňuje overovať aplikácie inštalované cez USB pomocu Google serverov. To znamená, že sa overuje všetok kód, ktorý sa posiela cez USB. Android posiela všetko na Google servere a overuje sa, či aplikácia neobsahuje nejaký známy malware.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Certifikácia bezdrôtového displeja (Wireless display certification / Authorize wireless display devices)&lt;/b&gt; - táto položka je dobrá pre tých, čo vlastnia televízor s technológiou Miracast-ready. V takom prípade si môžu premietať obsah displeja zariadenia na televíziu. Povolenie takéhoto premietanie je nutné povoliť túto možnosť.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Povoliť prihlasovanie WLAN Verbose (Enable Wi-Fi Verbose Logging)&lt;/b&gt; - táto možnosť povolí zobraziť informácie o wi-fi sieti vo wifi screen pickery a dovolí vytvoriť&amp;nbsp;wpa_supplicant log, kde bude ukladať informácie o wifi.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Agresivne odovzdávať WLAN na mobilnú sieť (Aggressive Wi-Fi to Cellular handover)&lt;/b&gt; - ak je Wi-Fi signál slabý, tak táto možnosť dovolí rýchlo prepnúť na mobilné dáta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vždy povoliť funkciu WLAN Roam Scans (Always allow Wi-Fi Roam Scans)&lt;/b&gt; - umožňuje migrovať na silnejšiu Wi-Fi sieť, ak sa nachádza v dosahu. To znamená, že ak som pripojený na Wi-Fi so slabším signálom a v dosahu sa nachádza sieť so silnejším dosahom, Android zariadenie by malo vedieť sa prepnúť na túto silnejšiu sieť.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Veľkosť vyrovnávacej pamäte denníka (Logger buffer sizes)&lt;/b&gt; - dovoluje zmeniť veľkosť bufferu pre logy. Možné veľkosti sú 64K, 256K, 1M, 4M a 16M.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobrazovať dotyky (Show touches)&lt;/b&gt; - zobrazí vizualizáciu, keď zariadenie zaregistruje dotyk na obrazovke v bode dotyku.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Umiestnenie ukazovateľa (Pointer location)&lt;/b&gt; - táto možnosť umiestní na vrchnú časť obrazovky lištu, kde bude zobrazovať súradnice dotyku a zanechá čiaru na mieste, ako išiel dotyk po obrazovke. Jednotlivé údaje, sú následujúce: P - počet dotykov, čo zariadenie dokázalo zaregistrovať, a maximálny počet z predošlého dotyku, dX alebo X, dY alebo Y - sú súradnice dotyku v osi X a Y a rozdiel dX a dY od začatia dotyku a jeho ukončenia, ak je viacej &amp;nbsp;dotykov, ukazuje súradnice len prvého, Xv a Yv - sú zase rýchlostné vektory, ktoré zobrazujú len rozdiel v smere X a Y, Prs - zobrazujú tlak vyvíjaní na displej, je to len orientačná hodnota, keďže kapacitné displeje nedokážu snímať tlak a nakoniec je tu Size - veľkosť bodu dotyku.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobrazovať obnovenia obsahu (Show surface updates)&lt;/b&gt; - pri zmene obsahu obrazovky obrazovka preblikne. Neodporúčam pre epileptikov.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobraziť ohraničenia (Show layout bounds)&lt;/b&gt; - zobrazí ohraničenia všetkých prvkov na obrazovke.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Rozloženie sprava doľava (Force RTL Layout direction)&lt;/b&gt; - vypnú orientáciu obrazovky z prava do ľava.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mierka animácie okna (Window animation scale)&lt;/b&gt; - umožňuje zmeniť rýchlosť animácií okien. Čím nižšie číslo, tým rýchlejšia animácia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mierka animácie premeny (Transition animation scale)&lt;/b&gt; - ako v predchádzajúcom mení rýchlosť animácie.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Mierka dĺžky animácie (Animator duration scale) &lt;/b&gt;- mení samotnú rýchloť zvyšných animácií.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Simulovať sekundárne displeje (Simulate secondary displays)&lt;/b&gt; - umožňuje simulovať iné rozlíšenia obrazoviek. Osobne mi to, ale nefungovalo najlepšie.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vykreslovať pomocou GPU (Force GPU rendering)&lt;/b&gt; - núti vykreslovať 2D grafiku pomocou GPU v aplikáciach.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobraziť obnovenia s GPU (Show GPU view updates)&lt;/b&gt; - všetky view-y, ktoré vykresľuje GPU, budú mať červený rámček okolo seba po zmene obsahu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobraziť akutalizácie HW vrstiev (Show hardware layers updates)&lt;/b&gt; - prebliknu prvky na zeleno, keď budú hardwerovo aktualizované.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ladenie prekresľovanie GPU (Debug GPU overdraw)&lt;/b&gt; - zobrazí pomocou farieb to, ako často sa musia prvky na obrazovke prekresľovať. Použité sú tieto farby: modrá - ak sa iba raz prekreslí prvok, zelená - ak sa prekreslí dvakrát prvok, ružová - ak sa prvok prekreslí trikrát a červená ak sa prvok prekreslí štyrikrát a viac krát. (Viac info viď. &lt;a href="https://developer.android.com/studio/profile/dev-options-overdraw.html#VisualizingOverdraw" target="_blank"&gt;Debug GPU Overdraw Walkthrough&lt;/a&gt;. )&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ladenie operácií neobdĺžnikových klipov (Debug non- rectangular clip operations) &lt;/b&gt;-&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vynútiť 4x MSAA (Force 4x MSAA)&lt;/b&gt; - vynúti multi vzorkovú anti-aliasing technológiu. Krajšie vykresľovanie, ale na úkor výkonu.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zakázať hardvérové prekrytia (Disable HW overlays)&lt;/b&gt; - skracuje čas spracovania aplikácií, ktoré niečo zobrazujú na displeji. Bez toho aplikácia používa zdieľanú video pamäť a musí stále kontrolovať kolízie.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Simulácia farebného priestoru (Simulate color space)&lt;/b&gt; - pomáha vývojárom vidieť, ako vyzerá aplikácia pre farboslepých užívateľov.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Použiť AwesomePlayer (zastarené)(Use AwesomePlayer (deprecated))&lt;/b&gt; - rozdiel medzi NuPlayerom a AwesomePlayerom je hlavne v načítaní online videa. NuPlayer načítava online videa rýchlejšie. Keďže vo verzii Android 5 je toto nová verzia a nie je ešte vyladená, tak sa dá prepnúť na staršiu verziu, ale touto možnosťou. V neskorších verziách môže táto voľba úplne zmiznúť.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vypnutie smerovania zvuku do USB (Disable USB audio routing)&lt;/b&gt; - nebude posielať audio výstup na USB port, ak je pripojené audio zariadenie v USB porte.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Prísny režim bol povolený (Strict mode enabled)&lt;/b&gt; - pri povolenej možnosti bude obrazovka blikať, ak aplikácia bude vykonávať dlhotrvajúcu operáciu na hlavnom vlákne&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobraziť využitie CPU (Show CPU usage)&lt;/b&gt; - v pravom hornom rohu obrazovky bude zobrazovať informácie o využití CPU&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Profil vykreslovania GPU (Profile GPU rendering)&lt;/b&gt; - spraví grafickú vizualízáciu vykresľovania GPU v ľavom dolnom rohu, alebo môžeme zapísať do súboru&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Trasovanie OpenGL (Enable OpenGL traces)&lt;/b&gt; - povolí sledovanie OpenGL chýb a zapíše ich do log súboru&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Neuchovávať aktivity (Don't keep activities)&lt;/b&gt; - ukončí všetky aktivity po odídení z hlavného view. Predlžuje výdrž batérie, ale zato dlhšie sa zapína aplikácia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Limit procesov na pozadí (Background process limit)&lt;/b&gt; - môžeme ovplyvniť počet súčasne bežiacich procesov na pozadí.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Zobrazovať všetky ANR (Show all ANRs)&lt;/b&gt; - zobrazí dialóg Aplikácia neraguje pre všetky aplikácie a aj tie, ktoré bežia na pozadí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Snažil som sa zhrnúť všetky možnosti, ktoré sa nachádzali v Developer options naprieč viacerými verziami Androidu. Nedostal som sa akurát k verzii Android 6 a 7, keďže ešte nevlastním žiadne zariadenie, ale to sa zmení čoskoro. Ak je niečo, čo som nespomenul k nastaveniu alebo vynechal nejaké nastavenie, budem rád za pripomienky. Jednotlivé nastavenia sú v samotnej obrazovke oddelené cez hlavičku ešte do kategórií ako Debugging, Input, Drawing, Hardware-accelerated rendering, Monitoring, Apps. Doplním, že systém Android je tak populárny, že ho viacerí výrobcovia HW používajú vo svojich produktoch v rôznych variantách, spomeniem Amazon a ich systém Fire OS. Ten má veľa spoločného s Android a aj Developer Options nastavenia. Takže čo platí pre Android, platí aj pre Fire OS. Pri písaní článku som vychádzal z dokumentácie, osobných skúseností a z týchto článkov:&lt;br /&gt;
&lt;a href="https://www.blogger.com/goog_405534284"&gt;&lt;br /&gt;&lt;/a&gt;
&lt;a href="http://www.androidcentral.com/all-about-your-phones-developer-options" target="_blank"&gt;All about your phone's developer options&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.androidmir.org/katya/515/" target="_blank"&gt;Android Developer Options: enable, disable and use  Read more&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
V ďalšom článku pridám Developer Options pre Android Wear Motorola Moto 360.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Android - Product Flavors</title><link>http://vartech.blogspot.com/2016/09/android-product-flavors.html</link><category>android</category><category>android studio</category><category>build flavors</category><category>build.gradle</category><category>gradle</category><category>product flavors</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Tue, 27 Sep 2016 07:59:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-9073941959529231203</guid><description>&lt;div style="text-align: justify;"&gt;
Od nástupu Android Studia bol predstavený aj nový buildovací systém Gradle. Tento systém je open source, flexibilný, postavený na groovy jazyku, v mnohom uľahčuje prácu vývojárovi.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ako android vývojár som sa stretol s tým, že aplikácia mala byť publikovaná na dva odlišné obchody s použitím mierne odlišných funkcií špecifických pre daný obchod. Typické funkcie špecifické pre dané obchody bývajú nákupy v aplikácii alebo prostredníctvom reklamy. Tých obchodov, kde môžeme publikovať aplikácie je viacero, spomeniem ich zopár:&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;ul&gt;
&lt;li&gt;Google play - najznámejší, keďže sa jedná o Android systém.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Amazon App Store - Amazon vytvoril vlastnú variantu Android Systému pod názvom Fire OS.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Samsung Galaxy Apps - obchod od Samsungu, čo viac k tomu dodať.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
S publikovaným aplikácie na dva alebo viacej obchodov nie je problém. Problém nastáva pri tom, keby sme chceli použiť v aplikácii špecifické funkcie pre daný store ako nákupy v aplikácií. Napr. Amazon nepodporuje Google Play Services  v ich systéme Fire OS (podporuje In-app Purchases), čo znamená, že nevieme robiť nákupy v Google obchode (ten má zase In-app Billing). Tento problém sa dá riešiť viacerými spôsobmi. Jeden spôsob je ten, že budem mať dva odlišné projekty v Android Studiu jednej aplikácie, väčšinu kódu budú mať oba projekty identickú, budú sa odlišovať len v implementáciach nákupov. Ak nájdem chybu v kóde, ktorý je rovnaký pre oba projekty, tak to znamená aj dve rovnaké opravy kódu v dvoch projektoch. Tiež prepínanie sa medzi projektami počas vývoja nie je najrýchlejšie.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Druhý spôsob bude taký, že budem mať jeden projekt a nakonfigurujem v buildovacom systéme gradle product flavors. Tento spôsob je elegantnejší, jeden kód, ktorý je rovnaký(zdielaný) pre obe verzie aplikácie, bude len raz a pridáme implementácie funkcií pre konkrétne obchody oddelene od zdieľaného kódu. Bližšie o build flavors sa dá dočítať na vývojarských stránkach Android: &lt;a href="https://developer.android.com/studio/build/build-variants.html"&gt;Product Flavors and Variants&lt;/a&gt;. Vysvetlím použitie druhého spôsobu na príklade. Majme projekt, ktorý má následujúcu štruktúru, viď. následujúci obrázok:&lt;/div&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKkok7Z3mcaCxy8bL0uArsf0dmORLcyAkWkVCxXBghPOIoN6h6RnfCIbzjVpjGxYHnRlV9zso6iUEC0eaK2n-J20uaoCIIrgxV5q_ggCMXFv4DGMVNVUVwULCkvT-AV7CC8BZ-gp1Cn8/s1600/Project.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKkok7Z3mcaCxy8bL0uArsf0dmORLcyAkWkVCxXBghPOIoN6h6RnfCIbzjVpjGxYHnRlV9zso6iUEC0eaK2n-J20uaoCIIrgxV5q_ggCMXFv4DGMVNVUVwULCkvT-AV7CC8BZ-gp1Cn8/s640/Project.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Android Studio - štruktúra projektu&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Začneme tým že pridáme niekoľko riadkov do súboru build.gradle, ktorý sa nachádza v aplikačnom module (app).&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;productFlavors{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;google{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionCode 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionName '1.1'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; amazon{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionCode 2&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionName '1.2'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Po vložení hore uvedených riadkov a zosynchronizovaní &lt;i&gt;build.gradle&lt;/i&gt; nám vytvorí niekoľko variant a to amazonDebug, amazonRelease, googleDebug, googleRelease, ako vidieť na obrázku nižšie.&lt;/div&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1weN00sHPsoVAyoKqhY6at13mNPP_Rphpm21bw3dNRKRfPWThvIRXMms8yFzLnTl2CzeeUB0izeK0PDShXDkTx602HdYTDCI8xkZXsUvDg1gks18XyA-0bnaVbQ4vxM2-ljRehVzs_aI/s1600/NewBuildVariants.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1weN00sHPsoVAyoKqhY6at13mNPP_Rphpm21bw3dNRKRfPWThvIRXMms8yFzLnTl2CzeeUB0izeK0PDShXDkTx602HdYTDCI8xkZXsUvDg1gks18XyA-0bnaVbQ4vxM2-ljRehVzs_aI/s400/NewBuildVariants.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Android Studio - Build Variants&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
Pred synchronizáciuo sme mali len dve build varianty a  to Debug a Release. Keby sme pridali ďalšiu product flavors, tak Android Studio nám vytvorí 6 build varianta, ktorá bude mať vypadať následujúco:&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&amp;lt;meno&amp;gt;Debug&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&amp;lt;meno&amp;gt;Release&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
V Android Studiu sa vieme teraz prepínať medzi build variantami. Momentálne máme len build varianty vytvorené, keď chceme ešte doplniť kódy špecifické pre každú variantu potrebujeme vytvoriť adresárovú štrukúru zdrojových kódov v Android Studiu.&amp;nbsp;Štruktúra adresárov teraz bude vypadať následujúco:&lt;/div&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYX2um2Fbkjoozl9iKW-bJU79O_FQJ_bG7zrXLEC0LiRSWz_AQXvPbHmHRklAAyLnzQg1Itof84suecbPYxsGF6_23Mgatf1F1HkopHkAVxwN0Ru1StCDXFLGi5YT5oTobpAOI9L_A8Kk/s1600/Directories.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYX2um2Fbkjoozl9iKW-bJU79O_FQJ_bG7zrXLEC0LiRSWz_AQXvPbHmHRklAAyLnzQg1Itof84suecbPYxsGF6_23Mgatf1F1HkopHkAVxwN0Ru1StCDXFLGi5YT5oTobpAOI9L_A8Kk/s640/Directories.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Android Studio - Štruktúra projektov po pridaní product flavors&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Túto štruktúro nám Android Studiu nevytvorí, tú si musíme vytvoriť sami. Štruktúra pre zdrojové kódy je podľa následujúceho vzorca:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;src\&amp;lt;productFlavors-name&amp;gt;\java\&amp;lt;package&amp;gt;\SpecifickaImplementaciaPodlaFlavoru.java&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Pre Resources je štruktúra jednoduchšia:&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;src\res\layout\LayoutSpecifickyPreProductFlavor.xml&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
V Adresáry &lt;i&gt;src\main&lt;/i&gt; sú umiestnené všetky zdrojové kódy, ktoré nie sú špecifické pre určitú product flavor. Ako príkladom ukážem aplikáciu, ktorá bude robiť dve veci, záleži od jej product flavor. Amazon flavor bude robiť rozdiel dvoch čísel, bude mať aj rozdielne pozadie activity oproti google flavor. Zatiaľ čo google flavor bude dve čísla spočítavať. V adresári &lt;i&gt;src\main&lt;/i&gt; je trieda &lt;i&gt;Calculating.java&lt;/i&gt;, ktorá je spoločná pre obe flavors, jej zdrojovy kód je následujúci:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;package test.vuforia.goodrequest.com.gradletest; &lt;br /&gt;&lt;br /&gt;public class Calculating { &lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static int Add(int number1, int number2) { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return number1 + number2;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static int Substraction(int number1, int number2) { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return number1 - number2; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;}
&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
Layout pre google flavor je následujúci:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;i&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" &lt;br /&gt;android:layout_width="match_parent" &lt;br /&gt; android:layout_height="match_parent"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android:orientation="vertical"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android:background="@color/black"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;TextView android:layout_width="wrap_content"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android:layout_height="wrap_content"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android:text="Cislo 1"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android:textColor="@color/white"/&amp;gt;&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&amp;lt;EditText android:id="@+id/number1"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_width="match_parent"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_height="wrap_content"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:background="@color/white"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:inputType="number"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TextView android:layout_width="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_height="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:textColor="@color/white"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:text="Cislo 2"/&amp;gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;&amp;lt;EditText android:id="@+id/number2"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_width="match_parent"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_height="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:background="@color/white"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:inputType="number"/&amp;gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;&amp;lt;Button android:id="@+id/sucet"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_height="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_width="wrap_content"&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:text="Sucet" /&amp;gt;&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;lt;TextView android:id="@+id/vysledok"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_width="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:layout_height="wrap_content"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:textColor="@color/white"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp;android:textStyle="bold"/&amp;gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;lt;/LinearLayout&amp;gt; &lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Layout pre Amazon flavor je rovnaká, rozdiel je len v použitých farbách pozadia LinearLayoutu a Button má iný textový popisok a id. Pod popiskom myslím android:text attribut. Trieda MainActivity.java má následujúci kód:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;package test.vuforia.goodrequest.com.gradletest; &lt;br /&gt;&lt;br /&gt;import android.support.v7.app.AppCompatActivity; &lt;br /&gt;import android.os.Bundle; &lt;br /&gt;import android.view.View; &lt;br /&gt;import android.widget.Button; &lt;br /&gt;import android.widget.EditText; &lt;br /&gt;import android.widget.TextView; 
&lt;br /&gt;
&lt;br /&gt;public class MainActivity extends AppCompatActivity { 
&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;private Button sucet; 
&lt;br /&gt;private EditText cislo1, cislo2; 
&lt;br /&gt;private TextView vysledok; 
&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;@Override 
&lt;br /&gt;protected void onCreate(Bundle savedInstanceState) { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cislo1 = (EditText) findViewById(R.id.number1); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cislo2 = (EditText) findViewById(R.id.number2); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; vysledok = (TextView) findViewById(R.id.vysledok); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sucet = (Button) findViewById(R.id.sucet); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sucet.setOnClickListener(new View.OnClickListener() { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onClick(View v) { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((cislo1.getText().length() != 0) &amp;amp;&amp;amp; (cislo2.getText().length() != 0)) { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int scitanec1 = Integer.valueOf(cislo1.getText().toString()); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int scitanec2 = Integer.valueOf(cislo2.getText().toString()); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vysledok.setText("" + Calculating.Add(scitanec1, scitanec2)); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }); 
&lt;br /&gt;} 
&lt;br /&gt;}
&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
V podstate aj amazon flavor je velmi podobný, odlišuje sa len v implementácii OnClick listeneru buttonu:&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
rozdiel.setOnClickListener(new View.OnClickListener() { &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; public void onClick(View v) { &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((cislo1.getText().length() != 0) &amp;amp;&amp;amp; (cislo2.getText().length() !=0)){ &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int mensenec = Integer.valueOf(cislo1.getText().toString()); &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int mensitel = Integer.valueOf(cislo2.getText().toString()); &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vysledok.setText("" + Calculating.Substraction(mensenec,mensitel));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Takýmto flexibilným spôsobom vieme vytvoriť viacero verzií jednej aplikácie rozlišujúcej sa vo vzhľade alebo vo funkcii. Nepotrebujeme k tomu žiadne dva projekty, stačí nám jeden. Pre úplnosť uvádzam výpis build.gradle súboru nachádzajúceho sa v app module:&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;i&gt;apply plugin: 'com.android.application'&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;android {&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; compileSdkVersion 24&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; buildToolsVersion "24.0.2"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; defaultConfig {&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; applicationId "test.vuforia.goodrequest.com.gradletest"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; minSdkVersion 18&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; targetSdkVersion 24&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionCode 1&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionName "1.0"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; buildTypes {&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; release {&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; minifyEnabled false&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; productFlavors{&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; google{&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionCode 1&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionName '1.1'&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; amazon{&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionCode 2&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; versionName '1.2'&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;}&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;dependencies {&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; compile fileTree(dir: 'libs', include: ['*.jar'])&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; compile 'com.android.support:appcompat-v7:24.2.1'&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;}&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Text je publikovaný aj na blogu som písal aj pre spoločnosť GoodRequest s.r.o., kde som v dobe písania pôsobil.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKkok7Z3mcaCxy8bL0uArsf0dmORLcyAkWkVCxXBghPOIoN6h6RnfCIbzjVpjGxYHnRlV9zso6iUEC0eaK2n-J20uaoCIIrgxV5q_ggCMXFv4DGMVNVUVwULCkvT-AV7CC8BZ-gp1Cn8/s72-c/Project.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Android CrackeMe</title><link>http://vartech.blogspot.com/2015/12/android-crackeme.html</link><category>android</category><category>apktool</category><category>dekompiler</category><category>java</category><category>jeb</category><category>reverse engineering</category><category>smali</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Fri, 25 Dec 2015 10:32:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-1485217048532316214</guid><description>&lt;div style="text-align: justify;"&gt;
Toto bude netradičný článok. Osobne sa pohybujem v android vývoji už určitý čas a začal som sa zaujímať o to, ako funguje ochrana aplikácií na tejto platforme. Pár aplikácii som si pre zvedavosť crackol, ale nepoužívam ich a ani nedistribuujem ďalej. Vysvetľovať to, ako som postupoval na takejto aplikácií nie je dobré a ani férové voči vývojárovi, je to nelegálne. Preto som si vybral na to špecialne určenú aplikáciu CrackMe, ktorá bolá napísaná vývojárom ako challenge pre tých, čo sa radi vŕtajú v aplikáciách a zisťujú ako fungujú, teda ovládajú taje umenia reverzného umenia.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Na naše účely poslúži aplikácia od Deurus užívateľa, ktorý napísal viacej druhov crackme pre rôzne platformy, link&amp;nbsp;&lt;a href="http://crackmes.de/users/deurus" target="_blank"&gt;Dereus&lt;/a&gt;. Užívateľ ako požaduje vo výzve vytvorenie generátora sériových čísel alebo patchovanie aplikácie. Prikladám odkaz na súbor, na ktorom vysvetlím postup, treba sa registrovať a stiahnúť:&amp;nbsp;&lt;a href="http://crackmes.de/users/deurus/android_crackme04/" target="_blank"&gt;CrackMe04&lt;/a&gt;. Toto opisujem ako moje zmýšľanie pri riešení tohto crackme.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ako nástroje som použil:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;notepad++ &amp;nbsp;so svýraznovačom syntaxe (link na zvýraznovač&amp;nbsp;&lt;a href="http://androidcracking.blogspot.sk/2011/02/smali-syntax-highlighting-for-notepad.html" target="_blank"&gt;syntax highlight&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apktool, ktorý slúži na reverzne inžinierstvo súborov apk, link &lt;a href="https://ibotpeaches.github.io/Apktool/" target="_blank"&gt;Apktool&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;decompilér &lt;a href="https://www.pnfsoftware.com/" target="_blank"&gt;JEB&lt;/a&gt;, použil som demo verziu.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ako prvé som nahral
apliká&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;ciu do mobilu (pri malware rad&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;šej do virtuálneho stroja AVD&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;). Pozrel som ako vyzerá,
zistil som, že má tri obrazovky (Activity).&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman', serif;"&gt;Samotné apk som prešiel cez apktool:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span style="font-family: 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: 'Times New Roman', serif; font-size: 11pt; line-height: 115%;"&gt;java -jar apktool d AndroidCrackme.apk -o CrackMe&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: 'Times New Roman', serif; font-size: 11pt; line-height: 115%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: 'Times New Roman', serif; font-size: 11pt; line-height: 115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif;"&gt;Pozrel som si&lt;/span&gt;&lt;span lang="DE" style="font-family: 'Times New Roman', serif;"&gt;
verziu a VersionName aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif;"&gt;ácie
(netradičné hodnoty). Pozrel som si certifiká&lt;/span&gt;&lt;span lang="EN-US" style="font-family: 'Times New Roman', serif;"&gt;t:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"&gt;
&lt;span lang="EN-US" style="font-family: 'Times New Roman', serif;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;keytool.exe -printcert -jarfile AndroidCrackme04.apk&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrwTZxXkBqhXdQoZOgB_ptuHqygtwvJ8hxuCRsUQV6NQ9j_ECnwgTXI5N0CJUsLnzePij6Y6NRYZCDYlRAKhBFDbHUSOHWkUc95H8e34uUzxsInxfMCRdvIoSX_dfPws-jwM71h_It21o/s1600/report1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrwTZxXkBqhXdQoZOgB_ptuHqygtwvJ8hxuCRsUQV6NQ9j_ECnwgTXI5N0CJUsLnzePij6Y6NRYZCDYlRAKhBFDbHUSOHWkUc95H8e34uUzxsInxfMCRdvIoSX_dfPws-jwM71h_It21o/s400/report1.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.1 Certifikát aplikácie&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Otvoril som manifest a
pozrel som štruktúru aplikácie. Jeden vstupný &lt;/span&gt;&lt;span lang="PT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: PT;"&gt;bod do aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ácie je súbor &lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;Splash
&lt;/span&gt;&lt;/i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;a
niekoľko povolení ako čítanie pamäťovej karty, stav WIFI, Bluetooth.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj43BbxKXqBC3Cn4nZrNqXOJqCLl_CjPUeuBR5bwZhx8RIen-zaEWxNVACxnLktNDuD9Zm_SZMGOXal-oQVIZ7XiJBKHXen2eBwA0MbA9amzgfas9Pko1GG6xWt_KA1fu9a4hbRRr9KC1Y/s1600/report2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj43BbxKXqBC3Cn4nZrNqXOJqCLl_CjPUeuBR5bwZhx8RIen-zaEWxNVACxnLktNDuD9Zm_SZMGOXal-oQVIZ7XiJBKHXen2eBwA0MbA9amzgfas9Pko1GG6xWt_KA1fu9a4hbRRr9KC1Y/s400/report2.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: 12.8px;"&gt;&lt;/span&gt;Obr.2 Manifest.xml aplikácie&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Pozrel som na štruktúru
adresárov a súborov. V zdrojových súboroch som v adresári Raw našiel zvukové
súbory. Pozrel som ešte layouty ako vyzerajú. Z názvov súborov je jasné, že je
použitá obfukácia kódu. &amp;nbsp;&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif;"&gt;Dal som si vypísať
reťazce vo všetkých smali sú&lt;/span&gt;&lt;span lang="SV" style="font-family: 'Times New Roman', serif;"&gt;boroch:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;

&lt;/span&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;findstr /i /n "const-string" *.smali&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Z výpisu som nemohol nič
užitočné vyčítať. Otvoril som si teda súbor Splash.smali v notepad++.&amp;nbsp; Keďže je to aktvita (Activity), tak vstupným
bodom do nej je metó&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;da onCreate&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;, ale hľadal som aj onResume a onStart (tie sa ale v
tomto sú&lt;/span&gt;&lt;span lang="DE" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: DE;"&gt;bore nenach&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ádzajú).
V metó&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;de onCreate vlo&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ží &lt;/span&gt;&lt;span lang="IT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: IT;"&gt;do premenn&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ý&lt;/span&gt;&lt;span lang="PT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: PT;"&gt;ch
b="classes.dex" (s&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ú&lt;/span&gt;&lt;span lang="DE" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: DE;"&gt;bor
nach&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ádzajúci
sa v AndroidCrackme04.apk, teda dalvik kód celej aplikácie) ,
c="cr4.dat", d="MD5" (pre použitie hashovania). Potom
zavolá metódu a()V, kde kontroluje to, č&lt;/span&gt;&lt;span lang="PT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: PT;"&gt;i aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ácia bola upravená. Tam som
našiel túto podmienku, ktorú stačí iba zmeniť na opačnú (viď. zakomentovaný kód
a pod ním nekomentovaný kód).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHuLWi8N-cK4oWv0Xdwbj4WDt-9WSgG8MOOu71TH27uSpznnSvG8SOhyphenhyphent2JvzqOi5OLEZl7R0j397FkO2aX6o1z8OKVs27N1rP5ecjEpMfzdIKD9lq8vnEvrvgbByGKW8I-EU0GHIX4Ec/s1600/report3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHuLWi8N-cK4oWv0Xdwbj4WDt-9WSgG8MOOu71TH27uSpznnSvG8SOhyphenhyphent2JvzqOi5OLEZl7R0j397FkO2aX6o1z8OKVs27N1rP5ecjEpMfzdIKD9lq8vnEvrvgbByGKW8I-EU0GHIX4Ec/s400/report3.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.3 Nájdena ochrana&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ok, to je ochrana
aplikácie proti zmene v kóde(patchovaniu). Aktivita Splash nakoniec spustí nový&amp;nbsp;&lt;/span&gt;&lt;span lang="DE" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: DE;"&gt;Handle, ktorá bude aktivita CrackMe a seba ukon&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;čí. V CrackMe aktivite je znova vstupom, len
onCreate metóda. Pozrel som aj ostatné metódy, čo robia ako &lt;b&gt;&lt;i&gt;a(Landroid/content/Context;)Ljava/lang/String;
&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;&amp;nbsp;vr&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;áti &lt;/span&gt;&lt;i&gt;&lt;span lang="DE" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: DE;"&gt;VersionName&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;b&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;b(Landroid/content/Context;)I
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;vráti
Verziu aplikácie. Znova metó&lt;/span&gt;&lt;span lang="RU" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: RU;"&gt;da&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;d()V&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;, kde je ochrana proti
patchovaniu aplikácie, na konci som upravil podmienku tak, aby prešla
opatchovaná aplikácia. Metóda &lt;b&gt;&lt;i&gt;a()Ljava/lang/String; &lt;/i&gt;&lt;/b&gt;&amp;nbsp;číta CID karty, teda jej ID. Ostatne metódy
robili úpravy s údajmi, ktoré dostali ako napr. odstránenie znaku ":"
z MAC adresy a pod..&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span lang="FR" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;Zameral som sa teda na Metódu onCreate, kde je
nakoniec algoritmus na overovanie Mena, Serial kľúča. Neštudoval som ho do
detailov. V metóde ale vidím, ž&lt;/span&gt;&lt;span lang="PT" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;e aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;ácia získava MAC adresu wifi&amp;nbsp;&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;karty, adresu bluetooth karty, ale aj ID SD karty, ktoré &lt;/span&gt;&lt;span lang="EN-US" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;spacu&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;váva. Našiel som ale toto viď. obrázok obr.4, porovanie sé&lt;/span&gt;&lt;span lang="IT" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;riov&lt;/span&gt;&lt;span lang="FR" style="font-family: 'Times New Roman', serif; line-height: 115%;"&gt;ého čísla, tak som zmenil podmienku, čo bola kontrola zadaného sériového čísla.&lt;/span&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkp3Kk7SGylcuJd-bmsUKdxNyM64CO2O7xtPHQ0xVnu7SJdvmeQi9rkvyHIVc4SyZAT9aSXlbj27oy1GOYpdmkxpgj9d4c9ErHAZEG9rTGYnSJaIecy2bSp4R_STJTFRpClvs8h9EoOI/s1600/report4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkp3Kk7SGylcuJd-bmsUKdxNyM64CO2O7xtPHQ0xVnu7SJdvmeQi9rkvyHIVc4SyZAT9aSXlbj27oy1GOYpdmkxpgj9d4c9ErHAZEG9rTGYnSJaIecy2bSp4R_STJTFRpClvs8h9EoOI/s400/report4.png" width="377" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.4 Druhá časť overenia&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Nakoniec som uložil
zmeny, zabalil aplikáciu znova pomocou apktool:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;java -jar apktool.jar b Eset -o AndroidCrackme_TEST.apk&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span lang="NL" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: NL;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ešte som podpí&lt;/span&gt;&lt;span lang="PT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: PT;"&gt;sal
aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;áciu:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1
-keystore [moj keystroke]&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; text-align: center;"&gt;
&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;[AndroidCrackme_TEST.apk] alias_nam&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Ohľadom nástroja JEB,
nemám licenciu a mohol som použiť len demo, takže niektoré metódy neboli
dekompilované, tak som kontroloval a porovnával smali kód s JEB aplikáciu. Ak toto používate, tak máte ľahšiu analý&lt;/span&gt;&lt;span lang="DE" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: DE;"&gt;zu&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;,&amp;nbsp; čo je veľmi dobré, a teda je jednoduchšie
robiť analýzu v jave.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Vyjadrenie na zá&lt;/span&gt;&lt;span lang="PT" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; mso-ansi-language: PT;"&gt;ver,
aplik&lt;/span&gt;&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;ácia
obsahuje aj prehrávač hudby &lt;i&gt;AndModPlug&lt;/i&gt; od Peculiar Games, do projektu sa
dostane v podobe knižnice.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman', serif;"&gt;Autor tohto cracku
vytvoril viacej druhov cracku, ako pre desktopy, tak pre android.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm;"&gt;
&lt;span lang="FR" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrwTZxXkBqhXdQoZOgB_ptuHqygtwvJ8hxuCRsUQV6NQ9j_ECnwgTXI5N0CJUsLnzePij6Y6NRYZCDYlRAKhBFDbHUSOHWkUc95H8e34uUzxsInxfMCRdvIoSX_dfPws-jwM71h_It21o/s72-c/report1.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Keď niečo nefunguje v SharePointe - Get-SPLogEvent</title><link>http://vartech.blogspot.com/2015/09/ked-nieco-nefunguje-v-sharepointe-get.html</link><category>get-splogevent</category><category>logy</category><category>powershell</category><category>sharepoint</category><category>sharepoint 2013</category><category>snappin</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Sat, 19 Sep 2015 08:11:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-2771062257679803550</guid><description>&lt;div style="text-align: justify;"&gt;
Utilita Get-SPLogEvent je užitočná pre SharePoint Administrátorov, ale aj programátorov. Štandardne je zabudovaná v SharePoint-e ako súčasť SharePoint snappin. Slúži na zobrazovanie a vyhľadávanie v diagnostických logoch, čo vytvorí SharePoint. Na jej použitie ju treba zaviesť do PowerShell sessiony ako snappin. Dá sa to dvoma spôsobmi, a to automaticky, keď spustíme z Ponuky Štart&amp;gt;All Programs&amp;gt;Microsoft SharePoint 2013 Products&amp;gt;SharePoint 2013 Management Shell, čo je najjednoduchšia varianta viď. obr.1.&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitUn2qeLSwXvTwn2zVWGiLkShaW6x11PuJYzCH7BNS2w1OtR2T0GACl-YSqu3f2QyQNGKjtz_DbdlYJwWnK267izGv80PwpjIpfivPurJsjBuIlx01oIWAu5xxzPDVNWdBo46hKWHyqhU/s1600/Start-SharePoint.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="335" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitUn2qeLSwXvTwn2zVWGiLkShaW6x11PuJYzCH7BNS2w1OtR2T0GACl-YSqu3f2QyQNGKjtz_DbdlYJwWnK267izGv80PwpjIpfivPurJsjBuIlx01oIWAu5xxzPDVNWdBo46hKWHyqhU/s400/Start-SharePoint.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.1 Ponuka Štart pre výber SharePoint 2013 Management Shell&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Alebo snappin zavedieme manuálne, ale najprv musíme vedieť, ako máme zaregistrovaný snappin v systéme, na to pomôže riadok v PoweSshell-y, jeho výpis vidieť na obr.2:&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-pssnapping -registered&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbKRBDxXAUpu_WqyPHfkBvTr3qTl5wggKflhj9sJ_K0Bkek8RSguiTbD2NbEW083eLJGAAMRWq5fjJycNGCmYgZh5mkHKgl-W6G-kdXZqFyf1DwO4A5i6bi-UqViMrMZGofRIzsWR588/s1600/get-pssnappin.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbKRBDxXAUpu_WqyPHfkBvTr3qTl5wggKflhj9sJ_K0Bkek8RSguiTbD2NbEW083eLJGAAMRWq5fjJycNGCmYgZh5mkHKgl-W6G-kdXZqFyf1DwO4A5i6bi-UqViMrMZGofRIzsWR588/s400/get-pssnappin.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr. 2 get-pssnappin&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Po obhliadnutí zaregistrovaných snappinov vidieť, že máme SharePoint snappin pod menom &lt;i&gt;Microsoft.SharePoint.PowerShell &lt;/i&gt;&amp;nbsp;v systéme ho môžme zaviesť do sessionu pomocou cmdletu:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;add-spsnappin -name Microsoft.SharePoint.PowerShell&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Keďže používam na serveri PowerShell v spojení so SharePoint-om, tak som si pridal do profilu PowerShell-u predchádzajúci cmdlet, aby sa mi zaviedol SharePoint snappin vždy po otvorení PowerShell-u. Po zavedení snappinu môžme používať všetky cmdlety určené pre SharePoint. Nás ale zaujíma Get-SPLogEvent. Samotný cmdlet bez parametrov zobrazí všetky logy. Ok, ale výhoda utility nespočíva v tom, že môžme si zobraziť všetky logy, ale v tom, že môžme filtrovať na základe určitých parametrov v logoch. &amp;nbsp;Pozrime sa na nápovedu od cmdletu, obr.3.&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-help get-splogevent&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
alebo skrátená verzia&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;help get-splogevent&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE8rp_OCMrCbY69CcTxORA5Yhpf5sG8S8Dcghq2MoWFg5iJznmCIlG0A58qfM3ecvzNpXTPSX0t0VBueKu1MKGifw7g1EeZ5fmgJ3V-GW4i1k6sFydSvY9pCbAYxJQF4WchDNUITB0dx0/s1600/get-spLogEvent-Help.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE8rp_OCMrCbY69CcTxORA5Yhpf5sG8S8Dcghq2MoWFg5iJznmCIlG0A58qfM3ecvzNpXTPSX0t0VBueKu1MKGifw7g1EeZ5fmgJ3V-GW4i1k6sFydSvY9pCbAYxJQF4WchDNUITB0dx0/s400/get-spLogEvent-Help.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.3 Nápoveda alebo manuálová stránka pre get-splogevent&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Vidieť je niekoľko užitočných parametrov ako Directory, EndTime, StartTime, MinimumLevel. Príklady použitia si môžme pozrieť aj v nápovede, aby sme videli len priklady stačí uviesť cmdlet:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;help get-splogevent -examples&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Výstup príkazu je vidieť na obr.4.&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqo4b1DaFKUULyz81PKIB2pZpcyJ3FkR2SsJS_VQXik-HNCMLV4dmUv4VFs42n9jwYmEaoEexAuoDfBZbnp7aJGxWEm5xlrjvA7MmyPLmkLgKG3tYCbJIqv2CYYaqPxStNq6EM-HUIWI/s1600/get-splogevent-examples.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqo4b1DaFKUULyz81PKIB2pZpcyJ3FkR2SsJS_VQXik-HNCMLV4dmUv4VFs42n9jwYmEaoEexAuoDfBZbnp7aJGxWEm5xlrjvA7MmyPLmkLgKG3tYCbJIqv2CYYaqPxStNq6EM-HUIWI/s400/get-splogevent-examples.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.4 Príklady použitia get-splogevent&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
Ok, to sú už menšie možnosti filtrovania, ale stále to nie je všetko a ani postačujúce. Čo tak filtrácia na základe Correlation, Category alebo Area, resp. iných v logu obsiahnutých informácií. Tým, že je PowerShell objektovo orientované skriptovacie prostredie, tak máme širšie možnosti práce s údajmi z príslušných cmdlet-ov. Pozrime na členov get-splogevent cez príkaz, viď. obr.5:&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-splogevent | get-members&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkcyDqZTPN5-ISCUNC9mwQbBltqilJwCQidAZcMwcXWpF03l43qDH_5YAA1vpzfSimFSIX1mzQGf0oxbfBO4xZFhb3lPCUilo3iSZiIb6eWzP67iWOLLsn2DdCY7FqorZVdkxvaNtkG8o/s1600/Get-SPLogEvent-members.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkcyDqZTPN5-ISCUNC9mwQbBltqilJwCQidAZcMwcXWpF03l43qDH_5YAA1vpzfSimFSIX1mzQGf0oxbfBO4xZFhb3lPCUilo3iSZiIb6eWzP67iWOLLsn2DdCY7FqorZVdkxvaNtkG8o/s400/Get-SPLogEvent-members.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.5 Členovia cmdlet-u Get-SPLogEvent&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Na základe určitého Correlation vieme získať potrebný výstup:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-splogevent | where-object {$_.Correlation -eq '79012b9d-692f-f014-a228-52715da5e838'}&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
alebo získať všetky chyby úrovne Critical:&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-splogevent | where {$_.Level -eq 'Critical'}&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Čo tak zobraziť ako výstup iba potrebné informácie ako message, category všetkých chýb úrovne critical:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-splogevent | where {$_.Level -eq 'Critical'} | select-object Message,Category&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Môžme kombinovať vlastnosti a vytvárať tak zložitejšie filtre. Za pomoci ďalších cmdlet-ov ako Where-Object, Select-Object, Format-List, Format-Table a ďalších vieme pekne dolovať informácie z logov a následne si ich zobraziť v PowerShell-y.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
SharePoint obsahuje veľké množstvo cmdlet-ov a v priebehu následujúcich článkov ich bližšie predstavím. Koľko ich je a ktoré to sú, si môžme pozrieť pomocou:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;get-command -module Microsoft.SharePoint.PowerShell&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitUn2qeLSwXvTwn2zVWGiLkShaW6x11PuJYzCH7BNS2w1OtR2T0GACl-YSqu3f2QyQNGKjtz_DbdlYJwWnK267izGv80PwpjIpfivPurJsjBuIlx01oIWAu5xxzPDVNWdBo46hKWHyqhU/s72-c/Start-SharePoint.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Keď niečo nefunguje v SharePointe</title><link>http://vartech.blogspot.com/2015/08/ked-nieco-nefunguje-v-sharepointe.html</link><category>diagnostic</category><category>error</category><category>logging</category><category>powershell</category><category>sharepoint</category><category>sharepoint 2013</category><category>uls</category><author>noreply@blogger.com (Various Technologies)</author><pubDate>Sat, 15 Aug 2015 05:00:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-2025207758081341283.post-4120666999498603592</guid><description>&lt;span style="font-size: small;"&gt;Osobne nemám so SharePointom 2013 skúsenosti. V práci som sa podujal ako jediný získať znalosti zo SharePoint-u ako vývojar. Čo to obnáša, som si úplne neuvedomil. Prechod od vývojára mobilných zariadení so systémom Android k platforme SharePoint je obrovský skok. A to musím povedať, že mám skúsenosti aj s platformou Net Framework.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;V IT oddelení som požiadal kolegov, aby mi zriadili dedikovaný server na vývoj pre SharePoint 2013, s Windows Server-o. Dali mi prístupy a zvyšok nechali na mňa. Pochopiteľne som im povedal s akými parametrami chcem mať server. Aké požiadavky treba si nájdete na stránkach Technet-u Microsoftu viď. link:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="https://technet.microsoft.com/en-us/library/cc262485.aspx"&gt;https://technet.microsoft.com/en-us/library/cc262485.aspx&lt;/a&gt; .&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Po stiahnutí inštalácie SharePoint 2013, som okamžite začal inštalovať. Po inštalácií rýchla obhliadka. Vidím SharePoint beží na dvoch portoch a to 80 a druhý je náhodne vygenerované 5 miestne číslo, kde beží SharePoint Central Administration. Po inštalácií vytvorí odkaz v ponuke Štart na Central Administratin. Pre riešenie niektorých problémov budeme potrebovať práve Central Administration. Po obhliadke som doinštaloval Visual Studio 2013 a mohol som začať kódiť. Po vytvorení jednoduchého projektu následnom deploynutí vytvorenej aplikácie nastala chyba inštalácie, o ktorej som ani s&amp;nbsp; popisu v SharePoint nič nevedel(SharePoint v chybovej hláške ma odkázal na diagnostické logy). Aké logy, kde uložené? Po kratšiom googlení som zistil, že SharePoint má ULS (Unified Logging Service). Otvoril som si teda Central Administration, obr.1.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsYxWUuW4DUfmATAEE5f8JR3pW1hS-z8JXhON3mAd4JnC-rs7KBTrOIKku9Nce8k-hgItc5WYUVsMML97yYoG6yfKKi8aHvlOau8SdGDHvmlHywnFJBW_I4OlJhI6gPNcMIbYn_YEyczk/s1600/Obr1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="149" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsYxWUuW4DUfmATAEE5f8JR3pW1hS-z8JXhON3mAd4JnC-rs7KBTrOIKku9Nce8k-hgItc5WYUVsMML97yYoG6yfKKi8aHvlOau8SdGDHvmlHywnFJBW_I4OlJhI6gPNcMIbYn_YEyczk/s320/Obr1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.1. Central Administration Main page&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt; V sekcii Monitoring obr.2 som vošiel do "Configure diagnostic logging", obr.2 a obr3.&lt;/span&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOqRB6dD0Wi0IvqjOVWGKe2w0a5czy8_kuuGbgDCEGWib7qznyA7vCprQuO2BtpfruJjNq1nhNt3HDIUVFmxdVDI16rPaj3wrrrqzwjHtXg6aJ9sOLWHSoHVHC6X0nIXXAul3ijl26BnY/s1600/Obr2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOqRB6dD0Wi0IvqjOVWGKe2w0a5czy8_kuuGbgDCEGWib7qznyA7vCprQuO2BtpfruJjNq1nhNt3HDIUVFmxdVDI16rPaj3wrrrqzwjHtXg6aJ9sOLWHSoHVHC6X0nIXXAul3ijl26BnY/s320/Obr2.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.2. Monitoring&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9twSQztm7aqrEywplekWiwvkXD6QGw8228ChxGpKp3Zmn7UHgDX91OaDterUggSkgYUoNHGeNo6-f6BWp0KCZoKHx4Syif8IwvtEeK4RG_U2Eq9x3kK73eQMdOa5aCZMB-VknjQUv-DY/s1600/Obr3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9twSQztm7aqrEywplekWiwvkXD6QGw8228ChxGpKp3Zmn7UHgDX91OaDterUggSkgYUoNHGeNo6-f6BWp0KCZoKHx4Syif8IwvtEeK4RG_U2Eq9x3kK73eQMdOa5aCZMB-VknjQUv-DY/s320/Obr3.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.3. Diagnostic Logging časť1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPQg9H8HHNqK1KTAljynX_6qTkRvECi9_mRWtCOc65Z9OpgpQ58l8kz0TEPr7CBXFmUaZzp9AUwF8amdBbAenO5C7gZmaPVUU-Jad3GXuiBR4qyV3ece-MyWhsxNh6a83UJ2LuiTFUm9s/s1600/Obr4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPQg9H8HHNqK1KTAljynX_6qTkRvECi9_mRWtCOc65Z9OpgpQ58l8kz0TEPr7CBXFmUaZzp9AUwF8amdBbAenO5C7gZmaPVUU-Jad3GXuiBR4qyV3ece-MyWhsxNh6a83UJ2LuiTFUm9s/s320/Obr4.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obr.4. Diagnosti Logging časť 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5JHIkpgsmxbXGJDf5m8YYf1eFlcmqC80ymZnIiWPsEAUfxrnyYt_jCQX_-8xDqUwoBHigYeLI0mthT76Vi0FY7-KRb82K1685qHZYRbxCwsbplGitIiw2D8vWnwP66Pj6SXt_rvPxSEc/s1600/Obr4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="font-size: small;"&gt;V Diagnostic Logging som zaškrtol všetky možnosti,&amp;nbsp; aby som vedel, čo sa deje, vyplnil údaje o ceste, kde bude logy ukladať a potvrdil. Pre bližšie info ohľadom&amp;nbsp; nastavení na obrazovke Diagnostic Logging je dobré si pozrieť web technet microsoftu, viď. link:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="https://technet.microsoft.com/en-us/library/ee748656.aspx"&gt;https://technet.microsoft.com/en-us/library/ee748656.aspx&lt;/a&gt; .&lt;br /&gt;Po konfigurácií logov začne SharePoint automaticky vytvárať logy. Za krátky čas dokáže vytvoriť SharePoint veľké množstvo logov. Na ich prezeranie má ShrarePoint zabudovaný PowerShell nástroj Get-SPLogEvent.&amp;nbsp; Jednoduchý návod na prácu s nástrojom:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="https://technet.microsoft.com/en-us/library/ff463595.aspx"&gt;https://technet.microsoft.com/en-us/library/ff463595.aspx&lt;/a&gt; .&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp;Na prezeranie logov v GUI je tu nástroj z produkcie Microsoftu:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=44020"&gt;http://www.microsoft.com/en-us/download/details.aspx?id=44020&lt;/a&gt; .&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Ja osobne som použil nástroj pre GUI na prvotné zoznámenie. Po krátkej prehliadke som zistil, že nemám nakonfigurovanú aplikačnú doménu, pod ktorou bude bežať aplikácia. Ok, znova som použil google na vyhľadanie&amp;nbsp; riešenia (google je ale pomocník čo?).&amp;nbsp; V tomto prípade tu mám dva články:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="http://sharepointchick.com/archive/0001/01/01/setting-up-your-app-domain-for-sharepoint-2013.aspx"&gt;http://sharepointchick.com/archive/0001/01/01/setting-up-your-app-domain-for-sharepoint-2013.aspx&lt;/a&gt;&amp;nbsp; &lt;/span&gt;a &lt;span style="font-size: small;"&gt;&lt;a href="https://technet.microsoft.com/en-us/library/fp161236.aspx"&gt;https://technet.microsoft.com/en-us/library/fp161236.aspx&lt;/a&gt; .&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;V oboch sú informácie, prečo treba App Domain pre aplikácie v SharePointe.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Záverom spomeniem, že ULS môžu využiť vývojári a nemusia vyvíjať vlastné riešenie, ale môžu použiť existujúce. Ako sa to robí, to napíšem nabudúce. Ešte podotknem, že treba byť opatrný pri prezeraní logov, ako cez powershell, tak cez GUI aplikáciu. Ak máte menšiu RAM (ja mám 8 GB), tak spustené služby SharePointu a ďalšie zaberú značnú ram. Po otvorení väčšieho množstva logov v GUI nástroji, môže zahltiť ram a nemusíte sa dopracovať k ničomu. Podobné to je aj pri powershell nástroji. Cez GUI odporúčam otvoriť menšie množstvo logov, prezrieť ich a znova otvoriť ďalšie menšie množstvo logov a prezrieť ich. Pri powershell nástroji zase odporúčam zapnúť filtráciu a pozor na použitie nástroja "more" v powershelli.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsYxWUuW4DUfmATAEE5f8JR3pW1hS-z8JXhON3mAd4JnC-rs7KBTrOIKku9Nce8k-hgItc5WYUVsMML97yYoG6yfKKi8aHvlOau8SdGDHvmlHywnFJBW_I4OlJhI6gPNcMIbYn_YEyczk/s72-c/Obr1.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>