您的位置:首页 > 移动开发 > Android开发

android studio 工程目录详解

2016-08-04 18:58 323 查看
首先看下一个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的缩写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: