Differences

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

Link to this comparison view

smd:laboratoare:01 [2020/02/22 21:23]
vasile.cosovanu Edit task 3.
smd:laboratoare:01 [2021/03/17 19:58] (current)
adriana.draghici
Line 1: Line 1:
 ===== Lab 01. Introduction ===== ===== Lab 01. Introduction =====
- 
  
 === Resources === === Resources ===
  
-  * Android Studio: ​[[https://​developer.android.com/​studio#top]] +  * [[https://​developer.android.com/​index.html|Android Developers Documentation]] 
-  * Android Developers: ​[[https://​developer.android.com/​index.html]] +  * [[https://​developer.android.com/​guide/​components/​activities/​activity-lifecycle|Android Application Lifecycle]]
- +
-=== Files === +
- +
-{{:​smd:​laboratoare:​loglevel.zip|}}+
  
 +**Prerequisites:​** [[smd:​laboratoare:​00|Lab 0: Setup github and your environment]]
  
-=== Task 0 Setting up the environment ===+The code skeleton used from task#3:  
 +  * [[https://​github.com/​SMD-UPB/labs| Github repository]] 
 +  * {{:​smd:​laboratoare:​loglevel.zip|}}
  
-To install Android Studio on your own machine follow the step here: [[https://​developer.android.com/​studio/​install|Install Android Studio]]. Android Studio should be already installed on the lab workstations. 
  
 === Task 1 - Create and run an application === === Task 1 - Create and run an application ===
  
-Create a new Android Project in Android Studio (**Start a new Android Studio Project**). In the first screen in the **Phone and Tablet** section, choose **Empty Activity**. Next choose a  **Name**. Set **Java** as language. And select **API level 21** or higher. Leave other options as they are and click **Finish**. On the sidebar on the left choose **Project** and open ** java > student.example.com > MainActivity**. This activity is very simple right now but is a fully functional Android application.+Create a new Android Project in Android Studio (**Start a new Android Studio Project**). In the first screen in the **Phone and Tablet** section, choose **Empty Activity**. On the sidebar on the left choose **Project** and open ** java > student.example.com > MainActivity**. This activity is very simple right now but is a fully functional Android application.
  
 Run the project by clicking the green arrow on the toolbar above the editing area, {{:​smd:​laboratoare:​run.png?​20|}}. Android Studio will prompt you to choose a device. Follow the steps in the next task to create a new virtual device. Run the project by clicking the green arrow on the toolbar above the editing area, {{:​smd:​laboratoare:​run.png?​20|}}. Android Studio will prompt you to choose a device. Follow the steps in the next task to create a new virtual device.
  
-=== Task 2 - Creating a virtual device ===+/*=== Task 2 - Creating a virtual device ===
  
 Create a virtual device: Create a virtual device:
Line 42: Line 39:
 ./​Android/​Sdk/​tools/​emulator -accel-check ./​Android/​Sdk/​tools/​emulator -accel-check
 </​code>​ </​code>​
 +*/
  
-=== Task - Add a button ===+=== Task - Add a button ===
  
 When the project has opened the //​MainActivity.java//​ file should be displayed. If not, open it using the **Package Explorer** pane. You will find it in the **src** folder. When the project has opened the //​MainActivity.java//​ file should be displayed. If not, open it using the **Package Explorer** pane. You will find it in the **src** folder.
Line 49: Line 47:
 The Activity should be very simple. It has an **onCreate** method which is called when the Activity gets started. The Activity should be very simple. It has an **onCreate** method which is called when the Activity gets started.
  
-In the onCreate method ​the Activity calls+The ''​onCreate'' ​method:
 <​code>​ <​code>​
 setContentView(R.layout.activity_main);​ setContentView(R.layout.activity_main);​
Line 61: Line 59:
 Go back to MainActivity.java. Go back to MainActivity.java.
  
-Add the following code to the onCreate method. Make sure the //IDs// match the ones in your layout.+Add the following code to the ''​onCreate'' ​method. Make sure the //IDs// match the ones in your layout.
 <code Java> <code Java>
         Button button = findViewById(R.id.button);​ /* make sure the button ID matches */         Button button = findViewById(R.id.button);​ /* make sure the button ID matches */
Line 80: Line 78:
 Run the project again to see the changes. Run the project again to see the changes.
  
-=== Task - Use logcat for debugging ===+=== Task - Use logcat for debugging ===
  
-Start the application installed in Task 2. Select the **Logcat** tab (situated by default in the bottom panel of Android Studio). This panel shows all the log entries written by the Android applications running on connected mobile devices or emulators. It is possible to filter these log entries: above the logs themselves there is a text entry input which allows textual filtering. It allows you to limit scope by prefixing searches with pid:, tag:, app: or text: and it accepts Java-style regular expressions. To the left of this text field there is a drop-down which allows you to select verbosity. Choosing a level will only allow messages of that level or higher to be displayed.+Select the **Logcat** tab (situated by default in the bottom panel of Android Studio). This panel shows all the log entries written by the Android applications running on connected mobile devices or emulators. ​
  
-Import the LogLevel project into Android Studio (**File > New > Import Project** and navigate ​to the project in the archiveLook over the codeEach button has method attached ​which calls static method from the Log classThese methods generate log entries ​on different ​levels of importanced=debugi=infow=warning, e=error.+It is possible ​to filter these log entries: above the logs themselves there is a text entry input which allows textual filteringIt accepts //​Java-style regular expressions//​To the left of this text field there is drop-down ​which allows you to select //​verbosity//​. Choosing ​level will only allow messages of that level or higher to be displayed. To the right of the text field there is a drop-down which allows you to create custom filtersClick on it and select //Edit Filter Configuration//​. From here you can create ​different ​filters which limit searches scope using //PID:////Tag:////Package Name:// or //​Message://​.
  
-Add another two buttons to the application:​ one that generates an assert level log entry and one that repeats ​the previously generated log entry, but with a higher level of importance (e.g. previously a debug entry was created, now the button click should generate an info entry)For the second ​button ​if the previous entry was an assert entry, then the next entry will also be an assert entryIf there is no previously generated ​log entrythen a debug entry will be logged.+**Import ​the LogLevel project** into Android Studio (**File > New > Import Project**) ​and navigate to the project in the archiveLook over the codeEach button ​has a method attached which calls a static method from the //Log// classThese methods generate ​log entries on different levels of importance: //d=debug////i=info//, //​w=warning//,​ //e=error//.
  
-=== Task 5 - View weight ===+Add another two buttons to the application:​  
 +  * one that generates an assert level log entry  
 +  * and one that repeats the previously generated log entry, but with a higher level of importance (e.g. previously a //debug// entry was created, now the button click should generate an //info// entry). ​
  
-Use the LogLevel project as a start. Notice that the EditText box only takes up one line of the screen and there should ​be some screen space left at the bottom of the screenMake the EditText box take up all available space. To do thisyou should set the weight parameter of the EditText view to 1 (or any integer).+For the second button if the previous entry was an //assert// entry, then the next entry will also be an //assert// entryIf there is no previously generated log entrythen a //debug// entry will be logged.
  
-The weight parameter is used to distribute empty screen space to the elements which need it. First, the layout builder will place all the elements for which the size is easy to determine. Then, the empty space will be distributed to the elements with weight, based on their weight: if the total weight of all elements is 4, an element with a weight ​of 1 will get 1/4 of the empty screen space, an element with 2 weight will get 2/4, and so on.+=== Task - View weight ​===
  
-=== Task - Understand Activity Lifecycle === +Use the LogLevel project as a start.  
 + 
 +Notice that the **EditText** box only takes up one line of the screen and there should be some screen space left at the bottom of the screen.  
 +  * Make the EditText box take up all available space.  
 +  * To do this, you should set the **weight** attribute of the EditText view to **1** (or any integer). 
 + 
 +The **weight** parameter is used to distribute empty screen space to the elements which need it. First, the layout builder will place all the elements for which the size is easy to determine. Then, the empty space will be distributed to the elements with //weight//, based on their //weight//: if the total //weight// of all elements is 4, an element with a //weight// of 1 will get 1/4 of the empty screen space, an element with 2 //weight// will get 2/4, and so on. 
 + 
 +=== Task - Understand Activity Lifecycle === 
  
 [[https://​developer.android.com/​guide/​components/​activities/​activity-lifecycle|Activity Lifecycle]] [[https://​developer.android.com/​guide/​components/​activities/​activity-lifecycle|Activity Lifecycle]]
  
-The Activity goes through a series of different states in its lifecycle. onCreate, onStart, ​onPause, ​onResume, onStop, onRestart and onDestroy are the callbacks from the [[https://​developer.android.com/​reference/​android/​app/​Activity|Activity]] class which inform the activity about transitions through states: creating the activity, stopping ​itresumingdestroying the process that contains the activity. In this exercise we are going to see which lifecycle callback methods are called in different scenarios. For this override the callback methods in the MainActivity. As in the previous task you need to add a Log statement to every callback with its name as in the example:+The Activity goes through a series of different states in its **lifecycle****onCreate****onStart****onResume**, **onPause****onStop****onRestart** and **onDestroy** are the callbacks from the [[https://​developer.android.com/​reference/​android/​app/​Activity|Activity]] class which inform the activity about transitions through states: ​ 
 +  * creating the activity 
 +  * starting ​it  
 +  * resuming ​it 
 +  * pausing it 
 +  * stopping it  
 +  * and destroying the process that contains the activity. ​ 
 + 
 +In this exercise we are going to see which //lifecycle callback methods// are called in different scenarios. ​ 
 +For this override the callback methods in the //MainActivity// 
 +As in the previous task you need to add a Log statement to every callback with its name as in the example:
  
 <code Java> <code Java>
Line 109: Line 127:
  
 What calls are done when: What calls are done when:
-  - The app is launched +  - The application ​is launched 
-  - The scren is rotated +  - The screen ​is rotated 
-  - The app is moved in background +  - The application ​is moved in background 
-  - The app is launched from background +  - The application ​is launched from background 
-  - The app is destroyed+  - The application ​is destroyed
  
-=== Task - Use ADB to transfer files and install apps ===+=== Task - Use ADB to transfer files and install apps ===
  
-Connect to the mobile device/emulator using ADBADB can be used from a terminal on all operating systems.+[[https://developer.android.com/​studio/​command-line/​adb|Android Debug Bridge, ADB]]
  
-On Windows, ​the ADB executable ​can be found in the Android SDK Platform-Tools e.g. **D:​\Android\sdk\platform-tools\adb.exe**.+Connect to the mobile device/​emulator using //ADB//. //​ADB// ​can be used from a terminal on all operating systems.
  
-On Linux, the ADB executable can be launched by issuing the following command:+On Windows, the //ADB// executable can be found in the Android SDK Platform-Tools e.g. **D:​\Android\sdk\platform-tools\adb.exe**. 
 + 
 +On Linux, the //ADB// executable can be launched by issuing the following command:
  
 <​code>​ <​code>​
Line 127: Line 147:
 </​code>​ </​code>​
  
-To get a list of connected devices use can use:+To get a **list of connected devices** use can use:
 <​code>​ <​code>​
 adb devices adb devices
 </​code>​ </​code>​
  
-To get a shell on the connected device use:+<​note>​If you have more than 1 device connected when you try to run a command you need to specify the device on which you want the command to run. //adb -s DEVICE_SERIAL <​command>//</​note>​ 
 + 
 +To get a **shell on the connected device** use:
 <​code>​ <​code>​
 adb shell adb shell
 </​code>​ </​code>​
  
-Android devices normally come with a more limited set of commands, so a text editor might not be available.+<​note>​Android devices normally come with a more limited set of commands, so a text editor might not be available.</​note>​
  
-Create a text file on your machine. Copy it to the connected device using:+Create a text file on your machine. ​**Copy it to the connected device** using:
 <​code>​ <​code>​
 adb push <​local>​ <​remote>​ adb push <​local>​ <​remote>​
 </​code>​ </​code>​
-where <​remote>​ represents the location on the device where you copy the file e.g. /sdcard/.+where <​remote>​ represents the location on the device where you copy the file e.g. **/sdcard/**.
  
-The file should be copied to the /sdcard/ partition on the phone. Connect to the device using adb shell, and use cat to check the contents of the file. +The file should be copied to the **/sdcard/** partition on the phone. Connect to the device using //adb shell//, and use //cat// to check the contents of the file. 
-To copy from the device use:+To **copy from the device** use:
 <​code>​ <​code>​
 adb pull <​remote>​ [<​local>​] adb pull <​remote>​ [<​local>​]
 </​code>​ </​code>​
  
-Both push and pull can be used with both directories and files.+Both //push// and //pull// can be used with both directories and files.
  
-To install an application through adb use:+To **install an application** through ​//adb// use:
 <​code>​ <​code>​
 adb install <​file>​ adb install <​file>​
 </​code>​ </​code>​
-Install LogLevel.apk (in the laboratory archive). At first if the installation fails due to a signature mismatch, make sure to uninstall the previous LogLevel application from the mobile device.+Install ​**LogLevel.apk** (in the laboratory archive). At first if the installation fails due to a signature mismatch, make sure to uninstall the previous LogLevel application from the mobile device.
  
  
-To check all available options of the ADB use:+To **check all available options of ADB** use:
 <​code>​ <​code>​
 adb --help adb --help
 </​code>​ </​code>​
  
smd/laboratoare/01.1582399391.txt.gz · Last modified: 2020/02/22 21:23 by vasile.cosovanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0