一、module(相当于Eclipse的project)
module是整个项目结构的第一级,它囊括了具体的源代码和资源文件,以下介绍几种module:
- Android Application Modules
这个模块用来存放源代码、资源文件以及应用级别的设置。比如,module-level构建文件, 资源文件和Android Manifest文件. 这个模块的内容最终会被打包进apk文件. Test Modules
测试模块,该模块的内容最终会被编译打包进测试程序,默认情况下,AS(Android studio,下同)会创建androidTest module以插入JUnit单元测试.Library Modules
库模块。这个模块包含了你可以在Android项目中引用的共享的源代码及资源文件,这有利于代码的复用,库模块不能被安装到设备上,它们只会在编译的时候被放进apk文件中。App Engine Modules
可用来给你的app添加云端服务等。当你使用adt创建一个项目时,只会生成很少一部分文件和文件夹,有些取决于你是否是用AS或者android tool创建模块的。随着你的应用变得越来越复杂,你也许需要新的资源、目录或文件。
注:项目文件夹和文件应用于整个Android项目,并且会覆盖相似模块的文件设置。
二、Android Project Files(项目文件)
AS的项目文件和设置作用于整个项目范围。
- .idea
IntelliJ IDEA的设置目录. - app
应用模块的目录和文件 - build
这个目录为项目中所有模块指定构建输出位置 - gradle
包含gradler-wrapper文件. - .gitignore
git中忽略的文件 - build.gradle
用于构建系统的可自定义的属性文件. 你可以编辑此文件来指定app模块所使用的默认编译配置,也可以设置keystore文件的位置和key alias使编译工具可以在release模式下为你的app进行签名。这个文件是项目中必须的,因此你需要将它加入到版本控制系统中。 - gradle.properties
项目级别的Gradle配置文件. - gradlew
Unix系统Gradle启动脚本. - gradlew.bat
Windows系统Gradle启动脚本. - local.properties
编译系统使用的开发环境配置文件,比如sdk安装路径。由于这个文件的内容是跟本地开发环境相关的,因此不能把它加入到版本控制系统中。 - .iml
IntelliJ IDEA创建的用来保存模块信息的模块文件。 - settings.gradle
指定要编译的子项目。
三、Android Application Modules(应用模块)
安卓应用模块是根据你的编译配置,最终会被编译进apk文件的模块。它们包含源代码和资源文件。默认情况下会为你生成很多代码和资源文件,如果还需要其他的需要自行创建。以下的目录和文件组成一个Android应用模块:
- build/
包含指定的编译参数要用的文件夹,保存在主应用模块。 - libs/
包含私有库,保存在主应用模块。 - src/
包含了保存在src/main/java//ActivityName>.java下的Activity和其他代码文件(如.java或.aidl)。 - androidTest/
包含单元测试。 - main/java/com.>project<.>app<
包含activity使用的java文件 - main/jni/
包含jni文件 - main/gen/
包含AS自动生成的文件 - main/assets/
存放原始文件,可用于存放游戏数据等。 - main/res/anim/
存放动画XML文件 - main/res/color/
存放颜色XML文件 - main/res/drawable/
存放图标文件 - main/res/mipmap/
存放应用图标 - main/res/layout/
存放布局文件 - main/res/menu/
存放菜单文件 - main/res/raw/
存放原始文件 - main/res/values/
存放字符、颜色值、尺寸等XML文件 - main/res/xml/
存放各种配置用的XML文件 - AndroidManifest.xml
Android配置清单 - .gitignore/
git忽略文件 - app.iml/
IntelliJ IDEA 模块 - build.gradle
见前面的build.gradle描述 - proguard-rules.pro
代码混淆配置文件
四、Library Module(库模块)
可以将第三方库引入你的工程,库不能单独打包成apk文件。如果引用多个库,可以为他们设置不同的优先级,如果两个库定义了相同的resource id,那么低优先级的会被高优先级覆盖,高优先级会被应用程序本身覆盖。在引用库的时候要注意以下几点:
- 资源冲突
不同的库中定义了相同的resource id,那么他们最终会按照应用本身>高优先级库>低优先级库的方式合并,开发的时候应清楚这一点。 - 使用前缀来避免资源冲突
可以通过使用前缀来避免冲突 - 不能将库文件导出为jar
以后sdk tools将会支持这一功能 - 库可以引用jar文件
需要手动修改依赖模块的build path并且添加jar文件的path - 库模块可以引用外部jar文件
注意库模块以及引用这个库的应用都要在他们的manifest文件中使用标签声明这个外部jar - 库模块不能包含原始文件(raw)
- 库模块的平台版本必须小等于主应用模块的版本
- 库模块的名字没有限制
- 每个库模块都生成自己的R.java
- 库模块位置
没有对库模块位置做特殊要求,可以使用相对路径来引用库模块
五、创建新project(相当于Eclipse的workspace)
点击File-New-New Project,会弹出一个向导,根据向导提示一步一步完成即可。
六、创建新module
与创建新project类似
七、配置库模块
把一个现有的application module变成library,只要修改该模块的build.gradle文件,将
apply plugin: 'com.android.application'
改为apply plugin: 'com.android.library'
即可为library module添加依赖关系
在project视图下,编辑app/build.gradle
,给lib模块加上依赖关系
...
dependencies {
...
compile project(":lib")
}
八、引用库模块
基于AS v1.2.2
1. 确保要引用的库模块和使用该库的主模块都在工程中,如果没有先将他们导入
2. 在project视图下,右键要引用库的模块,点击Open Module Settings或者在左键选中要引用库的模块,按F12,这两种方法都会打开project structure界面
3. 切换到dependencies选项卡,单击右侧加号图标,可以选择引用库、文件或者模块,通过上下箭头图标可以改变优先级
4. 通过单击Scope条目可以下拉选择以何种方式应用依赖,默认是compile
5. 执行以上步骤之后就可以点击OK关闭project structure界面
九、在主应用中的manifest文件中声明库中用到的组件
声明时需要使用完整包名,如:
<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>