Android 项目在Eclipse中的目录结构

Android工程目录
  
如果使用Eclipse插件ADT开发应用程序,必须要熟悉工程的目录结构,清楚各个目录下面放置的是什么东西。Android工程主要的目录有:src、bin、gen、res等。

不同的Android平台目录结构是不同的,下面以Android 2.3.3 为例介绍Android 在Eclipse 中的目录结构,下面是目录结构:

这里01_项目名当然就是我们的项目名了,下面分别对各目录进行解析。

 

1. Src:

该目录中存放的是该项目的源代码,这个目录包含了你即将创建的Java源代码文件,这个目录里的文件是根据package结构管理的,它与普通java项目中的/src目录很相似。

如上图所示,其中cn.com.qiang.helloworld 是包名,MainActivity.java 是默认的源代码文件,我们可以打开看一下里面的代码:

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. package cn.com.qiang.helloworld;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.view.Menu;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_main);  
  13.     }  
  14.   
  15.   
  16.     @Override  
  17.     public boolean onCreateOptionsMenu(Menu menu) {  
  18.         // Inflate the menu; this adds items to the action bar if it is present.  
  19.         getMenuInflater().inflate(R.menu.main, menu);  
  20.         return true;  
  21.     }  
  22.       
  23. }  

Activity 就是我们大名鼎鼎的Android 四大组件之一,主要实现我们打开app 所看到的界面。 

2.Gen:

自动生成的文件目录。该目录下的文件全部都是ADT自动生成的,一般并不需要去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,为项目中用户界面、字符串、图片等资源都会在该类中创建其惟一的ID,当项目中使用这些资源时,会通过该ID得到资源的引用。

我们可以看看其中的代码:

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. public static final class drawable {  
  2.        public static final int ic_launcher=0x7f020000;  
  3.        public static final int p0015=0x7f020001;  
  4.        public static final int p0022=0x7f020002;  
  5.    }  
  6.    public static final class id {  
  7.        public static final int action_settings=0x7f080000;  
  8.    }  
  9.    public static final class layout {  
  10.        public static final int activity_main=0x7f030000;  
  11.    }  
  12.    public static final class menu {  
  13.        public static final int main=0x7f070000;  
  14.    }  
  15.    public static final class string {  
  16.        public static final int action_settings=0x7f050001;  
  17.        public static final int app_name=0x7f050000;  
  18.        public static final int hello_world=0x7f050002;  
  19.    }  

这是其中的一部分,我们可以看到其中各个资源的ID。

3.Android {版本号}:

这个目录包含了项目需要的库文件(Jar文件),这和普通Java项目中的/lib目录很相似。同时其中还包含项目打包时需要的META-INF目录.

 

4.Android Private Libraries:

所有的第三方JAR包引入都被放入了Android Private Libraries中

 

5.assets:

资源路径,不会在R文件注册。该目录用于存放项目相关的资源文件,这个目录和res包含的xml文件差不多,也是应用中引用到的一些外部资源。但主要区别在于这些资源是以原始格式保存,且只能用编程方式读取。例如文本文件,视频文件,MP3音频等媒体文件。

 

6.bin:

编译生成目录。二进制文件,包括class、资源文件、dex、apk等。

可以看到,这里01_项目名.apk 就可以直接在手机里安装使用了。

 

7.res:(这个就很重要了)

该目录用于存放应用程序中经常使用的资源文件,其中包括图片、布局文件以及参数描述文件等,其中包括多个目录。

 

a) 其中以drawable开头的四个文件夹用于存储.png、.9.png、.jpg等图片资源(.9.png是Android特有的图片格式,可以根据情况进行拉伸,达到不变形的效果),他们的分变率从高到低,如果你打算在android应用中包含一个图片或者图标,就应该把它们放在这个目录。

可以看到,我们的drawable-hdpi 文件中有三个图片,注意:图片名字不能有大写字母和汉字,我们可以用F2修改其名字,且调用图片时,是不需要添加.png的。

 

b) layout文件夹存放的是应用程序的布局文件,这些layout是以xml形式保存的,关于layout的进一步信息,你可以参考android文档中的UI layout。可以看看默认的文件:

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <TextView  
  7.         android:layout_width="wrap_content"  
  8.         android:layout_height="wrap_content"  
  9.         android:text="@string/hello_world" />  
  10.   
  11. </LinearLayout>  

其中TextView显示一个文件系统提供的空间。

Eclispse 同时为我们提供了Graphic Layout (可视化布局) :

 

 

c) menu

memu主要用设置菜单文件

 

d) values

这个目录也包含了一些xml文件,但主要是应用中要引用的key-value对。这些XML文件声明了数组(Array)、颜色(color)、度量(Dimension)、字符串。之所以把这些东西分别放在单独的xml文件中主要是考虑到这些值能够在不更改源代码的情况下用于多语言环境。例如,根据用户语言的不同应用程序中的信息可以有多种语言版本。

1) strings.xml 文件—— 字符串资源文件,可以看一下源代码

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.   
  4.     <string name="app_name">QQ</string>  
  5.     <string name="action_settings">Settings</string>  
  6.     <string name="hello_world">你好啊!!哈哈!!</string>  
  7.   
  8. </resources>  

当 .xml 文件调用用strings中的字符串时,需这样调用:

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. android:text="@string/hello_world"  

即 @string/+<string name>,则会调用strings.xml中定义的字符串;

Java源代码需调用字符串时,则需要调用gen中的R.string这样来使用字符串;

 

2) dimens.xml 文件,主要用来设置文件的宽度和高度

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <resources>  
  2.   
  3.     <!-- Default screen margins, per the Android Design guidelines. -->  
  4.     <dimen name="activity_horizontal_margin">16dp</dimen>  
  5.     <dimen name="activity_vertical_margin">16dp</dimen>  
  6.   
  7. </resources>  

这里 dp—宽度,sp— 字体大小

3) stypes.xml 文件

 

8.AndroidManifest.xml:

清单文件 这个XML文件包含了android应用中的元信息,是每个android项目中的重要文件。在软件安装的时候被读取,Android中的四大组件(Activity、ContentProvider、BroadcastReceiver、Service)都需要在该文件中,以及运行这个android应用程序需要的用户权限列表,例如:电话、短信、互联网、访问SD卡,同时也详细描述了android应用的项目结构。

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="cn.com.qiang.helloworld"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="10"  
  9.         android:targetSdkVersion="10" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/p0015"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="cn.com.qiang.helloworld.MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  

1)、每个activity 都要注册,注册的方式 写上“包名+类名”即可:

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. android:name="cn.com.qiang.helloworld.MainActivity</span>  

2)、必须有一个activty 作为入口界面

[java] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. <intent-filter>  
  2.                 <action android:name="android.intent.action.MAIN" />  
  3.   
  4.                 <category android:name="android.intent.category.LAUNCHER" />  
  5. </intent-filter>  

intnet-filter 被称为意图过滤器。

 

9. proguard-project.txt:

代码混淆相关文件

 

10.project.properties:

工程属性的配置文件,配置编译的版本等。ADT14 以后, project.properties和default.properties合并成了project.properties。供Eclipse使用,读取该项目使用Android版本号

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

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

相关文章

Exynos4412 Uboot 编译工具 —— 交叉工具链 arm-linux-gcc 的安装

一、什么是交叉编译&#xff1f; 在开发主机运行编译器编译内核、应用程序。内核和程序在目标机上运行&#xff0c;这个编译过程被称为交叉编译。编译器运行在开发主机&#xff08;通常是X86体系的PC机&#xff09;上&#xff0c;编译出的的代码是目标机体系结构的&#xff0c;…

Linux学习之CentOS(一)--CentOS6.4环境搭建

一、前言作为一个想从事j2ee后台开发的程序猿&#xff0c;linux系统怎能不学呢&#xff1f;所以&#xff0c;这几天自己准备学习一下linux操作系统。废话不多说&#xff0c;直奔主题。要学linux开发&#xff0c;首先得要安装linux系统吧&#xff0c;这里我在选择之前也挺迷茫&a…

内联函数 —— C 中关键字 inline 用法解析

一、什么是内联函数 在C语言中&#xff0c;如果一些函数被频繁调用&#xff0c;不断地有函数入栈&#xff0c;即函数栈&#xff0c;会造成栈空间或栈内存的大量消耗。 为了解决这个问题&#xff0c;特别的引入了inline修饰符&#xff0c;表示为内联函数。 栈空间就是指放置程式…

eclipse maven scm

http://my.oschina.net/OutOfMemory/blog/178512 1.安装eclipse的maven插件 m2e(http://wiki.eclipse.org/M2E_updatesite_and_gittags)Help->Install New Software...在work with中填入我们需要安装m2e的版本url&#xff1a;http://download.eclipse.org/technology/m2e/…

DS18B20 驱动编写

嵌入式开发平台&#xff1a;mini2440 DS18B20 所用GPIO&#xff1a;S3C2410_GPF(3) 一、DS18B20 时序分析 DS18B20的一线工作协议流程是&#xff1a;初始化→ROM操作指令→存储器操作指令→数据传输&#xff0c;其工作时序包括&#xff1a;初始化时序、写时序、读时序。 1、初…

Android 自定义View实现画背景和前景(ViewGroup篇)

2019独角兽企业重金招聘Python工程师标准>>> 在定义ListView的Selector时候&#xff0c;有个drawSelectorOnTop的属性&#xff0c;如果drawSelectorOnTop为true的话&#xff0c;Selector的效果是画在List Item的上面&#xff08;Selector是盖住了ListView的文字或者…

Linux的mmap内存映射机制解析

在讲述文件映射的概念时,不可避免的要牵涉到虚存(SVR 4的VM).实际上,文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施,好似用户将文件映射到自己地址空间的某个部分,使用简单的内存访问指令读写文件&#xff1b;另一方面,它也可以用于内核的基本组织模式,在这种…

svn add Default@2x.png的文件含有@的文件名注意事项

为什么80%的码农都做不了架构师&#xff1f;>>> iOS的Icon里面&#xff0c;包含符号 &#xff0c;svn add Icon2x.png&#xff0c;没法加进去。 解决的办法是&#xff0c;在文件名最后加一个&#xff0c;例如 svn add Icon2x.png 或者svn add Icon\2x.png\ 转载于…

Linux 设备驱动的固件加载

作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. 因此固件发布在随硬件一起的一张 CD 上, 并且操作系统负责传送固件到设备自身…

Linux USB 驱动开发(二)—— USB 驱动几个重要数据结构

前面我们学习了USB 驱动的一个描述符&#xff0c;下面来学习 USB 驱动的几个重要数据结构 一、struct usb_interface 接口函数 [cpp] view plaincopy struct usb_interface { struct usb_host_interface *altsetting; struct usb_host…

Linux USB 驱动开发(三)—— 编写USB 驱动程序

前面学习了USB驱动的一些基础概念与重要的数据结构&#xff0c;那么究竟如何编写一个USB 驱动程序呢&#xff1f;编写与一个USB设备驱动程序的方法和其他总线驱动方式类似&#xff0c;驱动程序把驱动程序对象注册到USB子系统中&#xff0c;稍后再使用制造商和设备标识来判断是否…

Linux USB 驱动开发(一)—— USB设备基础概念

在终端用户看来&#xff0c;USB设备为主机提供了多种多样的附加功能&#xff0c;如文件传输&#xff0c;声音播放等&#xff0c;但对USB主机来说&#xff0c;它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成&#xff1a;USB总线接口、USB逻辑设备和功能单元&am…

Linux USB 驱动开发(四)—— 热插拔那点事

学习USB热插拔之前&#xff0c;先学习一些USB的硬件知识&#xff1a; 一、USB基础概念 1、硬件知识&#xff08;USB插座和插头&#xff09; 在最初的标准里&#xff0c;USB接头有4条线&#xff1a;电源&#xff0c;D-,D,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现…

Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结

设备驱动程序是操作系统内核和机器硬件之间的接口&#xff0c;由一组函数和一些私有数据组成&#xff0c;是应用程序和硬件设备之间的桥梁。在应用程序看来&#xff0c;硬件设备只是一个设备文件&#xff0c;应用程序可以像操作普通文件一样对硬件设备进行操作。 设备驱动程序是…

android软键盘上推ui解决

为什么80%的码农都做不了架构师&#xff1f;>>> http://bbs.csdn.net/topics/340198955 android软键盘上推ui解决 good job 转载于:https://my.oschina.net/macleo/blog/204882

Linux USB 驱动开发实例(一) —— USB摄像头驱动实现源码分析

Spac5xx的实现是按照标准的USB VIDEO设备的驱动框架编写&#xff08;其具体的驱动框架可参照/usr/src/linux/drivers/usb/usbvideo.c文件&#xff09;&#xff0c;整个源程序由四个主体部分组成&#xff1a; 设备模块的初始化模块和卸载模块&#xff0c;上层软件接口模块&#…

System Center 2012R2之SCVMM云部署SCOM(2-2)

SCVMM云部署SCOM安装过程1、在SCVMM中&#xff0c;使用WINDOWS SERVER 2012母盘创建云主机SCOM在SCVMM中先创建到一个私有云指定一个私有云名称选择资源主机指定逻辑网络默认选负载衡器跳过VIP模板跳过选择端口&#xff0c;下一步选择存储分类指定存储的VM路径各只读共享默认设…

Linux USB 驱动开发实例(二)—— USB 鼠标驱动注解及测试

参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为几个部分&#xff1a;驱动加载部分、probe部分、open部分、urb回调函数处理部分。 一、驱动加载部分 [cpp] view plaincopy static int __init usb_mouse_init(void) { int retval usb_register(&a…

MySQL5.6 更改字段属性仍旧会锁全表,注意这个坑!

如图&#xff1a;如果开发让修改表字段属性&#xff0c;建议用pt-online-schema-change。MySQL5.6的在线DDL会锁全表。注意这个坑。另外&#xff0c;增加、删除字段或索引不会锁全表&#xff0c;删除主键会锁全表。

Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析

回顾一下USB的相关知识 USB(Universal Serial Bus)总线又叫通用串行外部总线&#xff0c;它是20世纪90年代发展起来的。USB接口现在得到了广泛的应用和普及&#xff0c;现在的PC机中都带有大量的USB接口。它最大的特点就是方便通用、支持热插拔并且可以在一个接口上插上多个设备…