首先看下一个App的目录结构:
下面是app/src/目录结构:
AndroidManifest.xml:它是android项目的系统清单文件,它用于控制android应用的名称、图标、访问权限等整体属性。除此之外,android应用的Activity、Service、ContentProvider、BroadcastReceiver这四大组件都需要在该文件中配置。
main/res:主要是资源目录,存储所有的项目资源,当这个目录下的文件发生变化时,生成的R.java就会自动发生变化:
drawable:存储一些xml文件,-*dpi表示存储分辨率的图片,用于适配不同的屏幕。
-mdpi:320x480
-hdpi:480x800、480x854
-xhdpi:至少960x720
-xxhdpi:1280x720
layout:存储布局文件
mipmap:存储原声图片资源
values:存储app引用的一些值
- colors.xml: 存储了一些color的样式
- dimens.xml:存储了一些公用的dp值
- strings.xml: 存储了引用的string值
- styles.xml: 存储了app需要用到的一些样式
main/Java:主要为源代码和测试代码
main/assets:主要放置多媒体等数据文件,需要的时候自己创建,在main目录下
app/build:Android Studio自动生成的各种源文件, 编译生成的apk也在这个目录的outs子目录,包括R.java文件也放在该目录的子目录下,R.java文件是由AAPT工具根据应用中的资源文件自动生成的,生成R.java文件的规则主要是以下两条:
->每类资源都对应于R类的一个内部类,比如所有界面布局资源对应于layout内部类;所有字符串资源对应于stirng内部类;
->每个具体的资源项对应于内部类的一个public static final int 类型的 Field。随着我们不断地向android项目中添加资源,R.java文件的内容也会越来越多。
libs:为项目需要添加的.jar包或*.so包等外接库
project/:
.idea://系统自动生成的关于AS的环境配置目录,包括版权,字典,jar包信息,项目名称,编译信息等等,类似Eclipse的project.properties。
app://AS创建工程中的一个Module。
External Libraries://不是一个文件夹,只是依赖lib文件,如SDK等。
.iml://项目的配置文件
Gradle文件介绍:
什么是Gradle?
Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。
总的来说Gradle是一种构建工具,Android Studio使用它来构建你的Android项目
app/build.gradle如下:
//声明是android程序
apply plugin: 'com.android.application'
def VUFORIA_SDK_DIR = '../..'
def NATIVE_LIB_DIR = 'ARGO/app/src/libs/lib'
def JAR_DIR = 'ARGO/app/src/libs/java/vuforia'
android {
//编译SDK的版本
compileSdkVersion 22
// build tools的版本
buildToolsVersion "22.0.1"
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "$VUFORIA_SDK_DIR/$NATIVE_LIB_DIR/"
}
defaultConfig {
// 应用的包名
applicationId "com.vuforia.samples.VuforiaSamples"
minSdkVersion 21
targetSdkVersion 22
versionCode 200
versionName "5.0"
}
archivesBaseName = rootProject.projectDir.getName()
buildTypes {
//这里面可以配置debug和release版本的一些参数,比如混淆、签名配置等
release {
minifyEnabled false //是否开启混淆
ndk {
abiFilters "armeabi-v7a","x86"
}
}
debug {
minifyEnabled false
debuggable true
ndk {
abiFilters "armeabi-v7a","x86"
}
}
}
}
dependencies {//模块依赖
// 编译libs目录下的jar包
compile files("$VUFORIA_SDK_DIR/$JAR_DIR/Vuforia.jar")
}
project#build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {//构建过程依赖的仓库
repositories {
jcenter()
}
//构建过程需要依赖的库
dependencies {
//下面声明的是gradle插件的版本
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//这里面配置整个项目依赖的仓库,这样每个module就不用配置仓库了
allprojects {
repositories {
jcenter()
}
}
注:大家可能很奇怪,为什么仓库repositories需要声明两次,这其实是由于它们作用不同,buildscript中的仓库是gradle脚本自身需要的资源,而allprojects下的仓库是项目所有模块需要的资源。所以大家千万不要配错了。
1.gradle文件夹
这里面有两个文件,gradle-wrapper.jar和gradle-wrapper.properties,它们就是gradle wrapper。gradle项目都会有,你可以通过命令gradle init来创建它们(前提是本地安装了gradle并且配置到了环境变量中)。
下面是gradle-wrapper.properties中的内容:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本,这些默认的路径我们一般不会更改的
2.settings.gradle:
这个文件是用来配置多模块的,比如你的项目有两个模块module-a,module-b,那么你就需要在这个文件中进行配置,格式如下:
include ':module-a',':module-b'
3.gradle.properties:
从名字上就知道它是一个配置文件,没错,这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias等。
4.gradlew和gradlew.bat:
这分别是linux下的shell脚本和windows下的批处理文件,它们的作用是根据gradle-wrapper.properties文件中的distributionUrl下载对应的gradle版本。这样就可以保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。
gradlew的用法跟gradle一模一样,比如执行构建gradle build命令,你可以用gradlew build。gradlew即gradle wrapper的缩写。