1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Android 4.0 Development Tutorial Lars Vogel

48 307 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 48
Dung lượng 2,28 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Android 4.0 Development Tutorialbug fixing and enhancements Development with Android Gingerbread and Eclipse This tutorial describes how to create Android applications with Eclipse.. Ins

Trang 1

Android 4.0 Development Tutorial

bug fixing and enhancements

Development with Android Gingerbread and Eclipse

This tutorial describes how to create Android applications with Eclipse It is based on Eclipse 3.7(Indigo), Java 1.6 and Android 4.0 (Ice Cream Sandwich)

Table of Contents

1 What is Android?

1.1 Android Operation System

1.2 Important Android components

1.3 Dalvik Virtual Machine

1.4 Security and permissions

2 Android Application Architecture

2.1 AndroidManifest.xml

2.2 R.java, Resources and Assets

2.3 Reference to resources in XML files

2.4 Activities and Layouts

2.5 Activities and Lifecycle

2.6 Context

3 Installation

3.1 Eclipse and automatic Android SDK

3.2 Manually install Android SDK

3.3 Install a specific Android version

3.4 Android Source Code

4 Emulator Shortcuts

4.1 Create an Android Emulator Device

4.2 Using the emulator

4.3 Performance

5 Error handling and typical problems

5.1 Clean Project

5.2 LogCat

Trang 2

5.2 LogCat

5.3 Emulator does not start

5.4 Error message for @override

7 Starting an deployed application

8 Menus and Action Bar

8.1 Definition of menu entries

8.2 Action bar tabs

17.3 File explorer

18 Shell

18.1 Android Debugging Bridge - Shell 18.2 Uninstall an application via adb 18.3 Emulator Console via telnet

19 Deploy your application on a real device

20 Thank you

21 Questions and Discussion

22 Links and Literature

22.1 Source Code

22.2 Android Resources

22.3 vogella Resources

Trang 3

1 What is Android?

1.1 Android Operation System

Android is an operating system based on Linux with a Java programming interface It provides tools,e.g a compiler, debugger and a device emulator as well as its own Java Virtual machine (DalvikVirtual Machine - DVM)

Android is officially guided by the Open Handset Alliance but in reality Google leads the project.Android supports 2-D and 3-D graphics using the OpenGL libraries and supports data storage in aSQLite database

Every Android applications runs in its own process and under its own user id which is generatedautomatically by the Android system during deployment Therefore the application is isolated fromother running applications and a misbehaving application cannot easily harm other Android

applications

1.2 Important Android components

An Android application consists out of the following parts:

Activity - represents the presentation layer of an Android application, e.g a screen which theuser sees An Android application can have several activities and it can be switched betweenthem during runtime of the application

Views - the User interface of an Activities is built with widget classes which inherent from

android.view.View The layout of the views is managed by

android.view.ViewGroups Views often have attributes which can be used to change theirappearance and behavior

Services - perform background tasks without providing an UI They can notify the user via thenotification framework in Android

ContentProvider - provides data to applications, via a content provider your application canshare data with other applications Android contains a SQLite DB which can serve as dataprovider

Intents - are asynchronous messages which allow the application to request functionalityfrom other services or activities An application can call directly a service or activity (explicitintent) or ask the Android system for registered services and applications for an intent (implicitintents) For example the application could ask via an intent for a contact application

Applications register themselves to an intent via an IntentFilter Intents are a powerfulconcept as they allow the creation of loosely coupled applications

BroadcastReceiver - receives system messages and implicit intents, can be used to react tochanged conditions in the system An application can register as a BroadcastReceiver for

Trang 4

certain events and can be started if such an event occurs.

Widgets - interactive components primary used on the Android homescreen to display certaindata and to allow the user to have quick access the the information

Other Android components are Live Folders and Android Live Wallpapers Live Folders display data

on the homescreen without launching the corresponding application

1.3 Dalvik Virtual Machine

Android uses a special virtual machine, e.g the Dalvik Virtual Machine Dalvik uses special bytecode.Therefore you cannot run standard Java bytecode on Android Android provides a tool dx whichallows to convert Java Class files into dex (Dalvik Executable) files Android applications are packedinto an apk (Android Package) file by the program aapt (Android Asset Packaging Tool) To simplifydevelopment Google provides the Android Development Tools (ADT) for Eclipse The ADT performsautomatically the conversion from class to dex files and creates the apk during deployment

1.4 Security and permissions

Android defines certain permissions for certain tasks For example if the application wants to accessthe Internet it must define in its configuration file that it would like to use the related permission Duringthe installation of an Android application the user receives a screen in which he needs to confirm therequired permissions of the application

2 Android Application Architecture

2.1 AndroidManifest.xml

An Android application is described in the file AndroidManifest.xml This file must declare allActivities, Services, BroadcastReceivers and ContentProvider of the application Itmust also contain the required permissions for the application For example if the application requiresnetwork access it must be specified here AndroidManifest.xml can be thought as the

deployment descriptor for an Android application

<application android:icon= "@drawable/icon" android:label= "@string/app_name">

<activity android:name= ".Convert"

android:label= "@string/app_name">

<intent-filter>

<action android:name= "android.intent.action.MAIN" />

<category android:name= "android.intent.category.LAUNCHER" />

Trang 5

The package attribute defines the base package for the following Java elements It also must beunique as the Android Marketplace only allows application for a specific package once Therefore agood habit is to use your reverse domain name as a package to avoid collisions with other

developers

android:versionName and android:versionCode specify the version of your application.versionName is what the user sees and can be any string versionCode must be an integer andthe Android Market uses this to determine if you provided a newer version to trigger the update ondevices which have your application installed You typically start with "1" and increase this value byone if you roll-out a new version of your application

The tag <activity> defines an Activity , in this example pointing to the class

"de.vogella.android.temperature.Convert" An intent filter is registered for this class which defines thatthis Activity is started once the application starts (action

android:name="android.intent.action.MAIN" ) The category definition categoryandroid:name="android.intent.category.LAUNCHER" defines that this application isadded to the application directory on the Android device The @string/app_name value refer toresource files which contain the actual values This makes it easy to provide different resources, e.g.strings, colors, icons, for different devices and makes it easy to translate applications

The "uses-sdk" part of the "AndroidManifest.xml" defines the minimal SDK version your application isvalid for This will prevent your application being installed on devices with older SDK versions

2.2 R.java, Resources and Assets

The directory gen in an Android project contains generated values R.java is a generated classwhich contains references to resources of the res folder in the project These resources are defined inthe res directory and can be values, menus, layouts, icons or pictures or animations For example aresource can be an image or an XML file which defines strings

If you create a new resource, the corresponding reference is automatically created in R.java Thereferences are static int values, the Android system provides methods to access the correspondingresource For example to access a String with the reference id R.string.yourString use themethod getString(R.string.yourString)); R.java is automatically maintained by theEclipse development environment, manual changes are not necessary

While the directory res contains structured values which are known to the Android platform the

directory assets can be used to store any kind of data In Java you can access this data via theAssetsManager and the method getAssets()

2.3 Reference to resources in XML files

In your XML files, e.g your layout files you can refer to other resources via the @ sign For example ifyou want to refer to a color you defined as resources you can refer to it via @color/your_id or ifyou have defined a "hello" string as resource you can access it via @string/hello

2.4 Activities and Layouts

The user interface for Activities is defined via layouts At runtime, layouts are instances of

Trang 6

The user interface for Activities is defined via layouts At runtime, layouts are instances of

android.view.ViewGroups The layout defines the UI elements, their properties and theirarrangement

UI elements are based on the class android.view.View ViewGroup is a subclass of the classView and a layout can contain UI components ( Views ) or other layouts ( ViewGroups ) Youshould not nestle ViewGroups too deeply as this has a negative impact on performance

A layout can be defined via Java code or via XML You typically uses Java code to generate the layout

if you don't know the content until runtime; for example if your layout depends on content which youread from the Internet

XML based layouts are defined via a resource file in the folder /res/layout This file specifies theViewGroups , Views , their relationship and their attributes for a specific layout If a UI elementneeds to be accessed via Java code you have to give the UI element an unique id via the

android:id attribute To assign a new id to an UI element use @+id/yourvalue By

conversion this will create and assign a new id yourvalue to the corresponding UI element In yourJava code you can later access these UI elements via the method

findViewById(R.id.yourvalue)

Defining layouts via XML is usually the preferred way as this separates the programming logic fromthe layout definition It also allows the definition of different layouts for different devices You can alsomix both approaches

2.5 Activities and Lifecycle

The operating system controls the life cycle of your application At any time the Android system maystop or destroy your application, e.g because of an incoming call The Android system defines a lifecycle for activities via pre-defined methods The most important methods are:

onSaveInstanceState() - called if the activity is stopped Used to save data so that theactivity can restore its states if re-started

onPause() - always called if the Activity ends, can be used to release resource or save dataonResume() - called if the Activity is re-started, can be used to initialize fields

The activity will also be restarted if a so called "configuration change" happens A configuration

change for example happens if the user changes the orientation of the device (vertical or horizontal).The activity is in this case restarted to enable the Android platform to load different resources for theseconfiguration, e.g layouts for vertical or horizontal mode In the emulator you can simulate the change

of the orientation via CNTR+F11

You can avoid a restart of your application for certain configuration changes via the configChangesattribute on your activity definition in your AndroidManifest.xml The following activity will not berestarted in case of orientation changes or position of the physical keyboard (hidden / visible)

<activity android:name= ".ProgressTestActivity"

android:label= "@string/app_name"

Trang 7

3 Installation

The following assume that you have already Eclipse installed For details please see Eclipse Tutorial

3.1 Eclipse and automatic Android SDK

Use the Eclipse update manager to install all available components for the Android DevelopmentTools (ADT) from the URL https://dl-ssl.google.com/android/eclipse/ If you are not familiar with theEclipse update manager the usage is described in Eclipse update manager

After the new Android development components are installed you will be prompted to install theAndroid SDK You can do follow the following wizard or go to the next section to learn how to do itmanually

Trang 8

3.2 Manually install Android SDK

The previous step downloads the Android SDK automatically for you You can also download theAndroid SDK manuallz from the Android homepage under Android SDK download The downloadcontains a zip file which you can extract to any place in your file system, e.g I placed it under

"c:\android-sdk-windows" Avoid using spaces in the path name otherwise you may experienceproblems later

You also have to define the location of the Android SDK in the Eclipse Preferences In Eclipse openthe Preferences dialog via Windows → Preferences Select Android and enter the installation path of

Trang 9

the Preferences dialog via Windows → Preferences Select Android and enter the installation path ofthe Android SDK.

3.3 Install a specific Android version

The Android SDK Manager allows you to install specific versions of Android Select Window →Android SDK Manager from the Eclipse menu

Trang 10

The dialog allows you to install new package and also allow you to delete them Select "Availablepackages" and open the "Third Party Add-ons" Select the Google API 14 (Android 4.0) version of theSDK and press "Install".

Press the "Install" button and confirm the license for all package After the installation restart Eclipse

3.4 Android Source Code

The following step is optional

Trang 11

The following step is optional.

During Android development it is very useful to have the Android source code available as Androiduses a lot of defaults

Haris Peco maintains plugins which provides access to the Android Source code code Use theEclipse update manager to install the Android Source plugin from the following update site: "http://adt-addons.googlecode.com/svn/trunk/source/com.android.ide.eclipse.source.update"

More details can be found on the project website

4 Emulator Shortcuts

4.1 Create an Android Emulator Device

The Android tools include an emulator This emulator behaves like a real Android device in mostcases and allows you to test your application without having a real device You can emulate one orseveral devices with different configurations Each configuration is defined via an "Android VirtualDevice" (AVD)

To define an AVD open the "AVD Manager" via Windows → AVD Manager and press "New"

Enter the following

Trang 12

We can also select the box "Enabled" for Snapshots This will make the second start of the virtualdevice much faster.

At the end press the button "Create AVD".This will create the device and display it under the "Virtualdevices" To test if your setup is correct, select your device and press "Start"

After (a long time) your device should be started

4.2 Using the emulator

Obviously you can use the emulator via the keyboard on the right side of the emulator But there arealso some nice shortcuts which are useful

Alt+Enter maximizes the emulator Nice for demos.

Ctrl+F11 changes the orientation of the emulator.

F8 turns network on / off.

4.3 Performance

Trang 13

5 Error handling and typical problems

Things are not always working as they should This section gives an overview over typical problemsand how to solve them

5.1 Clean Project

Several users report that get the following errors:

1 Project is missing required source folder: 'gen'

2 The project could not be built until build path errors are resolved

3 Unable to open class file R.java

To solve any of these errors, go to the project menu and select Project -> Clean

5.2 LogCat

The LogCat view shows you the log message of your Android device and help you analyzing

problems For example Java exceptions in your program would be shown here To open this view,select "Window -> Show View -> Other -> Android -> LogCat" from the menu

5.3 Emulator does not start

If your emulator does not start, make sure that the androd-sdk version is in a path without any spaces

in the path name

5.4 Error message for @override

The @override annotation was introduced in Java 1.6 If you receive an error message for @overridechange the Java compiler level to Java 1.6 via right-mouse click on the project -> Properties -> JavaCompiler -> Compiler compliance level and set it to "1.6"

5.5 Missing Imports

Java requires that the classes which are not part of the standard Java Language are either fullyqualified or declared via imports In your editor use the click mouse click, select "Source-> Organize

Trang 14

qualified or declared via imports In your editor use the click mouse click, select "Source-> OrganizeImports" if you see error message with "XX cannot be resolved to a variable".

5.6 Eclipse Tips

To work more efficient with Eclipse, select Window -> Preferences -> Java -> Editor -> Save Actionsand select that the source code should be formated and that the imports should be organized at everysave

6 Your first Android project

Trang 15

Press "Finish" This should create the following directory structure.

Trang 16

While "res" contains structured values which are known to the Android platform the directory "assets"can be used to store any kind of data In Java you can access this data via the AssetsManager and themethod getAssets().

6.2 Two faces of things

The Android SDK allows to define certain artifacts, e.g strings and UI's, in two ways, via a rich editorand directly via XML The following description tries to use the rich UI but for validation lists also theXML You can switch between both things by clicking on the tab on the lower part of the screen Forexample in the Package Explorer select "res/layout/main.xml"

Trang 18

Add also the following "String" attributes String attributes allow to translate the application at a laterpoint.

Table 1 String Attributes

<string name= "hello"> Hello World, Convert! </string>

<string name= "app_name"> Temperature Converter </string>

<color name= "myColor"> #3399CC </color>

<string name= "myClickHandler"> myClickHandler </string>

<string name= "celsius"> to Celsius </string>

<string name= "fahrenheit"> to Fahrenheit </string>

<string name= "calc"> Calculate </string>

Trang 19

Right-click on the text object “Hello World, Hello!” in the layout Select Delete on the popup menu toremove the text object Then, from the “Palette” view, select Text Fields and locate “Plain Text” Dragthis onto the layout to create a text input field All object types in the section "Text Fields” derive fromthe class "EditText", they just specify via an additional attribute which text type can be used.

Now select the Palette section “Form Widgets” and drag a “RadioGroup” object onto the layout Thenumber of radio buttons added to the radio button group depends on your version of Eclipse Makesure there are two radio buttons by deleting or adding radio buttons to the group

From the Palette section Form Widgets, drag a Button object onto the layout

The result should look like the following

Trang 20

Switch to "main.xml" and verify that your XML looks like the following.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"

android:orientation= "vertical" android:layout_width= "fill_parent"

android:layout_height= "fill_parent">

<EditText android:layout_height= "wrap_content" android:id= "@+id/editText1"

android:layout_width= "match_parent" android:text= "EditText"></EditText>

<RadioGroup android:layout_height= "wrap_content" android:id= "@+id/radioGroup1"

android:layout_width= "match_parent">

<RadioButton android:text= "RadioButton"

android:layout_width= "wrap_content" android:id= "@+id/radio0"

android:layout_height= "wrap_content" android:checked= "true"></RadioButton>

<RadioButton android:text= "RadioButton"

android:layout_width= "wrap_content" android:id= "@+id/radio1"

android:layout_height= "wrap_content"></RadioButton>

</RadioGroup>

<Button android:text= "Button" android:id= "@+id/button1"

android:layout_width= "wrap_content" android:layout_height= "wrap_content"></Button>

We will delete the intial text for the EditText field in XML Switch to the "main.xml" tab and delete the

"android:text="EditText" property from the EditText part Switch back to the "Graphical Layout" tab andcheck that the text is removed

Use the right mouse click on the first radio button to assign the "celsius" string attribute to its "text"property Assign the and "fahrenheit" string attribute to the second radio button

Trang 21

From now on I assume you are able to use the properties menu on the UI elements You can eitheredit the XML file or modify the properties via right mouse click.

Set the property "Checked" to true for the first RadioButton Assign "calc" to the text property of yourbutton and assign "myClickHandler" to the "onClick" property Set the "Input type" property to

"numberSigned" and "numberDecimal" on your EditText

All your other UI controls are contained in a LinearLayout We want to assign a background color tothis LinearLayout Right-click on an empty space in Graphical Layout mode, then select Other

Trang 22

Properties → All by Name → Background Select “Color” and then “myColor” in the list.

Switch to the "main.xml" tab and verify that the XML is correctly maintained

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"

android:orientation= "vertical" android:layout_width= "fill_parent"

android:layout_height= "fill_parent" android:background= "@color/myColor">

<EditText android:layout_height= "wrap_content" android:id= "@+id/editText1"

android:layout_width= "match_parent" android:inputType= "numberDecimal|numberSigned"></ EditText>

<RadioGroup android:layout_height= "wrap_content" android:id= "@+id/radioGroup1"

android:layout_width= "match_parent">

<RadioButton android:layout_width= "wrap_content"

android:id= "@+id/radio0" android:layout_height= "wrap_content"

android:text= "@string/celsius" android:checked= "true"></RadioButton>

<RadioButton android:layout_width= "wrap_content"

android:id= "@+id/radio1" android:layout_height= "wrap_content"

android:text= "@string/fahrenheit"></RadioButton>

</RadioGroup>

<Button android:id= "@+id/button1" android:layout_width= "wrap_content"

android:layout_height= "wrap_content" android:text= "@string/calc"

android:onClick= "myClickHandler"></Button>

</LinearLayout>

6.6 Code your application

During the generation of your new Android project you specified that an Activity called

CovertActivity should get created The project wizard also created the correspondig Java classs.Change your code in ConvertActivity.java to the following Note that the myClickHandlerwill be called based on the On Click property of your button

Trang 23

// This method is called at button click because we assigned the name to the

// "On Click property" of the button

p u b l i c v o i d myClickHandler(View view) {

s w i t c h (view.getId()) {

c a s e R.id.button1:

RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);

RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);

i f (text.getText().length() == 0) {

Toast.makeText(t h i s, "Please enter a valid number" ,

Toast.LENGTH_LONG).show();

r e t u r n ; }

f l o a t inputValue = Float.parseFloat(text.getText().toString());

i f (celsiusButton.isChecked()) {

text.setText(String

.valueOf(convertFahrenheitToCelsius(inputValue))); celsiusButton.setChecked(false);

fahrenheitButton.setChecked(true);

} e l s e {

text.setText(String

.valueOf(convertCelsiusToFahrenheit(inputValue))); fahrenheitButton.setChecked(false);

celsiusButton.setChecked(true);

}

b r e a k ; }

Trang 24

Type in a number, select your conversion and press the button The result should be displayed andthe other option should get selected.

7 Starting an deployed application

After you ran your application on the virtual device you can start it again on the device If you press theHome button you can also select your application

Ngày đăng: 14/12/2016, 10:25

TỪ KHÓA LIÊN QUAN