【Android开发】Android应用程序目录结构

原文:http://android.eoe.cn/topic/summary

 

Android开发之旅:组件生命周期吴秦 Android开发之旅:HelloWorld项目的目录结构

* HelloWorld项目的目录结构*

(这个HelloWorld项目是基于Android 2.1的)在Eclipse的左侧展开HelloWorld项目,可以看到如下图的目录结构:

Image:http://andriki.com/mediawiki/images/c/c8/Image_thumb_1.png

下面将分节介绍上面的各级目录结构。

* src文件夹*

顾名思义(src, source code)该文件夹是放项目的源代码的。打开HelloWorld.java文件会看到如下代码:
package helloworld.test;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
/* * Called when the activity is first created. * /
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

可以知道:我们新建一个简单的HelloWorld项目,系统为我们生成了一个HelloWorld.java文件。他导入了两个类android.os.Bundle,HelloWorld类继承自Activity且重写了onCreate方法。
以下说明针对没有学过Java或者Java基础薄弱的人 @Override 在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。例如,void onCreate(Bundle savedInstanceState){…….}这种写法是正确的,如果你写成void oncreate(Bundle savedInstanceState){…….}这样编译器回报如下错误——The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,以确保你正确重写onCreate方法。(因为oncreate应该为onCreate) 而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。
Activity类关注创建窗口,你可以用方法Activity子类都实现的:

setContentView(int)方法定义你的UI,和用setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关操作,我们的操作会被包装成为一个意图,然后这个意图对应有相关的activity进行处理。

ContentProvider保存数据)。

更多的关于Activity类的详细信息此系列以后的文章将做介绍,如果你想了解更多请参阅相关文档。

android.os.Bundle类:从字符串值映射各种可打包的(Parcelable)类型(Bundle单词就是捆绑的意思,所有这个类很好理解和记忆)。如该类提供了公有方法——public boolean containKey(String key),如果给定的key包含在Bundle的映射中返回true,否则返回false。该类实现了Parceable和Cloneable接口,所以它具有这两者的特性。

* gen文件夹*

该文件夹下面有个R.java文件,R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。R.java文件中定义了一个类——R,R类中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引。看我们的HelloWorld项目是不是如此,如下图:
Image:R thumb.png图2、R.java对应res

  • 通过R.java我们可以很快地查找我们需要的资源,另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。*

* Android 2.1文件夹*

该文件夹下包含android.jar文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs。通过android.jar将自己的应用程序绑定到Android SDK和Android Emulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。例如上面的HelloWorld.java源文件中的:

import android.app.Activity;import android.os.Bundle;

这里两行代码就是从android.jar导入包。

* assets*

包含应用系统需要使用到的诸如mp3、视频类的文件。

* res文件夹*

资源目录,包含你项目中的资源文件并将编译进应用程序。向此目录添加资源时,会被R.java自动记录。新建一个项目,res目录下会有三个子目录:drawabel、layout、values。

  • drawabel-?dpi:包含一些你的应用程序可以用的图标文件(* .png、* .jpg)
  • layout:界面布局文件(main.xml)与WEB应用中的HTML类同,没修改过的main.xml文件如下(HelloWorld的就没有修改过):

main.xml
<?xml version"utf-8"?>



  • values:软件上所需要显示的各种文字。可以存放多个* .xml文件,还可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml

* AndroidManifest.xml*

项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。
如果你跟我一样是ASP.NET出生或者学过,你会发现AndroidManifest.xml跟web.config文件很像,可以把它类同于web.config文件理解。 如果你不是,你可以这样理解——众所周知xml是一种数据交换格式,AndroidManifest.xml就是用来存储一些数据的,只不过这些数据时关于android项目的配置数据。
HelloWorld项目的AndroidManifest.xml如下所示:
<?xml version"utf-8"?>










关于AndroidManifest.xml现在就讲这么多,此系列后面的文章将单独详细介绍。

* default.properties*

记录项目中所需要的环境信息,比如Android的版本等。 HelloWorld的default.properties文件代码如下所示,代码中的注释已经把default.properties解释得很清楚了:
default.properties# This file is automatically generated by Android Tools.

Do not modify this file -- YOUR CHANGES WILL BE ERASED!

This file must be checked in Version Control Systems.

To customize properties used by the Ant build system use,

"build.properties", and override values to adapt the script to your

project structure.

Indicates whether an apk should be generated for each density.

split.density=false

Project target.

target=android-7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...

鉴权鉴权是指验证用户是否拥有访问系统的权利—鉴定权限。cookie、session和token为什么会有cookie、session和token&#xff1f;1、 http是无状态协议什么是无状态呢&#xff1f;答&#xff1a;当前请求和上一次或者下一次请求是没有任何关系的&#xff0c;好处是速度快&#…

程序有并发错误?NO WAY!

什么是并发错误并发是指程序能够交替执行不同的任务,以达到"同时执行效果"&#xff0c;加快程序的运行效率。但是并发也会导致一系列问题&#xff0c;以变量1赋值为例&#xff0c;由于操作实际由多条指令组成&#xff0c;不同任务执行指令的顺序可能是交错的&#xf…

好好珍惜今生,不要期待来世……

亲情经不起冷漠&#xff0c;爱情经不起谎言&#xff0c;友情经不起虚伪。再好的缘份也经不起敷衍&#xff0c;再深的感情也需要珍惜。没有绝对的傻瓜&#xff0c;只有愿为你装傻的人&#xff0c;原谅你的人&#xff0c;是不愿失去你的世界。一辈子真的好短好短…… 有多少人说好…

NET问答: C# 中是否有 format json 的类库?

咨询区 mpen&#xff1a;我在寻找一个 function&#xff0c;它能够接收 string 格式的json&#xff0c;并且能够以 换行缩进 的形式输出&#xff0c;比如&#xff1a;{"status":"OK", "results":[ {"types":[ "locality", &…

图像柔光效果(SoftGlow)的原理及其实现。

图像柔光效果在很多商业软件中都有实现&#xff0c;比如美图秀秀&#xff0c;光影魔术手等。其能针对原始图像产生一副新的比较平滑感觉光线比较柔和的效果&#xff0c;给人一种朦胧美&#xff0c;如下面几幅图所示&#xff1a; 目前&#xff0c;关于该算法的可控参数&#xff…

中小学招生强化就近入学;首次全女性太空行走取消;苹果付费新闻APP奔溃;NASA火星上发现鹅卵石;这就是今天的大新闻...

今天是3月27日农历二月廿一今天星期三有点闷已经开始用空调了下面是今天的大新闻中小学招生强化就近入学&#xff08;北京商报&#xff09;中小学秋季入学新生招生已经陆续开始&#xff0c;近日&#xff0c;教育部办公厅也紧随其后&#xff0c;印发了《关于做好2019年普通中小学…

python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)

Python第三方库之openpyxl(2)简单的使用写一个工作簿>>> from openpyxl importWorkbook>>> from openpyxl.compat importrange>>> from openpyxl.utils importget_column_letter>>>>>> wb Workbook()>>>>>> de…

[翻译]在GC上加入DPAD

本文90%通过机器翻译&#xff0c;另外10%译者按照自己的理解进行翻译&#xff0c;和原文相比有所删减&#xff0c;可能与原文并不是一一对应&#xff0c;但是意思基本一致。译者水平有限&#xff0c;如果错漏欢迎批评指正译者Bing Translator、InCerry&#xff0c;另外感谢Hex、…

SQL 结合CASE WHEN 实现二维统计

在开发中往往要用到类似下面的二维统计&#xff1a; abtype15465type25454在SQL中使用CASE WHEN 语句可以很轻松的实现&#xff1a; SELECT SUM(CASE WHEN typetype1 THEN 1 ELSE 0 END) AS a ,SUM(CASE WHEN typetype2 THEN 1 ELSE 0 END) AS b FROM Table1 转载于:https://ww…

phpfind mysql怎么用_MySQL 的 find_in_set 函数使用方法

举个例子来说&#xff1a;有个文章表里面有个type字段&#xff0c;它存储的是文章类型&#xff0c;有 1头条、2推荐、3热点、4图文...1,12,13 等等 。现在有篇文章他既是 头条&#xff0c;又是热点&#xff0c;还是图文&#xff0c;type中以 1,3,4 的格式存储。那我们如何用sql…

美国Thinkfun的“编程三剑客”少儿编程从入门到精通

▲数据汪特别推荐点击上图进入玩酷屋学编程现在有多火&#xff0c;小木就不多说啦&#xff01;很多爸爸妈妈都想让小朋友早点接触编程&#xff0c;掌握这门未来世界的通用“语言”&#xff0c;但又怕太早使用电脑、iPad等电子产品&#xff0c;影响孩子视力。今天给大家推荐一套…

解决scrollViewDidScroll do not work的方法

2019独角兽企业重金招聘Python工程师标准>>> 别忘记在在包含了scrollView的ViewController中的viewDidload方法中设置scrollView的delegate [self.scrollView setDelegate:self]; 关于delegate&#xff1a;一般一个ui的delegate都在其父类中指定 view.delegateself…

基于ABP落地领域驱动设计-05.实体创建和更新最佳实践

围绕DDD和ABP Framework两个核心技术&#xff0c;后面还会陆续发布核心构件实现、综合案例实现系列文章&#xff0c;敬请关注&#xff01; ABP Framework 研习社&#xff08;QQ群&#xff1a;726299208&#xff09; ABP Framework 学习及实施DDD经验分享&#xff1b;示例源码、…

mysql isam 食物_MySQL常用存储引擎之MyISAM

1. mysql 5.5之前版本默认存储引擎1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表1.2 myisam是mysql大部分系统表和临时表使用的存储引擎2. myisam存储引擎表由myd和myi组成2.1 myd存储数据信息2.2 myi存储索引信息2.3 frm记录表结构的&#xff0c;所有存储引擎都有…

每日一笑 | 史上最贴心的骗子

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

系列文章基于ABP落地领域驱动设计-01.全景图基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则基于ABP落地领域驱动设计-05.实体创建和更新最佳实践…

Python 学习笔记(三)Function

python引用变量的顺序&#xff1a; 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 1. Scope: • If a variable is assigned inside a def, it is local to that function.• If a variable is assigned in an enclosing def, it is non…

python xpath定位不到_Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)...

#codingutf-8Created on 2016-7-20author: JenniferProject:登录百度账号from selenium importwebdriverimporttimedriver webdriver.Firefox()driver.get("http://www.baidu.com/")time.sleep(3)#点击登录&#xff1a;有些name为tj_login的元素为不可见的&#xff0…

基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则

dotNET兄弟会 专注.Net开源技术及跨平台开发&#xff01;致力于构建完善的.Net开放技术文库&#xff01;为.Net爱好者提供学习交流家园&#xff01;公众号 围绕DDD和ABP Framework两个核心技术&#xff0c;后面还会陆续发布核心构件实现、综合案例实现系列文章&#xff0c;敬请…

我国最新十大黑科技发布,颠覆你的想象!

全世界只有3.14 % 的人关注了数据与算法之美人工智能的飞速发展&#xff0c;让“黑科技”一词深入人心。目不暇接的各种前沿技术&#xff0c;一再刷新人们的认知世界。所谓“黑科技”&#xff0c;不仅仅要够炫酷&#xff0c;更要有足够的“生活温度”&#xff0c;实现真正的人性…