说到Android项目的文件结构,用Eclipse开发和用Android Studio开发会有些许差别,鉴于目前Google已经放弃Eclipse,本文只讲解用Android Studio开发Android项目时的文件结构
各目录功能
最外层Project下面
- .idea:主要存放该项目在IDE编译运行时的一些必要配置文件
- .gradle:主要存放构建工具Gradle运行时产生的一些文件
- gradle:主要存放构建工具Gradle软件包
- build:主要存放编译之后生成的文件
Module下面
- src:存放源码和资源的地方
- libs:存放着Module需要引用的第三方库的jar
- build:存放编译之后生成的文件,例如编译完成生成的apk安装包就存在这里
- src/androidTest:存放instrumentation单元测试相关代码
- src/test:存放本地测试相关代码
- src/main:存放应用源码和资源
- src/main/java:存放应用的Java源码
- src/main/res:存放应用的资源
- src/main/res/drawable:存放和分辨率无关的图片、9Patch图片、9Patch类型xml文件、selector类型xml文件、shape类型xml文件、layer-list类型xml文件、scale类型xml文件、animation-list类型xml文件、bitmap类型xml文件、rotate类型xml文件、transition类型xml文件、level-list类型xml文件、inset类型xml文件、clip类型xml文件、color类型xml文件、vector类型xml文件等等
- src/main/res/anim:存放补间动画和帧动画文件
- src/main/res/animator:存放属性动画文件
- src/main/res/layout:存放布局文件
- src/main/res/values:存放项目用到的包含各种数值的xml文件
- src/main/res/xml:存放其他类型的xml文件
- src/main/res/raw:可以存放任意文件,该目录下的文件会直接封装到apk中,不会进行编译,一般存放各类音频、视频、文档等文件
- src/main/res/mipmap-xxdpi:官方建议只用来存放各种dpi下不同大小的应用启动图标
- src/main/res/drawale-xxdpi:存放各种dpi下的图片资源
- src/main/assets:可以存放任意文件,类似raw文件目录,会将其下的文件都直接封装到apk中,与raw不同的是,还能使用文件系统的URL机制来读取该目录下的文件,例如使用AssetManager类来读取一个字节流
- src/main/res/menu:存放定义菜单的xml文件
各文件功能
Project下面
- .gitignore:主要用于配置使用版本控制工具Git时需要忽略的各种目录和文件
- build.gradle:编译Project的配置信息
- gradle.properties:构建Project的配置信息
- local.properties:Project用到的sdk或者ndk的目录配置信息
- settings.gradle:定义项目包含哪些模块
- gradlew:编译脚本,可以在命令行执行打包
- xxx.iml:项目的配置文件
Module下面
- .gitignore:主要用于配置使用版本控制工具Git时需要忽略的各种目录和文件
- xxx.iml:Module的配置文件
- build.gradle:编译Module的配置信息
- proguard-rules.pro:Module的proguard(混淆)配置文件
资源文件夹命名
大家可能有时候会发现一个Module下会有很多种类drawable名称的文件夹,目前主要使用的有以下几种
- mdpi
- hdpi
- xhdpi
- xxhdpi
- xxxhdpi
这些目录的划分依据是设备的分辨率,如下是他们两者之间的对应关系
- mdpi:HVGA(320x480)
- hdpi:WVGA(480x800)、FWVGA(480x854)
- xhdpi:720P(720x1280)
- xxhdpi:1080P(1080x1920)
- xxxhdpi:4K(2160x3840)
当然,也许你也发现过类似drawable-land-hdpi名称的目录,这种目录其实是带两个属性的drawable,下面我们先来看看资源文件夹的命名方法
命名规则:
资源名-属性1-属性2-属性3-属性4-属性5…..
其中,资源名就是资源类型名,包括:drawable, values, layout, anim, raw, menu, color, animator, xml;
属性的种类就更多了,而且属性之间还有优先级之分,命名的时候,属性排列的顺序必须是优先级从高到低,不然的话会编译不过
下面举个例子来看看所有可以使用的属性有哪些(优先级从高到低)
- mcc310:sim卡运营商
- en:语言
- sw320dp:屏幕最小宽度
- w720dp:屏幕最佳宽度
- h720dp:屏幕最佳高度
- large:屏幕尺寸
- long:屏幕长短边模式
- port:当前屏幕横竖屏显示模式
- car:dock模式
- night:白天或夜晚
- ldpi:屏幕最佳dpi
- notouch:触摸屏幕类型
- keysexposed:键盘类型
- nokey:硬按键类型
- navexposed:方向键是否可用
- nonav:方向键类型
- v7:android版本