android工程的建立,第一个Android项目HelloWorld的建立及剖析
1、建立一个简单的Hello World程序
步骤1:启动Eclipse,选择 New—>Other,如下图所示
步骤2:在出现的窗口中选择Android Project,如下图所示:
步骤3:此时会出现如下的对话框,填入相应的项目属性,对应如下:
名 称
属 性 含 义
Project Name
工程名字,物理上就是最外层文件夹的名字
Build Target
应用程序针对的目标设备
Application Name
应用程序的名称,将显示在应用程序的标题栏
Package Name
包名称
Create Activity
是否让ADT自动创建一个默认的继承自Activity的类,该类是一个启动和控制程序的类
Min SDK Version
应用程序所要求的API版
创建新的Android项目
步骤4:点击Finish按钮完成项目的创建,在包管理器中展开项目后如下图所示:
2、运行创建的Hello World
在项目名上单击鼠标右键,然后依次选择“Run As/Android Application”即可运行刚才建立的HelloWorld项目。
3、项目结构的剖析
首先看下刚才建立的Android项目的结构,如下图所示:
从上图中可以看出,新创建的Android项目包含了src、gen、asset、res等目录,下面就这些目录分别介绍:
Src目录
从目录名就可猜测出这个目录是用来存放程序源码的,基本上一个Android应用程序的程序逻辑以及功能代码都是写在该目录下的,不同功能的类可以通过
Java包的机制来进行区分。而我们创建的Hello World工程由于勾选了Create
Activity选项,所以在该目录下生成了继承自Activity的启动与控制程序的类HelloWorld, 打开自动生成的
HelloWorld.java源文件,内容如下:
上述代码重写了Activity的onCreate回调方法,在onCreate方法中调用基类的onCreate方法,然后指定用户界面为R.layout.main,对应的文件为res/layout/main.xml.
从上述代码中,大致可以猜测出当该类初次被创建的时候,会将当前的View设置为R.layout.main,即当前的界面是
R.layout.main。
Gen目录
Gen目录是ADT插件帮我们生成的,并在该目录与主程序在同一级目录下生成R.Java文件(本程序在cnblogs.com包下),打开文件查看R类内容:
这时候可以知道R.layout.main原来是一个16进制数,而从HelloWorld.java源文件来看,R.layout.main理应指向的是一个界面组件类,此处反而更像是个id,却又是作何解释?
其实,在Android应用程序中,ADT生成的R类是一个指向资源的类,更像是一个字典。在该字典中,包含了用户界面、图片、字串等各种资源对应的编
号,
即以16进制表示的编号。所以由此可知,R.layout.main其实指向的是res/layout目录下的main.xml界面描述性文件,该文件会
在下面进行具体介绍。之所有用R类,一个好处是在于程序在编译的时候会对该类进行查阅,对于该类中不存在即应用程序中没有使用到的资源则不会打包编译进
去,从而对程序进行瘦身。
Assets目录
该目录目前是空的,因为我们没有放任何东西进去(貌似是废话)!那么该目录干啥用的呢?其实呢,在这个目录可以放很多东西,诸如应用程序中使用到的多媒
体文件(音频或者视频文件)、图片或者文本文件等。其同后面即将介绍的res目录相似,也是存放资源文件的目录,但与res目录的不同之处在于res会被
编译器所编译,而assets则不会。也就是说应用程序运行的时候,res中的内容会在启动的时候载入内存,asset只有在被用到的时候才会载入内存,
所以一般将一些不经常使用到的大资源文件存放在该目录下。
res目录
在该目录下主要是存放整个应用程序的资源文件,该目录按照资源的种类默认分为三个子目录,分别为drawable、layout和values目录:
Ø drawable子目录
在该子目录下主要存放的是一些图片格式文件,支持的格式有.Png、.9.png和.jpg等位图文件。
Ø layout子目录
在该子目录下主要存放的是界面布局的XML文件,在Android的应用程序中有两种方式生成用户界面。一种是通过静态的界面描述文件,另外一种就是通过Java
代码动态生成用户界面。这时候让我们看下上述R.layout.main指向的main.xml文件的内容:
上述内容中第一行指出了xml文档的版本以及编码方式,第二行中的LinearLayout指出了界面的布局方式为线性布局,xmlns:android
属性指出了使用的android架构,这个属性是必须的,每个界面描述性文件中必须有一个架构申明。第三行则指出了界面的布局是垂直布局,第四行与第五行
指出宽和高将撑满整个父容器。在该界面中只定义了一个TextView组件,并且该组件宽度撑满父容器,高度则刚好适合,显示的文本引用的是values
目录下string.xml中hello字符串变量(值为Hello
World,HelloWorld!,即运行时候显示的那几个字),其中@符号表示引用。
Ø values子目录
该目录中包含了所有的XML格式的参数描述文件,如string.xml字符串描述文件、color.xml颜色描述文件、style.xml样式描述文件和array.xml数组描述文件等。
AndroidManifest.xml文件
应用程序描述文件,有Java开发经验的对这个应该有种似曾相识的感觉吧~其内容如下所示:
上述内容中第一行指出xml文档版本以及编码方式,第二行指出了主程序所在的包名,这样在activity的android:name就直接设置成
.HelloWorld。如果我们又添加一个activity类,但是该类处于包cnblogs.com.cn下,那么该activity添加到上述
xml文件中时候android:name需要设置成
.cn.HelloWorld2。四到五行则指出了版本信息,第六行的application节点有且仅有一个,其icon属性指出了应用程序安装完后的
桌面图标,这儿通过@符号引用res/drawable目录下的 icon.png图片。在application节点之间,是我们程序中
activity类,所有的添加的activity类可以通过写在该描述性文件中进行注册。从上图中看出,该activity的 intent-
filter属性指出该activity类是默认程序启动时候第一个启动的窗口。
default.properties文件
该文件打开后,你会发现没有注释的文字只有一行,即指定了应用程序针对的目标设备以及相应的API Level。
android工程的建立,第一个Android项目HelloWorld的建立及剖析相关推荐
- 《教我兄弟学Android逆向01 编写第一个Android程序》
前言 之所以准备写这一系列逆向的教程是因为有一些同学私信我说自己想学习Android逆向但是不知道怎么去学习 包括自己身边的一些计算机专业的同学 在大学里面老师讲的那些东西要么是自己不感兴趣 要么是自 ...
- 《教我兄弟学Android逆向03 破解第一个Android游戏 》
上一篇 <教我兄弟学Android逆向02 破解第一个Android程序 >我带着你破解了我们自己编的一个小程序 里面我分析并讲解的一些smali语法你都记住了 给你布置的课后作业你发 ...
- 一个android工程生成两个aar,android studio生成aar包并在其他工程引用aar包(示例代码)...
1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...
- android工程引入unity,Unity导出Android Studio工程
在出游戏包的时候,如果需要接入sdk,一般都不会直接在unity里操作,而是导出android工程,在android工程里操作,从unity5.3开始已经支持导出android studio工程,相比 ...
- android工程中的软件,通过Android Studio创建Android应用程序(附带解析)
这一节我们主要来创建一个简单的 Android 的应用程序. 创建 HelloWorld 工程 启动 Android Studio,依次选择 File --> New --> New Pr ...
- LeadTools Android 入门教学——运行第一个Android Demo
LeadTools 有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一 ...
- 2.Maven特点,Maven约定,建立第一个Maven项目
1 Maven是跨平台的项目管理工具.主要服务于基于java平台的项目构建,依赖管理和项目信息管理. 项目构建 清理à编译à测试à报告à打包à部署 理想的项目构建: 高度自动化 跨平台 可重用的 ...
- Android JetPack架构篇,一个实战项目带你学懂JetPack
第五届世界互联网大会昨日开幕,来自76个国家的1500余位嘉宾出席大会.腾讯公司董事会主席兼首席执行官马化腾在大会开幕式演讲中表示,全球产业都在进行数字化,在此期间机遇挑战并存,产业互联网机会巨大. ...
- 如何建立java ssm工程_如何搭建一个ssm项目
1.创建一个普通的maven项目,引入Spring MVC 的pom依赖 2.添加Spring的配置(xml方式applicationContext.xml)扫描除了controller包之外的包(扫 ...
最新文章
- html实现以秒为单位倒数,跳转新的页面
- HihoCoder 1513 : 小Hi的烦恼
- 烂泥:文件服务器搭建与使用详解,minio文件服务器搭建(单机版)
- Oracle_双机备份_资料
- 华为数通HCIE面试题目解密系列之RSTP边缘端口
- Java 截取反斜杠--java使用split拆分特殊字符
- vue 字符串分割_嗯哼vue组件taginput包教不包会
- python库有什么用_Python程序员必知什么 常用的Python库有哪些
- 框架设计之菜鸟漫漫江湖路系列 开篇
- django 1.8 官方文档翻译:7-3 Django管理文档生成器
- ionic4的input调用手机键盘将换行改成搜索
- 深入解读Docker底层技术cgroup系列(1)——cgroup介绍
- 数学分析教程(科大)——1.3笔记+习题
- 翻出过去的一个多彩泡泡屏保特效(JS+CSS版)
- 6个好用免费的LiDAR数据处理软件【2021最新】
- 戴尔linux系统改win7,戴尔一体机win10改win7系统及bios设置教程(支持8代cpu)
- java多线程概念、实现、状态和生命周期、同步、通信
- zabbix数据采集方式
- python提升篇(五) -----实例练习第04day
- ajax检测用户名重复无效,用ajax实现检测注册用户名是否重复的完整例子
热门文章
- 【报告分享】数据资产化之路----数据资产的估值与行业实践.pdf
- windows桌面远程连接ubuntu xrdp成功显示
- 腾讯广告算法大赛“视”界杯专题直播来袭,腾讯专家助你赛场争先!
- Keras-Sequential模型(2)
- Redis基础(二)——通用命令和配置
- 机器学习2/100天-简单线性回归
- python中wraps_【Python】Flask中@wraps的使用
- python中监控错误的语句_Python学习_07_错误、异常
- java tomcat数据库连接池_tomcat配置数据库连接池2
- [Ext JS 7]ClassRequire错误解决