0% found this document useful (0 votes)
109 views33 pages

Android Programming: Setup For Android Development

The document discusses setting up Android development. It covers installing the Java Development Kit, Android SDK, and Android Studio. It then discusses app components, the app lifecycle, and creating a basic 'Hello World' app. It also discusses a more advanced app that scans for nearby WiFi networks.

Uploaded by

UsmanAhmed
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
0% found this document useful (0 votes)
109 views33 pages

Android Programming: Setup For Android Development

The document discusses setting up Android development. It covers installing the Java Development Kit, Android SDK, and Android Studio. It then discusses app components, the app lifecycle, and creating a basic 'Hello World' app. It also discusses a more advanced app that scans for nearby WiFi networks.

Uploaded by

UsmanAhmed
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1/ 33

Android Programming: Setup for

Android Development

Based on material from Adam Champion, Xinfeng Li, C. Horstmann [1], J. Bloch [2],
C. Collins et al. [4], M.L. Sichitiu (NCSU), V. Janjic (Imperial College London),
CSE 2221 (OSU), and other sources
1

Outline
Introduction to Android
Getting Started
Android Programming

Introduction to Android
Popular mobile device
OS: 52% of U.S.
smartphone market [8]
Developed by Open
Handset Alliance, led by
Google
Google claims 900,000
Android device
activations [9]
Source: [8]
3

What is Android
Android is an operating system for mobile devices such
as smartphones and tablet computers. It is developed by
the Open Handset Alliance led by Google.
Android has beaten Apple iOS, being the leading mobile
operating system from first quarter of 2011
Version: Android 1.0, 1.1 to 1.5 (Cupcake), 1.6 (Donut),
2.0/2.1 (Eclair), 2.2 (Froyo), 2.3 (Gingerbread), to 3.0
(Honeycomb), 4.0 (Ice Cream Sandwich), 5.0 (Lollipop)

Android Architecture

Outline
Introduction to Android
Getting Started
Android Programming

Getting Started (1)


Need to install Java Development Kit (JDK) to write
Java (and Android) programs
Do not install Java Runtime Environment (JRE);
JDK and JRE are different!

Can download the JDK for your OS at http://java.oracle.com


Alternatively, for OS X, Linux:
OS X:

Open /Applications/Utilities/Terminal.app
Type javac at command line
Install Java when prompt appears

Linux:
Type sudo aptget install defaultjdk at command line
(Debian, Ubuntu)
Other distributions: consult distributions documentation
7

Install!

Getting Started (2)


After installing JDK, download Android SDK
from http://developer.android.com
Simplest: download and install Android Studio
bundle (including Android SDK) for your OS
Alternatives:
Download/install Android Developer Tools from this
site (based on Eclipse)
Install Android SDK tools by themselves, then install
ADT for Eclipse separately (from this site)

Well use Android Studio with SDK included


(easy)
9

Install!

10

Getting Started (3)


Install Android Studio directly (Windows, Mac); unzip to directory android-studio, then run ./androidstudio/bin/studio.sh (Linux)
You should see this:

11

Getting Started (4)


Strongly recommend testing
with real Android device
Android emulator: very slow
Faster emulator: Genymotion
[14], [15]
Install USB drivers for your
Android device!

Settings

Bring up the Android SDK


Manager
Recommended: Install
Android 2.2, 2.3.3 APIs and
4.x API
Do not worry about Intel x86
Atom, MIPS system images

Now youre ready for Android development!


12

Outline
Introduction to Android
Getting Started
Android Programming

13

Android Highlights (1)


Android apps execute on
Dalvik VM, a clean-room
implementation of JVM
Dalvik optimized for efficient
execution
Dalvik: register-based VM,
unlike Oracles stack-based
JVM
Java .class bytecode translated
to Dalvik EXecutable (DEX)
bytecode, which Dalvik
interprets
15

Android Highlights (2)


Android apps written in Java 5
Actually, a Java dialect (Apache Harmony)
Everything weve learned still holds

Apps use four main components:


Activity: A single screen thats visible to user
Service: Long-running background part of app

(not

separate process or thread)


ContentProvider: Manages app data (usually stored in
database) and data access for queries
BroadcastReceiver: Component that listens for particular
Android system events, e.g., found wireless device,
and responds accordingly
16

App Manifest
Every Android app must include an
AndroidManifest.xml file describing functionality
The manifest specifies:

Apps Activities, Services, etc.


Permissions requested by app
Minimum API required
Hardware features required, e.g., camera with autofocus
External libraries to which app is linked, e.g., Google
Maps library

17

Activity Lifecycle
key building
block of Android apps
Extend Activity class,
override onCreate(),
onPause(), onResume()
methods
Dalvik VM can stop any
Activity without warning,
so saving state is important!
Activities need to be
responsive, otherwise
Android shows user App
Not Responsive warning:

Activity:

Place lengthy operations in


Runnable Threads,
AsyncTasks
18

Source: [12]

App Creation Checklist


If you own an Android device:
Ensure drivers are installed
Enable developer options on device under Settings,
specifically USB Debugging
Android 4.2+: Go to SettingsAbout phone, press Build number 7
times to enable developer options

For Android Studio:


Under FileSettingsAppearance, enable Show tool
window bars; the Android view shows LogCat, devices
Programs should log states via android.util.Logs

Log.d(APP_TAG_STR, debug), where APP_TAG_STR


is a final String tag denoting your app
Other commands: Log.e() (error); Log.i() (info);
Log.w() (warning); Log.v() (verbose) same parameters 19

Creating Android App (1)


Creating Android app
project in Android
Studio:
Go to FileNew Project
Enter app, project name
Choose package name
using reverse URL
notation, e.g.,
edu.osu.myapp

Select APIs for app, then


click Next
20

Creating Android App (2)


Determine what kind of
Activity to create; then
click Next
Well choose a Blank
Activity for simplicity

Enter information about


your Activity, then click
Finish
This creates a Hello
World app
21

Deploying the App


Two choices for deployment:
Real Android device
Android virtual device

Plug in your real device;


otherwise, create an Android
virtual device
Emulator is slow. Try Intel
accelerated version, or perhaps
http://www.genymotion.co
m/

Run the app: press Run


button in toolbar
22

Underlying Source Code


src//MainActivity.java
package edu.osu.helloandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

23

Underlying GUI Code


res/layout/activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>

RelativeLayouts are quite complicated. See [13] for details

24

The App Manifest


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.osu.helloandroid"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="edu.osu.helloandroid.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

25

A More Interesting App


Well now examine an
app with more features:
WiFi Tester (code on
class website)
Press a button, scan for
WiFi access points
(APs), display them

26

Underlying Source Code (1)


@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wi_fi);
// Set up WifiManager.
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// Create listener object for Button. When Button is pressed, scan for
// APs nearby.
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
boolean scanStarted = mWifiManager.startScan();
// If the scan failed, log it.
if (!scanStarted) Log.e(TAG, "WiFi scan failed...");
}
});
// Set up IntentFilter for "WiFi scan results available" Intent.
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
}

27

Underlying Source Code (2)

Code much more complex


First get system WifiManager
Create listener Object for button that
performs scans
We register Broadcast Receiver,
mReceiver, to listen for
WifiManagers finished scan
system event (expressed as Intent
WifiManager.SCAN_RESULTS_
AVAILABLE_ACTION)
Unregister Broadcast Receiver when
leaving Activity

@Override
protected void onResume()
{
super.onResume();
registerReceiver(mReceiver,
mIntentFilter);
}
@Override
protected void onPause()
{
super.onPause();
unregisterReceiver(mReceiver
);
}
28

The Broadcast Receiver


private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action))
{
Log.e(TAG, "Scan results available");
List<ScanResult> scanResults = mWifiManager.getScanResults();
mApStr = "";
for (ScanResult result : scanResults)
{
mApStr = mApStr + result.SSID + "; ";
mApStr = mApStr + result.BSSID + "; ";
mApStr = mApStr + result.capabilities + "; ";
mApStr = mApStr + result.frequency + " MHz;";
mApStr = mApStr + result.level + " dBm\n\n";
}
// Update UI to show all this information.
setTextView(mApStr);
}
}
};

29

User Interface
Updating UI in code
private void setTextView(String
str)
{
TextView tv = (TextView)
findViewById(R.id.textview);
tv.setMovementMethod(new
ScrollingMovementMethod());
tv.setText(str);
}

This code simply has the UI display all


collected WiFi APs, makes the text
information scrollable

UI Layout (XML)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/androi
d"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="@string/button_text"/>
<TextView
android:id="@+id/header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/ap_list"
tools:context=".WiFiActivity"
android:textStyle="bold"
android:gravity="center">
</TextView>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".WiFiActivity"
android:id="@+id/textview"
android:scrollbars="vertical">
</TextView>
</LinearLayout>

30

Android Programming Notes


Android apps have multiple points of entry: no main() method
Cannot sleep in Android
During each entrance, certain Objects may be null
Defensive programming is very useful to avoid crashes, e.g.,
if (!(myObj == null)) { // do something }

Java concurrency techniques are required


Dont block the main thread in Activities
Implement long-running tasks such as network connections
asynchronously, e.g., as AsyncTasks
Recommendation: read [4]; chapter 20 [10]; [11]
Logging state via android.util.Log throughout app is essential

when debugging (finding root causes)


Better to have too many permissions than too few

Otherwise, app crashes due to security exceptions!


Remove unnecessary permissions before releasing app to public
Event handling in Android GUIs entails many listener Objects

31

Thank You

Any questions?

35

References (1)
1.
2.
3.

4.

5.
6.
7.
8.

9.

C. Horstmann, Big Java Late Objects, Wiley, 2012. Online:


http://proquest.safaribooksonline.com.proxy.lib.ohiostate.edu/book//9781118087886
J. Bloch, Effective Java, 2nd ed., AddisonWesley, 2008. Online:
http://proquest.safaribooksonline.com.proxy.lib.ohiostate.edu/book/programming/java/9780137150021
S.B. Zakhour, S. Kannan, and R. Gallardo, The Java Tutorial: A Short Course on the Basics, 5th ed.,
AddisonWesley, 2013. Online:
http://proquest.safaribooksonline.com.proxy.lib.ohiostate.edu/book/programming/java/9780132761987
C. Collins, M. Galpin, and M. Kaeppler, Android in Practice, Manning, 2011. Online:
http://proquest.safaribooksonline.com.proxy.lib.ohiostate.edu/book/programming/android/9781935182
924
M.L. Sichitiu, 2011,
http://www.ece.ncsu.edu/wireless/MadeInWALAN/AndroidTutorial/PPTs/javaReview.ppt
Oracle, http://docs.oracle.com/javase/1.5.0/docs/api/index.html
Wikipedia, https://en.wikipedia.org/wiki/Vehicle_Identification_Number
Nielsen Co., Smartphone Milestone: Half of Mobile Subscribers Ages 55+ Own Smartphones, 22 Apr.
2014, http://www.nielsen.com/us/en/insights/news/2014/
smartphone-milestone-half-of-americans-ages-55-own-smartphones.html
Android Open Source Project, http://www.android.com
36

References (2)
10.
11.

12.
13.
14.
15.

http://bcs.wiley.com/he-bcs/Books?action=index&itemId=1118087887&bcsId=7006
B. Goetz, T. Peierls, J. Bloch, J. Bowbeer, D. Holmes, and D. Lea, Java Concurrency in
Practice, Addison-Wesley, 2006, online at
http://proquest.safaribooksonline.com/book/programming/java/0321349601
https://developer.android.com/guide/components/activities.html
https://developer.android.com/guide/topics/ui/declaring-layout.html#CommonLayouts
https://cloud.genymotion.com/page/doc/#collapse4
http://blog.zeezonline.com/2013/11/install-google-play-on-genymotion-2-0/

37

You might also like