Android基础--Android Studio项目目录结构简析

Android Studio 目录结构

新建一个工程项目 Project视图下的目录结构如下图所示
Android基础--Android Studio项目目录结构简析_第1张图片

目录文件 作用
.gradle gradle项目产生文件夹(自动编译工具产生的文件)
.idea IDEA项目文件夹(开发工具产生的文件)
app module模块
build 构建时生成文件的地方
gradle gradle环境支持文件夹
.gitignore git源码管理文件
build.gradle gradle项目自动编译的配置文件
gradlew 自动完成 gradle 环境的linux mac 脚本,配合gradle 文件夹使用
gradlew.bat 自动完成 gradle 环境的windows 脚本,配合gradle 文件夹使用
local.properties Android SDK NDK 环境路径配置
setting.gradle gradle 项目的子项目包含文件

一、.gradle目录

Android基础--Android Studio项目目录结构简析_第2张图片
gradle 是AS自动生成的目录,一般情况不做修改

二、.idea目录

Android基础--Android Studio项目目录结构简析_第3张图片
idea 是AS自动生成的目录,一般情况不做修改

三、module(app)

Android基础--Android Studio项目目录结构简析_第4张图片

目录文件 作用
build 编译时生成
libs 存放第三方的jar包
src module源码所在目录
.gitignore git源码管理文件
app.iml intellij IDEA项目都会自动生成的,AS是基于IDEA开发的
build.gradle app模块的gradle构建脚本
proguard-rules.pro 指定代码混淆

1、build

Android基础--Android Studio项目目录结构简析_第5张图片
和外层的build类似主要包含编译时自动生成的内容,其中在outputs文件夹下存放打包好的apk文件(debug和release)

2、libs

如果项目中是用了第三方的jar包,就需要把jar包放到libs目录下,然后jar包会被自动添加到构建路径(如集成百度地图sdk,把jar包放到libs目录。可以在build.gradle(app)文件中查看当前项目依赖)

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    }

3、src

Android基础--Android Studio项目目录结构简析_第6张图片

AndroidTest

用来编写Android test 测试用例的,可以对项目进行一些自动化测试

Java

放Java代码的地方

res

存放资源的目录 图片存放在drawable(根据不同的分辨率可以有多个文件夹,有的app会根据不同分辨率显示分辨率不一样的图片,如果你只有一套图片想适用在各个分辨率下,建议放置在drawable-xxhdpi文件夹下,之前读过一篇文章分析放在该文件夹下资源消耗最小)、布局文件在layout、字符串在values、mipmap文件夹主要存放图标(引导页的图片也建议放在这里,之前在写一个引导页的demo开始图片放在了drawable下,滑动的时候卡的一批,后来发现放到mipmap下就不会卡了)

AndroidManifest.xml

整个项目的配置文件,四大组件都需要在这里注册才能正常的运行

test

用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。

4、.gitignore

用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。

5、app.iml

intellij IDEA项目都会自动生成的,AS是基于IDEA开发的,iml文件是Android Studio识别项目的配置文件

6、build.gradle

app模块的gradle构建脚本(会经常接触所以注释下)

apply plugin: 'com.android.application'
//两种可选 application和library,application表示这是个应用程序模块,library表示这是个库模块,他要依赖于别的用用程序模块来运行
android {
    compileSdkVersion 26  //指定项目编译版本
    defaultConfig {
        applicationId "com.example.time" //应用包名
        minSdkVersion 23  //最低兼容的版本
        targetSdkVersion 26  //表示在该版本做了充分的测试
        versionCode 1  //指定项目版本号
        versionName "1.0" //指定项目版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false //是否开启混淆 false不开启
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆的配置文件路径,默认给了我们两个配置文件。
            // proguard-android.txt在/tools/proguard下面,里面已经包含了基本的混淆声明,有兴趣的可以去看下。
            // proguard-rules.pro是在module根目录下面,我们可以根据项目去添加。
        }
    }
    sourceSets{
        main{
            jniLibs.srcDir 'libs'
            //说明so的路径为该libs路径,关联所有so文件
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')  //本地依赖声明
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'
    compile 'com.google.code.gson:gson:2.7' //在使用开源库时在此做依赖声明
}

6、proguard-rules.pro

用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码混淆,从而让破解者难以阅读。

四、build

编译时自动生成的文件,一般无需修改

五、gradle

项目对gradle的配置信息,简单看下gradle-wrapper.properties里的内容,里边声明了gradle的目录与下载路径以及当前项目使用的gradle版本

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

六、.gitignore(外层)

用于将指定的目录或文件排除在版本控制之外,作用和内层的.gitignore文件类似。

七、build.gradle(外层)

项目的编译环境配置

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter() //中央远程仓库,兼容maven中心仓库
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

八、gradle.properties

全局的gradle配置文件。这里配置的属性将会影响到项目中所有的gradle编译脚本。

九、gradlew & gradlew.bat

gradlew和gradlew.bat 用来在命令行界面执行gradle命令,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。

十、local.properties

用来指定本机中的Android SDK的路径,一般是自动生成,除非自己的电脑SDK位置发生变化需要修改该文件的路径

十一、setting.gradle

用于指定项目中所有引入的模块。由于项目中就只有一个app模块,因此该文件中也就只引入了app这一个模块。通常情况下模块的引入都是自动完成的,需要我们手动去修改这个文件的场景可能比较少。

include ':app'

下面是一个多module的项目的setting.gradle

include ':app' ,':app1',':app2'

一般工作中经常接触的是app文件下的相关文件以及build.gradle等文件。以上是一个普通AS项目目录简析

相关内容参考《Android第一行代码》

你可能感兴趣的:(Android基础)