转载请注明出处:http://www.jianshu.com/p/9e544e3fb2fb
你知道一个android项目的文件目录结构吗?你知道每一个文件夹的含义和作用吗?今天我将把自己知道的好好总结下,此篇文章将以eclipse为开发工具介绍android项目的目录组织及每个文件夹的作用,如果有误,欢迎指出。
上图为以eclipse为开发工具的android项目的目录结构,其每个文件夹的含义分别为:
src: 该文件夹是放项目的源代码的,存放业务逻辑java代码;
gen: 该目录下的文件是ADT自动生成的,并不需要人为地去修改。实该目录下定义了一个R.java文件,该文件相当于项目的字典,项目中用户界面、字符串、图片、声音等资源都会在该类中创建唯一的ID。如果你引用了其他项目,在该目录下也会包含其他项目的R.java。
Android 6.0:直接支持的jar包,数字对应你开发选择的版本,6.0代表选择的API为23;
Android Private Libraries:表示引用第三方的jar包,视为私有引用,如高德地图api、微信支付宝支付等第三方jar包。
Android Dependencies:里面存放的是直接支持的类库Library,会显示引用项目,依赖于项目,如android 5.0的cardview项目。
assets:可以存放一些较大的资源文件,放置一些程序所需要的媒体文件;
bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件;
libs: 当前工程所依赖的jar包,自建文件夹;
libscr:引入的jar包的注解文档和源码,自建文件夹;
res(resources):资源目录,包含项目中的资源文件并将编译进应用程序。向此目录添加资源时,会被R.java自动记录。res资源目录下的文件夹:
drawable:自定义的绘制图形,如shape、selector、layer-list 等样式绘制的图形;’
drawalbe-ldpi: 低分辨率的图片,如QVGA (240x320)
drawable-mdpi: 中等分辨率的图片,如HVGA (320x480)
drawable-hdpi: 高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
drawable-xhdpi:至少960dp x 720dp,可以使用Resources.getDrawable(id)可以获得资源类型。
res/layout:存放所有的布局文件,就是我们能直接看到的界面;
res/values: 存放一些资源文件的信息,用于读取文本资源,将要定义的属性写在xml中,以达到资源重复利用。在本文件夹之中有一些约定的文件名称:
·arrays.xml:定义数组数据;
·dimens.xml:定义尺度,将要定义的属性写在dimens.xml中,以达到资源重复利用;
·strings.xml:定义字符串,可以使用Resources.getString()方法获得这些资源;
·styles.xml:定义显示的样式文件;。
·colors.xml:定义表示颜色的数据;
.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件,它们无需编译,添加到你的应用程序编译产生的压缩文件中。
res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。
res/menu/:存放定义了应用程序菜单资源的XML文件。菜单资源文件必须放在res/menu目录中。
AndroidManifest.xml: 记录应用中所使用的各种组件;该文件为应用程序的系统控制文件,是项应用程序的总配置文件,是应用程序的全局描述文件,每一个应用程序都必须包含它。
project.properties: 指定当前工程采用的开发工具包的版本;
proguard-project.txt: 防反编译、混淆文件;
.keystore: 项目生成的密钥,打包时使用;
注意:
1.scr下的Java package和应用包名Application package的不同。
Java package:在APP中代码包主要组织类实现应用程序的业务逻辑,但与应用程序没有什么关系。观察到Android的java包只是本地应用程序意味着我们不必担心包名称与其他的应用程序发生冲突,所以我们可以直接把我们的java包直接复制到另一个不同的项目中去。
Application package:应用程序包在AndroidManifest.xml中声明的package是一个应用程序的标识符,这个标识符是独一无二的,不能有两个应用程序同时安装在同一部手机上。当你把你的应用上传到相关的应用商店时,这个也是要审核,应用商店也无法将两个相同包名的应用一起提供给用户下载,即使它们长的完全不一样。改了工程包名之后,程序就会被认为是另外一个程序,否则相同包名的apk在手机里面会相互覆盖。所以我们一般会以com.domain.myapp的样式来命名我们的app,降低重名的情况。包名是我们在一开始创建项目的时候就要求命名的了。
经过测试发现,android的Java package和Application package是完全不相干的,当应用包名和代码包名一致时,在清单文件中可以用.myActivity来定义类;
想了解更多请参考文章:http://blog.javia.org/android-package-name/
2.Android Support V4, V7, V13的区别和应用?
他们的本质是google官方提供了Android Support Library package 系列的包,其作用是用来保证高版本sdk开发的向下兼容性。
Android Support v4: 这个包是为了1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认带有了。
Android Support v7: 这个包是为了2.1及更高版本而设计的,但不包含更低。另外注意,v7是要依赖v4这个包的,即,两个得同时被包含。
Android Support v13:这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
网友评论