创新实践安卓软件开发报告 本文关键词:实践,创新,报告,开发,软件
创新实践安卓软件开发报告 本文简介:沈阳理工大学课程设计专用纸No18摘要从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓AppStore给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Andr
创新实践安卓软件开发报告 本文内容:
沈阳理工大学课程设计专用纸No18
摘要
从没有比现在更好的时机,能通过为Android编写程序,将我们的创意带人生活中。安卓App
Store给了我们巨大的机会,程序的开发也从未像如今这样简单和广泛。你不仅能够拥有数百万的潜在客户还能拥有尖端的开发工具和硬件。2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。而很少受到早期手持设备的硬件和软件限制。
本设计在对Android开发有初步了解的情况下,设计一个有代表性的Android商业App,通过对商业实例的学习,了解真实项目的系统构架、引擎设计,了解声音、视频、图片处理等相关的编程技术要点、以便在实际的游戏项目开发中借鉴和综合应用这些知识。
关键字:Android;APP;
目录
1
开发工具与环境1
1.1
下载并安装eclipse1
1.2
下载并安装jdk1
1.3开发环境简介1
1.4开发环境搭建2
1.4.2安装Eclipse4
1.4.3
安装Android
SDK4
1.4.4
ADT安装创建AVD4
2
系统的设计与分析5
2.1
Android系统的概述5
2.1.1应用层5
2.1.2应用程序框架5
2.1.3系统运行库6
2.1.4
Linux内核7
2.3
日历流程图7
3
系统详细设计8
3.1
日历其实是由3个预制的数据集组成8
3.2
视图的生成8
3.3当所示日期发生选择变更是的视图更新10
3.4
启动和运行13
4
运行结果14
4.1
系统启动14
4.2
进入日历14
4.4
退出应用15
5
结论16
参考文献17
1
开发工具与环境
1.1
下载并安装eclipse
Eclipse
版本有要求:The
“Eclipse
Classic“version
is
recommended.
Otherwise,a
Java
or
RCP
version
of
Eclipse
is
recommended.
1.下载eclipse只需登录到http://www.jsfw8.com/javase/downloads下载最新的JDK安装程序。
然后双击刚下载的JDK安装程序jdk-7u21-windows-i586,根据提示将JDK安装到默认目录。
右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:/Program
Files/Java/jdk1.7.0_21”的环境变量。
再打开Path环境变量,在最后加上“C:/Program
Files/Java/jdk1.7.0_21/bin;”,单击“确定”按钮即可。
1.3开发环境简介
JDK(Java
Development
Kit)是Sun
Microsystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的Java
SDK。JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(Java
Development
Kit,JDK)。
Android
SDK即软件开发工具包(software
development
kit)。被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。因此Android
SDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。
1.4开发环境搭建
下载安装Java开发包(JDK)。选择“windows
offline
installation,multi-language”,根据屏幕提示完成安装。
打开计算机>点右键>属性>高级系统设置>环境变量,在系统变量中添加。
图1.1环境变量
新建JavaHome:C:/Program
Files/Java/jdk1.6.0_10,如图1.2。
图1.2JavaHome
新建CLASSPATH:.;%JavaHome%/lib/dt.jar;%JavaHome%/lib/tools.jar;,如图1.3。
图1.3
CLASSPATH
编辑Path,在变量值前添加:%JavaHome%/bin;,如图1.4。
图1.4
Path
在CMD窗体中输入java
–version,如果屏幕出现如图1.5一样的代码信息,说明JDK安装成功了。
图1.5
CMD窗体
1.4.2安装Eclipse
选择标有“eclipse
IDE
for
java
developers“的文件进行安装。进入解压后的目录,就可以看到一个名为“eclipse.exe”的可执行文件,双击此文件直接运行,eclipse
能自动找到用户先期安装的JDK路径
1.4.3
安装Android
SDK
将下载的android-sdk压缩包解压为文件放于自选位置。在Eclipse中选择Windows>Preferences>Android>Browse找到解压文件>Apply>OK。打开环境变量,编辑Path,在变量值前添加:C:
/java/adt-bundle-windows-x86-20130522/sdk/tools;,如图1.6。
图1.6
Path
1.4.4
ADT安装创建AVD
打开SDK
Manager.exe,选择tools>Manage
AVDs,在Android
Virtual
Device
Manager中点击New,输入AVD的信息,点OK完成AVD的创建。如图1.7。
图1.7
AVD
2
系统的设计与分析
2.1
Android系统的概述
Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图:
图2.1
Android
系统构架
2.1.1应用层
Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
2.1.2应用程序框架
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序,
它包括列表(lists),网格(grids),文本框(text
boxes),按钮(buttons),
甚至可嵌入的web浏览器;
内容提供器(Content
Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),
或者共享它们自己的数据:资源管理器(Resource
Manager)提供
非代码资源的访问,如本地字符串,图形,和布局文件(
layout
files
);通知管理器
(Notification
Manager)
使得应用程序可以在状态栏中显示自定义的提示信息;
活动管理器(
Activity
Manager)
用来管理应用程序生命周期并提供常用的导航回退功能。
2.1.3系统运行库
系统运行库包括程序库和Android运行库。首先是程序库,
Android
包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过
Android
应用程序框架为开发者提供服务。以下是一些核心库:系统
C
库
-
一个从
BSD
继承来的标准
C
系统函数库(
libc
),
它是专门为基于
embedded
linux
的设备定制的;媒体库
-
基于
PacketVideo
OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
;
Surface
Manager
-
对显示子系统的管理,并且为多个应用程序提
供了2D和3D图层的无缝融合;
LibWebCore
-
一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图;SGL
-
底层的2D图形引擎;3D
libraries
-
基于OpenGL
ES
1.0
APIs实现;该库可以使用硬件
3D加速(如果可用)或者使用高度优化的3D软加速;FreeType
-位图(bitmap)和矢量(vector)字体显示;SQLite
-
一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。其次是Android
运行库,Android
包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。
Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中
的
“dx“工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
2.1.4
Linux内核
Android
的核心系统服务依赖于
Linux
2.6
内核,如安全性,内存管理,进程管理,
网络协议栈和驱动模型。
Linux
内核也同时作为硬件和软件栈之间的抽象层。
2.3
日历流程图
iPlanet日历S2erver2.x
Run
db_recover
下载和安装Calender
Server5.1.1
运行db_upgrade
运行les2milgrate
Sun
ONE
下载和安装Calender
Server6.x
运行cs5migrate
Sun
Java
System
Calender
Server
6
Netscape
Calender
Server4.x
下载和安装Calender
Server5.1.1
运行ncs4migrate
图2.2
流程图
3
系统详细设计
3.1
日历其实是由3个预制的数据集组成
日历整个系统是由3个GridView组成,3个GridView分别预制当前月、上个月和下个月当发生滑动事件的时候产生替换,同时在加载时重新生成。
private
Context
mContext
=
BaseCalendar.this;
private
GridView
title_gView;
private
GridView
gView1;//
上一个月
private
GridView
gView2;//
当前月
private
GridView
gView3;//
下一个月
//
private
GridView
gView1;
boolean
bIsSelection
=
false;//
是否是选择事件发生
private
Calendar
calStartDate
=
Calendar.getInstance();//
当前显示的日历
private
Calendar
calSelected
=
Calendar.getInstance();
//
选择的日历
private
Calendar
calToday
=
Calendar.getInstance();
//
今日
private
CalendarGridViewAdapter
gAdapter;
private
CalendarGridViewAdapter
gAdapter1;
private
CalendarGridViewAdapter
gAdapter3;
//
顶部按钮
private
Button
btnToday
=
null;
private
RelativeLayout
mainLayout;
//
private
int
iMonthViewCurrentMonth
=
0;
//
当前视图月
private
int
iMonthViewCurrentYear
=
0;
//
当前视图年
private
int
iFirstDayOfWeek
=
Calendar.MONDAY;
private
static
final
int
mainLayoutID
=
88;
//
设置主布局ID
private
static
final
int
titleLayoutID
=
77;
//
title布局ID
private
static
final
int
caltitleLayoutID
=
66;
//
title布局ID
private
static
final
int
calLayoutID
=
55;
//
日历布局ID
3.2
视图的生成
生成一个主视图
//
生成内容视图
private
View
generateContentView()
{
//
创建一个垂直的线性布局(整体内容)
viewFlipper
=
new
ViewFlipper(this);
viewFlipper.setId(calLayoutID);
mainLayout
=
new
RelativeLayout(this);
//
创建一个垂直的线性布局(整体内容)
RelativeLayout.LayoutParams
params_main
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
mainLayout.setLayoutParams(params_main);
mainLayout.setId(mainLayoutID);
mainLayout.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout
layTopControls
=
createLayout(LinearLayout.HORIZONTAL);
//
生成顶部按钮布局
generateTopButtons(layTopControls);
//
生成顶部按钮
(上一月,下一月,当前月)
RelativeLayout.LayoutParams
params_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_title.topMargin
=
5;
//
params_title.addRule(RelativeLayout.ALIGN_PARENT_TOP,20);
layTopControls.setId(titleLayoutID);
mainLayout.addView(layTopControls,params_title);
calStartDate
=
getCalendarStartDate();
setTitleGirdView();
RelativeLayout.LayoutParams
params_cal_title
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal_title.addRule(RelativeLayout.BELOW,titleLayoutID);
//
params_cal_title.topMargin
=
5;
mainLayout.addView(title_gView,params_cal_title);
CreateGirdView();
RelativeLayout.LayoutParams
params_cal
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
params_cal.addRule(RelativeLayout.BELOW,caltitleLayoutID);
mainLayout.addView(viewFlipper,params_cal);
LinearLayout
br
=
new
LinearLayout(this);
RelativeLayout.LayoutParams
params_br
=
new
RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT,1);
params_br.addRule(RelativeLayout.BELOW,calLayoutID);
br.setBackgroundColor(getResources().getColor(R.color.calendar_background));
mainLayout.addView(br,params_br);
return
mainLayout;
}
3.3当所示日期发生选择变更是的视图更新
在主视图所示日期改变时更新,主要代码如下:
//
根据改变的日期更新日历
//
填充日历控件用
private
void
UpdateStartDateForMonth()
{
calStartDate.set(Calendar.DATE,1);
//
设置成当月第一天
iMonthViewCurrentMonth
=
calStartDate.get(Calendar.MONTH);//
得到当前日历显示的月
iMonthViewCurrentYear
=
calStartDate.get(Calendar.YEAR);//
得到当前日历显示的年
String
s
=
calStartDate.get(Calendar.YEAR)
+
“-“+
NumberHelper.LeftPad_Tow_Zero(calStartDate
.get(Calendar.MONTH)
+
1);
btnToday.setText(s);
//
星期一是2
星期天是1
填充剩余天数
int
iDay
=
0;
int
iFirstDayOfWeek
=
Calendar.MONDAY;
int
iStartDay
=
iFirstDayOfWeek;
if
(iStartDay
==
Calendar.MONDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.MONDAY;
if
(iDay
<
0)
iDay
=
6;
}
if
(iStartDay
==
Calendar.SUNDAY)
{
iDay
=
calStartDate.get(Calendar.DAY_OF_WEEK)
-
Calendar.SUNDAY;
if
(iDay
<
0)
iDay
=
6;
}
calStartDate.add(Calendar.DAY_OF_WEEK,-iDay);
}
private
Calendar
getCalendarStartDate()
{
calToday.setTimeInMillis(System.currentTimeMillis());
calToday.setFirstDayOfWeek(iFirstDayOfWeek);
if
(calSelected.getTimeInMillis()
==
0)
{
calStartDate.setTimeInMillis(System.currentTimeMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
else
{
calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
}
return
calStartDate;
}
public
class
TitleGridAdapter
extends
BaseAdapter
{
int[]
titles
=
new
int[]
{
R.string.Sun,R.string.Mon,R.string.Tue,R.string.Wed,R.string.Thu,R.string.Fri,R.string.Sat
};
private
Activity
activity;
//
construct
public
TitleGridAdapter(Activity
a)
{
activity
=
a;
}
@Override
public
int
getCount()
{
return
titles.length;
}
@Override
public
Object
getItem(int
position)
{
return
titles[position];
}
@Override
public
long
getItemId(int
position)
{
return
position;
}
@Override
public
View
getView(int
position,View
convertView,ViewGroup
parent)
{
LinearLayout
iv
=
new
LinearLayout(activity);
TextView
txtDay
=
new
TextView(activity);
txtDay.setFocusable(false);
txtDay.setBackgroundColor(Color.TRANSPARENT);
iv.setOrientation(1);
txtDay.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
int
i
=
(Integer)
getItem(position);
txtDay.setTextColor(Color.WHITE);
Resources
res
=
getResources();
if
(i
==
R.string.Sat)
{
//
周六
txtDay.setBackgroundColor(res.getColor(R.color.title_text_6));
}
else
if
(i
==
R.string.Sun)
{
//
周日
txtDay.setBackgroundColor(res.getColor(R.color.title_text_7));
}
else
{
}
txtDay.setText((Integer)
getItem(position));
iv.addView(txtDay,lp);
return
iv;
}
}
}
3.4
启动和运行
当你点击运行程序是的加载代码
TextView
txtDay
=
new
TextView(activity);//
日期
txtDay.setGravity(Gravity.CENTER_HORIZONTAL);
//
判断是否是当前月
if
(iMonth
==
iMonthViewCurrentMonth)
{
txtToDay.setTextColor(resources.getColor(R.color.ToDayText));
txtDay.setTextColor(resources.getColor(R.color.Text));
}
else
{
txtDay.setTextColor(resources.getColor(R.color.noMonth));
txtToDay.setTextColor(resources.getColor(R.color.noMonth));
}
int
day
=
myDate.getDate();
//
日期
txtDay.setText(String.valueOf(day));
txtDay.setId(position
+
500);
iv.setTag(myDate);
LinearLayout.LayoutParams
lp
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtDay,lp);
LinearLayout.LayoutParams
lp1
=
new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
iv.addView(txtToDay,lp1);
//
日期结束
4
运行结果
4.1
系统启动
进入系统后,系统加载如图4.1。
图4.1
系统初始化
4.2
进入日历
进入日历主界面(可滑动进行翻页查看其他日期点击添加备注等功能),如图4.2
图4.2
主界面
4.4
退出应用
单击MENU键,退出应用。如图4.3。
图4.3
退出App
5
结论
日历是一款经典的小应用它既有简单易学的特性,而且界面美观;2007年11月5日,互联网巨头Google宣布依靠android系统进军手机操作系统领域后,几年来android一路高歌,拥有越来越多的用户群体,为顺应时代潮流,本次创新实践周的题目是一款能够在android手机上运行的小应用。
通过这次课程设计,我学到了很多新的知识,同时也锻炼了我的综合运用所学的知识,解决问题的能力,也提高我查阅文献资料、对程序整体的把握等其他能力与水平。在课程设计过程中,在小组成员的讨论中,不断地对源程序进行改进与完善,修改了以往扫雷程序的界面,界面更加漂亮。并且在编写的过程中,各种组件的运用,各种算法的应用,各种控件的利用我都是随着课程设计的不断深入而不断熟悉并逐步掌握的。
总而言之,在创新实践周中,我对android平台和游戏开发等领域都有了一定的了解。其中所学到的知识,将成为我今后学习工作当中的监视基础。希望以后还会有这种锻炼自己的实践机会。
参考文献
[1]
景保玉.2010中国移动应用开发现状与趋势大调查.2011年01月12日:10~23
[2]
Michael
J.Young.
轻松搞定XML.林嘉胜译.
清华大学出版社,2001年01月08日:12~58
[3](英)Herbert
Schildt
Java参考大全(J2SE
5
Edition).清华大学出版社.2010年:1~58
[4]
Mark
L.Murphy.Android开发入门教程.人民邮电出版社,2010年12月:1~20
[5]
郭宏志.Android
应用开发详解[M].北京:电子工业出版社.2010-10-2
[6]
余志龙.Google
Android
SDK
开发范例大全[M].北京:人民邮电出版社.2009-7-1
[7]
靳岩,姚尚朗.Google
Android
开发入门与实战[M].北京:人民邮电出版社.2009-7-1
篇2:超详细图文教你制作安卓手机主介绍题
超详细图文教你制作安卓手机主介绍题 本文关键词:机主,教你,图文,制作,介绍
超详细图文教你制作安卓手机主介绍题 本文简介:www.jsfw8.com超详细图文教你制作手机主题要制作个性专属的主题在你的爱机上应用,你手机必须要有ROOT权限,取权限方法。教程正文:①准备好7张你喜欢的图片或照片,电脑端安装有Photoshop或美图秀秀等图片修改美化软件,电脑互联网搜索下即可有惊喜的,就不再上传了。----------②教
超详细图文教你制作安卓手机主介绍题 本文内容:
www.jsfw8.com
超详细图文教你制作手机主题
要制作个性专属的主题在你的爱机上应用,你手机必须要有ROOT权限,取权限方法。
教程正文:
①准备好7张你喜欢的图片或照片,电脑端安装有Photoshop或美图秀秀等图片修改美化软件,电脑互联网搜索下即可有惊喜的,就不再上传了。
----------
②教程用美图秀秀做参考,Photoshop软件应用也如是相同。
……
1,将准备好的图片或照片,用软件打开,如图所示:
------------------------------
------------------------------
2,将图片的分辨率用软件修改为:960x854的规格尺寸。如图所示:
------------------------------
------------------------------
修改好图片(照片)的尺寸后,记得保存图片选择:png格式保存,如图所示:
------------------------------
------------------------------
3,使用裁剪工具把图片裁剪一张854x480的图片,这张图片是作为背景的~短信背景,计算器背景,TrackID的背景等等…
如图所示:
------------------------------
------------------------------
图片裁剪好后依然保存为:png格式放置备用。
再次打开上张图片,还需要裁剪修改2张尺寸小些的图片,尺寸规格不要太大,如图所示:
------------------------------
-----------------------------
要2张,就保存2次,格式依然是:png,再将其中1张用软件调暗些图片的亮度,这样在制作好的主题使用时,比如打开信息啊之类的就不会太亮,导致看不清文字。
每张要的图片都如上修改保存好
-------------------------------
保存好的图片要重新命名:
1,960x854的是壁纸,名字修改为black_wallpaper.png
2,854x480的是背景,名字修改为black_application_background.png
3,320x180的是主题选择页面的预览图名字修改为black_preview_focused.png和black_preview_normal.png两张,总共就四张图片。
(还有绿色,橘色,红色,粉色,蓝色照原主题包的名字修改好即可)
-------------------------------
还有横屏的图片…横屏是不需要壁纸图片的~只需要三张就好。
===============
用RE管理器进系统(system/app)里提取主题文件:DefaultThemes.apk,提取出来复制在电脑任意位置,用winrar解压打开软件,如图:
------------------------------
-----------------------------
进入res,如图所示:
-----------------------------
----------------------------
drawable-hdpi代表是竖屏的,drawable-land-hdpi代表是横屏的.如图所示:
--------------------------
--------------------------
进入drawable-hdpi文件夹里面,把那些图片的名字修改成里面一样就可以了,然后替换文件夹里面的图
片。竖屏和横屏都要换,不然你竖屏是一张图片,横屏是另外一张图片。替换好之后重新打开DefaultThemes.apk,打开方式还是Winrar,然后把res整个文件夹拖回压缩包,这时会跳出一个选项,存储方式要选择
为存储。如图所示:
----------------------------
转自:
www.jsfw8.com
贡献者:
康康
www.jsfw8.com