Lab 01. Introduction

Resources

Files

Task 0 - Setting up the environment

To install Android Studio on your own machine follow the step here: Install Android Studio. Android Studio should be already installed on the lab workstations.

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.

Run the project by clicking the green arrow on the toolbar above the editing area, . 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

Create a virtual device:

  1. Click the green arrow (Run) to run the program,
  2. In the menu click Create New Virtual Device.
  3. Choose Nexus 5X or Pixel 2 XL screen resolution. Click Next.
  4. Choose Oreo x86 image (or any other image above API 24). Download if needed. Click next.
  5. Give the device 512-1536 MBs of RAM and 64-226 MB VM Heap (Under Show Advanced Settings)
  6. Click Finish
  7. Select the Android Virtual Device that you just created and press OK. This will launch the Emulator. Wait for it to boot and check that your empty application starts.

In order for the Android Virtual Device to benefit from the hardware acceleration support of your processor, depending on the operating system, you will need to have installed/enabled one of the following:

  1. HAXM on Windows
  2. HAXM on MAC
  3. KVM on Linux

You can check if HAXM or KVM is installed, by issuing the following command (assuming the default location of the Android SDK):

./Android/Sdk/tools/emulator -accel-check

Task 3 - 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.

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

setContentView(R.layout.activity_main);

This sets the layout for the Activity.

R is a class generated by the SDK and it maps every resource to a number. It contains subclasses for every folder found in the res folder, in this case layout.

Open the res/layout/activity_main.xml file. You will see the Layout editor. In the Palette pane, find Button and drag it to the layout. Set the constraints for the button. You will see the Attributes panel to the right of the screen change to reflect this. Select the button and check its ID field in the Attributes panel. Change the text of the button to “Press me!”. Also check the ID field of the default TextView element.

Go back to MainActivity.java.

Add the following code to the onCreate method. Make sure the IDs match the ones in your layout.

        Button button = findViewById(R.id.button); /* make sure the button ID matches */
        final TextView textView = findViewById(R.id.textView); /* make sure the textView ID matches */
 
        button.setOnClickListener(new View.OnClickListener() {
        	int n = 1;
 
		@Override
		public void onClick(View v) {
			textView.setText("Hello again! " + Integer.toString(n++));
		}
	});

The findViewById calls are used to get the objects corresponding to the Button and the TextView that were already declared. TextView is declared as final in order to be visible inside the View.OnClickListener call (anonymous class). The View.OnClickListener object contains an onClick method which gets executed when the button is pressed. In this case, it updates the TextView to reflect the number of clicks on the button.

Run the project again to see the changes.

Task 4 - Use logcat for debugging

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 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. To the right of the text field there is a drop-down which allows you to create custom filters. Click 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:.

Import the LogLevel project into Android Studio (File > New > Import Project) and navigate to the project in the archive. Look over the code. Each button has a method attached which calls a static method from the Log class. These methods generate log entries on different levels of importance: d=debug, i=info, w=warning, e=error.

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 entry. If there is no previously generated log entry, then a debug entry will be logged.

Task 5 - View weight

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 6 - Understand Activity Lifecycle

Activity Lifecycle

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 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:

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MainActivity", "onStart"); // You can choose any type of log level
    }

What calls are done when:

  1. The application is launched
  2. The screen is rotated
  3. The application is moved in background
  4. The application is launched from background
  5. The application is destroyed

Task 7 - Use ADB to transfer files and install apps

Android Debug Bridge, ADB

Connect to the mobile device/emulator using ADB. ADB can be used from a terminal on all operating systems.

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:

/home/student/Android/SDK/platform-tools/adb

To get a list of connected devices use can use:

adb devices

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>

To get a shell on the connected device use:

adb shell

Android devices normally come with a more limited set of commands, so a text editor might not be available.

Create a text file on your machine. Copy it to the connected device using:

adb push <local> <remote>

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. To copy from the device use:

adb pull <remote> [<local>]

Both push and pull can be used with both directories and files.

To install an application through adb use:

adb install <file>

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 ADB use:

adb --help
smd/laboratoare/01.txt · Last modified: 2020/02/27 17:00 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