Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
colocvii:colocviu02 [2015/05/16 21:28]
Andrei Roșu-Cojocaru
colocvii:colocviu02 [2016/05/16 11:25] (current)
Andrei Roșu-Cojocaru
Line 7: Line 7:
 </​HTML>​ </​HTML>​
  
-{{url>​http://​pdsd2015.andreirosucojocaru.ro/​_media/​colocvii/​colocviu02/​pdsd2015-tp02-varsim.pdf 90%,800px}}+{{url>​http://​eim2016.andreirosucojocaru.ro/​_media/​colocvii/​colocviu02/​eim2016-tp02-varsim.pdf 90%,800px}}
  
 <​HTML>​ <​HTML>​
Line 13: Line 13:
 </​HTML>​ </​HTML>​
  
-{{ colocvii:​colocviu02:​pdsd2015-tp02-varsim.pdf }}+{{ :colocvii:​colocviu02:​eim2016-tp02-varsim.pdf }}
  
 ===== Observații Generale ===== ===== Observații Generale =====
Line 20: Line 20:
   * un cont Github personal, pe care să existe drepturi de citire și de scriere;   * un cont Github personal, pe care să existe drepturi de citire și de scriere;
   * SDK-ul de Android (cu o imagine pentru nivelul de API 16 - Jelly Bean 4.1);   * SDK-ul de Android (cu o imagine pentru nivelul de API 16 - Jelly Bean 4.1);
-  * mediul de dezvoltare integrat Eclipse, împreună cu plugin-ul Android Developer Tools;+  * mediul de dezvoltare integrat ​Android Studio sau Eclipse, împreună cu plugin-ul Android Developer Tools;
   * un dispozitiv mobil:   * un dispozitiv mobil:
     * fizic (bring your own device);     * fizic (bring your own device);
     * virtual: Genymotion, AVD.     * virtual: Genymotion, AVD.
  
 +<​hidden>​
 <note important>​În situația în care lucrați pe calculatoarele din laboratorul Ixia (EG106) este recomandat să folosiți: <note important>​În situația în care lucrați pe calculatoarele din laboratorul Ixia (EG106) este recomandat să folosiți:
   * fluxbox ca utilitar pentru gestiunea ferestrelor (se alege din interfața de autentificare); ​   * fluxbox ca utilitar pentru gestiunea ferestrelor (se alege din interfața de autentificare); ​
   * epiphany pentru navigare Internet.   * epiphany pentru navigare Internet.
 Este de preferat să nu se depășească memoria disponibilă,​ întrucât comportamentul acestor mașini este imprevizibil în momentul în care se folosește swap-ul (se blochează, fără posibilitatea de recuperare din eroare).</​note>​ Este de preferat să nu se depășească memoria disponibilă,​ întrucât comportamentul acestor mașini este imprevizibil în momentul în care se folosește swap-ul (se blochează, fără posibilitatea de recuperare din eroare).</​note>​
 +</​hidden>​
  
-În situația în care este necesară procesarea codului sursă (în format HTML) al paginii Internet furnizat ca răspuns la cererea transmisă către un serviciu web, se poate folosi [[http://​jsoup.org/​packages/​jsoup-1.8.2.jar|biblioteca Jsoup]]. Integrarea sa în mediul integrat pentru dezvoltare Eclipse ​Luna SR1a (4.4.1) se face prin plasarea fișierului corespunzător în directorul //libs// al proiectului. Acesta devine vizibil în momentul în care se accesează operația //Refresh// din meniul contextual, disponibilă și prin tasta //F5//. Ulterior, pentru a fi inclus în classpath, este necesar ca din meniul contextual asociat fișierului ''​jsoup-1.8.2.jar''​ (disponibil pe butonul drept al mouse-ului) să se acceseze //Build Path// → //Add to Build Path//.+În situația în care este necesară procesarea codului sursă (în format HTML) al paginii Internet furnizat ca răspuns la cererea transmisă către un serviciu web, se poate folosi [[http://​jsoup.org/​packages/​jsoup-1.9.1.jar|biblioteca Jsoup]]. 
 + 
 +Integrarea sa în mediul integrat pentru dezvoltare ​**Android Studio 1.5.1** se face prin plasarea fișierului corespunzător în directorul //libs// al proiectului. Ulterior, din meniul contextual al aplicației Android (accesibil prin click dreapta) se accesează opțiunea //Open Module Settings// sau se apasă tasta F4. 
 + 
 +{{ :​colocvii:​colocviu02:​androidstudio_library01.png?​nolink }} 
 + 
 +În fereastra //Project Structure// se apasă tasta //+// pentru a se specifica un modul nou. 
 + 
 +{{ :​colocvii:​colocviu02:​androidstudio_library02.png?​nolink&​600 }} 
 + 
 +În fereastra //Create New Module// se indică tipul de modul //Import .JAR/.AAR Package//​. 
 + 
 +{{ :​colocvii:​colocviu02:​androidstudio_library03.png?​nolink&​600 }} 
 + 
 +Se precizează:​ 
 +  * locația la care se găsește biblioteca ce va fi importată sub formă de modul; 
 +  * denumirea subproiectului din care va face parte modulul; 
 + 
 +{{ :​colocvii:​colocviu02:​androidstudio_library04.png?​nolink&​600 }} 
 + 
 +După ce biblioteca a fost integrată în cadrul mediului integrat pentru dezvoltare Android Studio 1.5.1, aceasta va putea fi vizualizată în fereastra //Project Structure//​. 
 + 
 +{{ :​colocvii:​colocviu02:​androidstudio_library05.png?​nolink&​600 }} 
 + 
 +Integrarea sa în mediul integrat pentru dezvoltare **Eclipse ​Mars 1 (4.5.1)** se face prin plasarea fișierului corespunzător în directorul //libs// al proiectului. Acesta devine vizibil în momentul în care se accesează operația //Refresh// din meniul contextual, disponibilă și prin tasta //F5//. Ulterior, pentru a fi inclus în classpath, este necesar ca din meniul contextual asociat fișierului ''​jsoup-1.9.1.jar''​ (disponibil pe butonul drept al mouse-ului) să se acceseze //Build Path// → //Add to Build Path//.
  
 {{ :​colocvii:​colocviu02:​eclipse_library01.png?​nolink }} {{ :​colocvii:​colocviu02:​eclipse_library01.png?​nolink }}
  
-După ce biblioteca a fost integrată în cadrul mediului integrat pentru dezvoltare Eclipse ​Luna SR1a (4.4.1), aceasta va putea fi vizualizată în secțiunea //​Referenced Libraries// din proiectul corespunzător.+După ce biblioteca a fost integrată în cadrul mediului integrat pentru dezvoltare Eclipse ​Mars 1 (4.5.1), aceasta va putea fi vizualizată în secțiunea //​Referenced Libraries// din proiectul corespunzător.
  
 {{ :​colocvii:​colocviu02:​eclipse_library02.png?​nolink }} {{ :​colocvii:​colocviu02:​eclipse_library02.png?​nolink }}
Line 42: Line 68:
 ===== Rezolvări ===== ===== Rezolvări =====
  
-Proiectul ​Eclipse corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului ​este disponibil ​pe [[https://​github.com/​pdsd2015/​PracticalTest02|contul de Github al disciplinei]].+Proiectele Android Studio și Eclipse corespunzătoare aplicației Android ce conține rezolvările complete ale cerințelor colocviului ​sunt disponibile ​pe [[https://​github.com/​eim2016/​PracticalTest02|contul de Github al disciplinei]].
  
 **1.** Se accesează [[https://​www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. **1.** Se accesează [[https://​www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//.
Line 70: Line 96:
  
 <​code>​ <​code>​
-student@pdsd2015:~$ git clone https://​www.github.com/​perfectstudent/​PracticalTest02+student@eim2016:~$ git clone https://​www.github.com/​perfectstudent/​PracticalTest02
 </​code>​ </​code>​
  
-**3.** Se urmăresc indicațiile disponibile în secțiunea [[:laboratoare:​laborator01#​crearea_unei_aplicatii_android_in_eclipse_luna_sr1a_441_-_obligatoriu|Crearea unei aplicații Android în Eclipse ​Luna SR1a (4.4.1)]].+**3.** Se urmăresc indicațiile disponibile în secțiunea [[laboratoare:​laborator01#​crearea_unei_aplicatii_android_in_eclipse_mars_1_451_-_obligatoriu|Crearea unei aplicații Android în Eclipse ​Mars 1 (4.5.1)]], respecti [[laboratoare:​laborator01#​crearea_unei_aplicatii_android_in_android_studio_151_-_obligatoriu|Crearea unei aplicații Android în Android Studio 1.5.1]].
  
 **4.** Pentru implementarea interfeței grafice, se vor defini controalele care asigură interacțiunea cu utilizatorul pentru fiecare dintre componentele aplicației Android: **4.** Pentru implementarea interfeței grafice, se vor defini controalele care asigură interacțiunea cu utilizatorul pentru fiecare dintre componentele aplicației Android:
Line 98: Line 124:
   android:​layout_height="​match_parent"​   android:​layout_height="​match_parent"​
   android:​orientation="​vertical"​   android:​orientation="​vertical"​
-  tools:​context="​ro.pub.cs.systems.pdsd.practicaltest02.graphicuserinterface.PracticalTest02MainActivity"​ >+  tools:​context="​ro.pub.cs.systems.eim.practicaltest02.graphicuserinterface.PracticalTest02MainActivity"​ >
  
   <​TextView   <​TextView
Line 370: Line 396:
   * în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță:   * în situația în care informațiile meteorologice nu se găsesc în obiectul gestionat de server, sunt preluate prin interogarea serviciului Internet, la distanță:
     * se realizează o cerere de tip ''​POST''​ la adresa Internet [[http://​www.wunderground.com/​cgi-bin/​findweather/​getForecast]];​ parametrul care trebuie precizat este ''​query''​ și are valoarea orașului pentru care se dorește să se obțină informațiile;​ acesta se atașează cererii de tip ''​POST'',​ folosind codificarea ''​UTF-8'';​     * se realizează o cerere de tip ''​POST''​ la adresa Internet [[http://​www.wunderground.com/​cgi-bin/​findweather/​getForecast]];​ parametrul care trebuie precizat este ''​query''​ și are valoarea orașului pentru care se dorește să se obțină informațiile;​ acesta se atașează cererii de tip ''​POST'',​ folosind codificarea ''​UTF-8'';​
-    * alternativ, se poate realiza o cerere de tip ''​GET''​ în care valoarea parametrului este inclusă în cadrul adresei Internet: [[http://​www.wunderground.com/​cgi-bin/​findweather/​getForecast?​query=...]]);​+    * alternativ, se poate realiza o cerere de tip ''​GET''​ în care valoarea parametrului este inclusă în cadrul adresei Internet: [[https://​www.wunderground.com/​cgi-bin/​findweather/​getForecast?​query=...]]);​
     * se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; ​     * se obține răspunsul sub forma unui șir de caractere, reprezentând codul sursă al paginii Internet; ​
     * folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html>     * folosind biblioteca Jsoup, se inspectează documentul în format HTML furnizat pentru a determina locația la care sunt disponibile informațiile necesare <code html>
Line 545: Line 571:
 } }
 </​code>​ </​code>​
 +
 +<note important>​În cazul în care se folosește Android Studio și este instalat un SDK corespunzător nivelului de API 23 în care a fost eliminat suportul pentru biblioteca Apache HTTP Components, este necesar ca în fișierul build.gradle din directorul ''​app''​ al aplicației Android să se precizeze explicit folosirea acesteia (denumirea sa este ''​org.apache.http.legacy''​).
 +
 +<file gradle build.gradle>​
 +...
 +android {
 +  compileSdkVersion 23
 +  buildToolsVersion "​23.0.2"​
 +
 +  defaultConfig {
 +    applicationId "​ro.pub.cs.systems.eim.practicaltest02"​
 +    minSdkVersion 16
 +    targetSdkVersion 23
 +    versionCode 1
 +    versionName "​1.0"​
 +  }
 +  ​
 +  buildTypes {
 +    release {
 +      minifyEnabled false
 +      proguardFiles getDefaultProguardFile('​proguard-android.txt'​),​ '​proguard-rules.pro'​
 +    }
 +  }
 +
 +  useLibrary '​org.apache.http.legacy'​
 +}
 +...
 +</​file>​
 +</​note>​
  
 **6.** Implementarea clientului presupune un fir de execuție pe care sunt realizate următoarele operații: **6.** Implementarea clientului presupune un fir de execuție pe care sunt realizate următoarele operații:
Line 655: Line 710:
  
 <​code>​ <​code>​
-student@pdsd2015:~$ nc 192.168.56.101 5000+student@eim2016:~$ nc 192.168.56.101 5000
 Bucuresti Bucuresti
 all all
Line 668: Line 723:
  
 <​code>​ <​code>​
-C:\Users\Pdsd2015> telnet 192.168.56.101 5000+C:\Users\Eim2016> telnet 192.168.56.101 5000
 Bucuresti Bucuresti
 all all
Line 689: Line 744:
  
 <​code>​ <​code>​
-student@pdsd2015:​~/​PracticalTest02$ git add * +student@eim2016:​~/​PracticalTest02$ git add * 
-student@pdsd2015:​~/​PracticalTest02$ git commit -m "​finished tasks for PracticalTest02"​ +student@eim2016:​~/​PracticalTest02$ git commit -m "​finished tasks for PracticalTest02"​ 
-student@pdsd2015:​~/​PracticalTest02$ git push origin master+student@eim2016:​~/​PracticalTest02$ git push origin master
 </​code>​ </​code>​
  
Line 697: Line 752:
  
 <​code>​ <​code>​
-student@pdsd2015:​~/​PracticalTest02$ git config --global user.name "​Perfect Student"​ +student@eim2016:​~/​PracticalTest02$ git config --global user.name "​Perfect Student"​ 
-student@pdsd2015:​~/​PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro+student@eim2016:​~/​PracticalTest02$ git config --global user.email perfectstudent@cs.pub.ro
 </​code>​ </​code>​
  
-**8.** În situația în care un server de aplicații dorește să transmită un mesaj către un dispozitiv mobil prin intermediul serviciului Google Cloud Messaging, specificând în antetul ''​Authorization''​ al cererii o cheie publică ce nu este asociată numărului de proiect pe baza căruia a fost generat identificatorul de înregistrare transmis ca valoare a parametrului ''​registration_id'',​ respectiv ''​registration_ids'',​ răspunsul va fi ''​MismatchSenderId''​. Acesta indică faptul că utilizatorul respectiv nu are dreptul de a transmite notificări către dispozitivul mobil. În aceste condiții, notificarea nu va fi transmisă, acest lucru fiind precizat prin contorizarea sa în secțiunea ''​failure''​. +**8.** Înregistrarea unui serviciu în cadrul rețelei locale se face prin intermediul unor obiecte ''​NsdServiceInfo''​ (Android NSD) respectiv ''​ServiceInfo''​ (JmDNS). Acestea sunt transmise ca parametrii ai metodelor ''​registerService()''​ din clasele ''​NsdManager'',​ respectiv ''​JmDNS''​.
- +
-**9.** Înregistrarea unui serviciu în cadrul rețelei locale se face prin intermediul unor obiecte ''​NsdServiceInfo''​ (Android NSD) respectiv ''​ServiceInfo''​ (JmDNS). Acestea sunt transmise ca parametrii ai metodelor ''​registerService()''​ din clasele ''​NsdManager'',​ respectiv ''​JmDNS''​.+
  
 Aceste obiecte sunt caracterizate prin parametrii de conectare la serviciu: Aceste obiecte sunt caracterizate prin parametrii de conectare la serviciu:
Line 720: Line 773:
 } }
 </​code>​ </​code>​
 +
 +**9.** Protocolul SIP pornește de la o presupunere optimistă conform căreia atât sursa cât și destinația se găsesc în cadrul aceluiași sistem autonom, astfel încât nu sunt necesare credențiale pentru autentificare. Din acest model, o cerere de tip ''​REGISTER''​ se transmite inițial de către user agent fără aceste informații. În condițiile în care răspunsul furnizat de registration server este //Status: 401 Unauthorized//,​ mesajul este retransmis împreună cu informațiile necesare identificării (SIP Authorization ID, Password). Se poate observa că dimensiunile celor două pachete sunt diferite (mesajul fără credențiale 1095 octeți, mesajul cu credențiale 1249 octeți). În cazul în care informațiile de autentificare sunt valide, răspunsul va fi //Status: 200 OK//.
 +
 +{{ :​laboratoare:​laborator09:​wireshark01.png?​nolink&​800 }}
  
 **10.** Harta Google este implementată în SDK-ul Android: **10.** Harta Google este implementată în SDK-ul Android:
Line 731: Line 788:
 <code java> <code java>
 if (googleMap == null) { if (googleMap == null) {
-  ​if (googleMap == null) { +  ((MapFragment)getFragmentManager().findFragmentById(R.id.google_map)).getMapAsync(new OnMapReadyCallback() { 
-    ​((MapFragment)getFragmentManager().findFragmentById(R.id.google_map)).getMapAsync(new OnMapReadyCallback() { +    @Override 
-      @Override +    public void onMapReady(GoogleMap readyGoogleMap) { 
-      public void onMapReady(GoogleMap readyGoogleMap) { +      googleMap = readyGoogleMap;​ 
-        googleMap = readyGoogleMap;​ +    
-      +  });
-    }); +
-  }+
 } }
 </​code>​ </​code>​
colocvii/colocviu02.1431800921.txt.gz · Last modified: 2016/02/09 11:18 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0