Changed 12
Changed 12
Changed 12
INTRODUCTION
one of the fastest growing industries now a day is mobile industry. There are many competitors
in this area who are doing research and development on new platforms & user experience. One
such technology is Android from Google which is supported for Google phones. These phones
are described as next Generation mobiles [As described by Google]. This application
Personalized voice based task remainder can be used by any Android mobile user. The proposed
application is a tool developed for android platform, which is used to create and organize tasks
or actions one need to get done. This relieves one from the stress of remember everything one
need to do. As this is a mobile application one can easily organize his actions where ever he is
with ease. With this one can add his instant ideas and quickly check the top priority action that
need to be done immediately. This application enables us to categorize actions into projects and
optionally provides a context for that action. This categorization breaks down the projects into
simple achievable actions. As a project evolves around time one can delete old actions which are
performed and new actions which need to get done. We wanted to build Methodiser in Mobile
phone with the latest technology in the market. One such technology is Google Android SDK.
1.4 PURPOSE:
The Personalized voice based task remainder is an application which helps the user in
used for picking a date and time to particular schedule and save the record in draft folder.at the
set time, it notifies in the notification bar which can be played to listen to the remainder user has
recorded
Java
: (min) 128
3. HARD DISK
: 100
3.LITERATURE SURVEY
3.1 JAVA:
Java is an object-oriented language, and is very similar to C++. Java is simplified to
eliminate language features that cause common programming errors. Java source code files are
compiled into a format called bytecode, which can then be executed by a Java
interpreter.Features being
FEATURES:
1.Platform Independent
The programs written on one platform can run on any platform provided the platform must
have the JVM.
2.Portable
The feature Write-once-run-anywhere makes the java language portable provided that the
system must have interpreter for the JVM.
3.Simple
Programs are easy to write and debug because java does not use the pointers explicitly. It
also has the automatic memory allocation and deallaocation system.
4.Multithreaded
Multithreading means a single program having different threads executing independently at
the same time.
5.Robust
Java has the strong memory allocation and automatic garbage collection mechanism. It
provides the powerful exception handling and type checking mechanism as compare to other
4
programming languages.
6.Object Oriented
To be an Object Oriented language, any language must follow at least the four
characteristics.
Inheritance
Encapsulation
Polymorphism
Dynamic binding
7.Distributed
The widely used protocols like HTTP and FTP are developed in java. Internet programmers
can call functions on these protocols and can get access to the files from any remote machine
on the internet rather than writing codes on their local system.
8.Secure
All the programs in java are run under an area known as the sand box. Security manager
determines the accessibility options of a class like reading and writing a file to the local disk.
9.High Performance
In the beginning interpretation of byte code resulted in slow performance but the advance
version of JVM uses the adaptive and just in time compilation technique that improves the
performance.
10.Integrated
Java is an interpreted language as well. Programs run directly from the source code
3.2.ANDROID
Android is a software stack for mobile devices that includes an operating system, middleware
and key applications. The android SDK provides the tools and APIs necessary to begin
developing applications on the Android platform using the Java programming language.
3.3Features:
Application framework :enabling reuse and replacement of components
Dalvik virtual machine :optimized for mobile devices
Integrated browser based on the open source WebKit engine
Optimized graphics powered by a custom 2D graphics library; 3D graphics based on the
OpenGL ES 1.0 specification (hardware acceleration optional)
SQLite for structured data storage
Media support for common audio, video, and still image formats (MPEG4, H.264, MP3, AAC,
AMR, JPG, PNG, GIF)
GSM Telephony (hardware dependent)
Bluetooth, EDGE, 3G, and Wi-Fi (hardware dependent)
Camera, GPS, compass, and accelerometer (hardware dependent)
Rich development environment including a device emulator, tools for debugging, memory and
performance profiling, and a plugin for the Eclipse IDE
Libraries
Android includes a set of C/C++ libraries used by various components of the Android system.
These capabilities are exposed to developers through the Android application framework. Some
of the core libraries are listed below:
System C library - a BSD-derived implementation of the standard C system library (libc), tuned
for embedded Linux-based devices
Media Libraries - based on Packet Videos OpenCORE; the libraries support playback and
recording of many popular audio and video formats, as well as static image files, including
MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager - manages access to the display subsystem and seamlessly composites 2D and
3D graphic layers from multiple applications
LibWebCore - a modern web browser engine which powers both the Android browser and an
embeddable web view
SGL - the underlying 2D graphics engine
3D libraries - an implementation based on OpenGL ES 1.0 APIs; the libraries use either
hardware 3D acceleration (where available) or the included, highly optimized 3D software
rasterizer
Free Type - bitmap and vector font rendering
SQLite - a powerful and lightweight relational database engine available to all applications
3.5Android Runtime
Android includes a set of core libraries that provides most of the functionality available in the
core libraries of the Java programming language.
Every Android application runs in its own process, with its own instance of the Dalvik virtual
machine. Dalvik has been written so that a device can run multiple VMs efficiently. The Dalvik
VM executes files in the Dalvik Executable format which is optimized for minimal memory
footprint. The VM is register-based, and runs classes compiled by a Java language compiler that
have been transformed into the .dex format by the included "dx" tool.
The Dalvik VM relies on the Linux kernel for underlying functionality such as threading and
low-level memory management.
an Android code editor that helps you write valid XML for your Android manifest and resource
files.
It will even export your project into a signed APK, which can be distributed to users.
To begin developing Android applications in the Eclipse IDE with ADT, you first need to
download the Eclipse IDE and then download and install the ADT plugin.
It provides a New Project Wizard, which helps you quickly create and set up all of the basic files
you'll need for a new Android application.
It automates and simplifies the process of building your Android application.
It provides
Android is a software stack for mobile devices that includes an operating system, middleware
and key applications. The android SDK provides the tools and APIs necessary to begin
developing applications on the Android platform using the Java programming language.
The Android SDK includes a comprehensive set of development tools. These include a
debugger, libraries, a handset emulator (based on QEMU), documentation, sample code, and
tutorials. Currently supported development platforms include x86-architecture computers
running Linux (any modern desktop Linux distribution), Mac OS X 10.4.8 or later, Windows XP
or Vista. The officially supported integrated development environment (IDE) is Eclipse (3.2 or
later) using the Android Development Tools (ADT) Plug in, though developers may use any text
editor to edit Java and XML files then use command line tools to create, build and debug
Android application
Libraries written in C and other languages can be compiled to ARM native code and installed,
but the Native Development Kit is not yet officially supported by Google. Native classes can be
called from Java code running under the Dalvik VM using the System. Load Library call, which
is part of the standard Android Java classes.
Enter a Project Name. This will be the name of the folder where your project is
created.
Under Contents, select Create new project in workspace. Select your project
workspace location.
Under Target, select an Android target to be used as the project's Build Target. The
Build Target specifies which Android platform you'd like your application built
against.
Unless you know that you'll be using new APIs introduced in the latest SDK, you
should select a target with the lowest platform version possible, such as Android 1.1.
Enter an Application name. This is the human-readable title for your application the
name that will appear on the Android device.
i.
Enter a Package name. This is the package namespace (following the same
rules as for packages in the Java programming language) where all your source
code will reside.
10
ii.
Select Create Activity (optional, of course, but common) and enter a name for
your main Activity class.
iii.
Enter a Min SDK Version. This is an integer that indicates the minimum API
Level required to properly run your application. Entering this here
automatically sets the min Sdk Version attribute in the <uses-sdk> of your
Android Manifest file. If you're unsure of the appropriate API Level to use,
copy the API Level listed for the Build Target you selected in the Target tab.
iv.
Click Finish.
Once you complete the New Project Wizard, ADT creates the following folders and files in your
new project:
Src/
Includes your stub Activity Java file. All other Java files for your application go here.
<Android Version>/ (e.g., Android 1.1/)
Includes the android.jar file that your application will build against. This is determined by
the build target that you have chosen in the New Project Wizard.
gen/
This contains the Java files generated by ADT, such as your R.java file and interfaces
created from AIDL files.
assets/
This is empty. You can use it to store raw asset files. See Resources and Assets.
res/
A folder for your application resources, such as drawable files, layout files, string values,
etc. See Resources and Assets.
11
AndroidManifest.xml
The Android Manifest for your project. See The AndroidManifest.xml File.
default.properties
This file contains project settings, such as the build target. This files is integral to the project, as
such, it should be maintained in a Source Revision Control system. It should never be edited
manually to edit project properties, right-click the project folder and select "Properties".
Select Window > Android SDK and AVD Manager, or click the Android SDK and
AVD Manager icon (a black device) in the Eclipse toolbar.
In the Virtual Devices panel, you'll see a list of existing AVDs. Click New to create a
new AVD.
Give it a name, a platform target, an SD card image (optional), and a skin (HVGA is
default).
When you first run a project as an Android Application, ADT will automatically create a run
configuration. The default run configuration will launch the default project Activity and use
automatic target mode for device selection (with no preferred AVD).
12
In Eclipse 3.3 ,select Run > Open Run Dialog (or Open Debug Dialog)
In Eclipse 3.4 (Ganymede), select Run > Run Configurations (or Debug Configurations)
Expand the Android Application item and create a new configuration or open an existing
one.
13
4.2 MODULES:
Voice Recording Module : It has a start recording option which allows to and set to the
assigned time.
Separate storage folder : Any application in android generally stores their media files in gallery
, but for specified usage and to avoid ambiguity, it can store in new folder.
Media Player Module: The audio note recorded is played in a private media player which is
designed for this application.
Output : At the set time, it notifies in the notification bar which can be played to listen to the
remainder user has recorded.
14
Technical feasibility
Operational feasibility
Economic feasibility
TECHNICAL FEASIBILITY:
To determine whether the proposed system is technically feasible, we should take into
consideration the technical issues involved behind the system.
VNC viewer uses the web technologies, which is rampantly employed these days worldwide. The
world without the internet is incomprehensible today. That goes to proposed system is technically
feasible.
OPERATIONAL FEASIBILITY:
To determine the operational feasibility of the system we should take into consideration the
awareness level of the users. This system is operational feasible since the users are familiar with the
technologies and hence there is no need to gear up the personnel to use Cell. Also the system (Cell
phones) is very friendly and to use.
ECONOMIC FEASIBILITY:
To decide whether a project is economically feasible, we have to consider various factors as:
Long-term returns
Maintenance costs
15
5. SYSTEM DESIGN
5.1 ARCHITECTURE DIAGRAM
Architecture diagram is a diagram of a system, in which the principal parts or functions
are represented by blocks connected by lines that show the relationships of the blocks.The block
diagram is typically used for a higher level, less detailed description aimed more at
understanding the overall concepts and less at understanding the details of implementation.
AndroidSDK
Search/
add
Java
program
Get
Voice
record
SQLite
16
17
Data flow
Data store
18
Structural things are the nouns of UML models. The structural things used in the project
design are:
First, a class is a description of a set of objects that share the same attributes, operations,
relationships and semantics.
Window
origin
size
open()
close()
move()
display()
Fig: Classes
Second, a use case is a description of set of sequence of actions that a system performs that
yields an observable result of value to particular actor.
20
Third, a node is a physical element that exists at runtime and represents a computational
resource, generally having at least some memory and often processing capability.
Fig: Nodes
Behavioral things are the dynamic parts of UML models. The behavioral thing used is:
Interaction:
An interaction is a behavior that comprises a set of messages exchanged among a set of objects
within a particular context to accomplish a specific purpose. An interaction involves a number of
other elements, including messages, action sequences (the behavior invoked by a message, and
links (the connection between objects).
Fig: Messages
Relationships in the UML:
21
Fig: Dependencies
An association is a structural relationship that describes a set links, a link being a connection
among objects. Aggregation is a special kind of association, representing a structural relationship
between a whole and its parts.
Fig: Association
Fig: Generalization
Fig: Realization
22
Classes are typically modeled as rectangles with three sections: the top section for the name of
the class, the middle section for the attributes of the class, and the bottom section for the methods
of the class. Attributes are the information stored about an object, while methods are the things
an object or class do. For example, students have student numbers, names, addresses, and phone
numbers. Those are all examples of the attributes of a student. Students also enroll in courses,
drop courses, and request transcripts. Those are all examples of the things a student does, which
get implemented (coded) as methods. You should think of methods as the object-oriented
equivalent of functions and procedures.
CLASS DIAGRAM
Date Class
StringDate
Date()
Notification
Record
View Task
String Notifier
String Task
String Recard
String Stop
Notification()
view()
play()
Media Recard()
23
5.5.2INTERACTION DAIGRAMS
Sequence Diagrams:
UML SEQUENCE diagrams are used to represent the flow of messages, events and actions
between the objects or components of a system. Time is represented in the vertical direction
showing the sequence of interactions of the header elements, which are displayed horizontally at
the top of the diagram.
Sequence Diagrams are used primarily to design, document and validate the architecture,
interfaces and logic of the system by describing the sequence of actions that need to be
performed to complete a task or scenario. UML sequence diagrams are useful design tools
because they provide a dynamic view of the system behavior which can be difficult to extract
from static diagrams or specifications
Actor
Object
Represents an object in the system or one of its components
Unit
24
Represents a subsystem, component, unit, or other logical entity in the system (may or may not be
implemented by objects)
Separator
Represents an interface or boundary between subsystems, components or units (e.g., air interface,
Internet, network)
Group
Action
Represents an action taken by an actor, object or unit
25
Asynchronous Message
Block
A block representing a loop or conditional for a particular header element
Call Message
A call (procedure) message between header elements
Create Message
A "create" message that creates a header element (represented by lifeline going from dashed to solid
pattern)
26
Diagram Link
Represents a portion of a diagram being treated as a functional block. Similar to a procedure or function
call that abstracts functionality or details not shown at this level. Can optionally be linked to another
diagram for elaboration.
Return Message
27
SEQUENCE DIAGRAM
U:User
M:Mobile
1 Open Application
2 Search Date
28
A:App
5.5.3Object diagram
An object diagram in the Unified Modeling Language (UML), is a diagram that shows a
complete or partial view of the structure of a modeled system at a specific time.
An object diagram focus on some particular set of object instances and attributes, and the
links between the instances. A correlated set of object diagrams provides insight into how an
arbitrary view of a system is expected to evolve over time. Object diagrams are more concrete
than class diagrams, and are often used to provide examples, or act as test cases for the class
diagrams. Only those aspects of a model that are of current interest need be shown on an object
diagram.
D:Date Class
StringDate
Date()
N:Notification
V:View Task
String Notifier
String Task
String Recard
String Stop
Notification()
view()
play()
Media Recard()
29
R:Record
30
Figure 3.2: use cases in a use case diagramFigure 3.2 shows two uses cases: "Make
appointment" and "Perform medical tests" in the use case diagram of a clinic system. As
another example, consider that a business process such as "manage patient records" can
in turn have sub-processes like "manage patient's personal information" and "manage
patient's medical information." Discovering such implicit use cases is possible only with
a thorough understanding of all the business processes of the system through discussions
Date Search
View Tasks
User
Record Tasks
Play Tasks
Notifications
USECASE DIAGRAM
31
5.5.5Activity Diagram
Activity diagrams represent the business and operational workflows of a system. An Activity
diagram is a dynamic diagram that shows the activity and the event that causes the object to be in
the particular state.
So, what is the importance of an Activity diagram, as opposed to a State diagram? A State
diagram shows the different states an object is in during the lifecycle of its existence in the
system, and the transitions in the states of the objects. These transitions depict the activities
causing these transitions, shown by arrows.
An Activity diagram talks more about these transitions and activities causing the changes in the
object states.
i e
r c
la
t i f i c
t e
r d
t i o
ACTIVITY DIAGRAM
32
Initial Activity: This shows the starting point or first activity of the flow. Denoted by a solid
circle. This is similar to the notation used for Initial State.
.
Decisions: Similar to flowcharts, a logic where a decision is to be made is depicted by a
diamond, with the options written on either sides of the arrows emerging from the diamond,
within box brackets.
33
Concurrent Activities: Some activities occur simultaneously or in parallel. Such activities are
called concurrent activities. For example, listening to the lecturer and looking at the blackboard
is a parallel activity.
ivity. This is represented by a horizontal split (thick dark line) and the two
concurrent activities next to each other, and the horizontal line again to show the end of the
parallel activity.
Final Activity: The end off the Activity diagram is shown by a bull's eye symbol, also called as a final
activity.
34
5.5.6Statechart diagram
State chart diagram is used to describe the states of different objects in its life cycle. So the
emphasis is given on the state changes upon some internal or external events. These states of
objects are important to analyze and implement them accurately.State chart diagrams are very
important for describing the states. States can be identified as the condition of objects when a
particular event occurs.
Before drawing a State chart diagram we must have clarified the following points:
S e a r c h D a te
V ie w T a s ks
R e c o rd
P la y T a s k s
N o ti f i c a ti o n
35
5.5.7Deployment
Deployment Diagram
Deployment diagrams are used to visualize the topology of the physical components of a system
where the software components are deployed.
So deployment diagrams are used to describe the static deployment view of a system.
Deployment diagrams consist of nodes and their relationships.
The purpose of deployment diagrams can be described as:
Deployment Diagram:
36
Design
Unlike
client-server database management systems, the SQLite engine is not a standalone process with
which the application program communicates. Instead, the SQLite library is linked in and thus
becomes an integral part of the application program. The library can also be called dynamically.
The application program uses SQLite's functionality through simple function calls, which
reduces latency in database access as function calls within a single process are more efficient
than inter-process communication.
Features
SQLite
implements most of the SQL-92 standard for SQL but it lacks some features. A standalone
program called sqlite3 is provided which can be used to create a database, define tables within it,
insert and change rows, run queries and manage an SQLite database file. SQLite is a popular
choice for local/client SQL storage within a web browser and within a rich internet application
framework. This may be because SQLite's dynamically typed storage matches the web browser's
core languages of Javascript and XML. SQLite uses an unusual type system for an SQLcompatible DBMS. Instead of assigning a type to a column as in most SQL database systems,
types are assigned to individual values; in language terms it is dynamically typed.
37
6.CODING/CODINGTEMPLATES
6.1 JAVA CODE
1.Main Activity.java
package com.example.sampleproject;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
38
39
String month=sda[1];
String year=sda[2];
String fdate=dayofdate+"-"+month+"-"+year;
it.putExtra("ss",fdate);
startActivity(it);
}}
});
// get the current date
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
// display the current date (this method is below)
updateDisplay();
}
private void updateDisplay() {
date_.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mMonth+1).append("-")
.append(mDay).append("-")
40
.append(mYear));
}
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
return null;
}
}
2.Recording.java
package com.example.sampleproject;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
42
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class recordlist extends Activity{
ArrayList<String>al=new ArrayList<String>();
String ss;
SQLiteDatabase db;
String S1;
final Context context = this;
// set title
alertDialogBuilder.setTitle("Delete");
// set dialog message
alertDialogBuilder
.setMessage("You Want Delete")
.setCancelable(false)
.setPositiveButton("Yes",new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
43
dialog.cancel();
}
});
3.RecordList.java
package com.example.sampleproject;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
44
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class recordlist extends Activity{
ArrayList<String>al=new ArrayList<String>();
String ss;
SQLiteDatabase db;
String S1;
final Context context = this;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
ArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,al));
}
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
45
// current activity
// db.delete("recordings", "rfile=?",null);
46
47
alertDialog.show();
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add("Recording");
return super.onCreateOptionsMenu(menu);
}
}
}
48
2.Recording.Xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:orientation="horizontal" android:layout_height="match_parent"
android:background="@drawable/mike5" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"><Button
android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Start
Recording" android:onClick="startRecording" android:id="@+id/start"/><Button
android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Stop
Recording" android:onClick="stopRecording" android:id="@+id/stop"
android:visibility="gone"/></LinearLayout>
49
3.RecordList.Xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:orientation="vertical" android:layout_height="match_parent"
android:background="@drawable/enter3" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"><ListView
android:layout_height="wrap_content" android:layout_width="match_parent"
android:id="@+id/listView1"> </ListView></LinearLayout>
Method of Implementation
Implementation literally means to put into effect or to carry out. The system implementation phase of the
software deals with the translation of the design specifications into the source code. The ultimate goal of
the implementation is to write the source code and the internal documentation so that it can be verified
easily. The code and documentation should be written in a manner that eases debugging, testing and
modification. System flowcharts, sample run on packages, sample output etc. Is part of the
implementation?
An effort was made to satisfy the following goals in order specified.
Minimization of Hard-Coding.
Various types of bugs were discovered while debugging the modules. These ranged from logical
errors to failure on account of various processing cases.
50
TESTING TECHNIQUES
Testing is the process of executing a program with the intention of finding errors. The various
test strategies used for testing the software are as follows.
determining the degree of deviation that exists in the software designed from the specification;
they are listed out and are corrected.
success = folder.mkdir();
}
if (success) {
// Do something on success
} else {
// Do something else on failure
}
53
8.OUTPUT SCREENS
54
55
56
57
58
59
60
61
CONCLUSION
This is a voice based remainder on android which overcomes the legacy of routine textual
remainders and it also allows the user to store the recorded files in a separate folder in an SD
card rather than in the media gallery. Hence this is a very useful application to Android mobile
users.This application can be extended further in future adding few more extensions like
automatic playing of the task at a given time without getting into the applicationThis can also
integrated with mobile messengers to send voice remainders at a given time.
62
10.BIBLOGRAPHY
1.Herbert Schildt.2008 ,Java Complete Reference, Tata McGraw-Hill ,
7th Edition, pp.177-180 .
1. Grady Booch, James Rambaugh.1998,UnifiedModeling Language User Guide,
Publishing, chapter 8-31.
WEBSITES:
REFERRED URLS:
www.android.com
http://developer.android.com/index.html
www.google.com
http://en.wikipedia.org/wiki/SQLite
63
Addison Wesley