Android项目结构

Android Studio(AS)中Android项目的文件结构有多种表现形式及视图,Android视图是AS的默认视图。Project视图是开发人员使用的视图。Android视图中会缺少很多文件,有些文件夹会被AS替换显示。Project视图中的文件结构就是项目此磁盘上的真实文件结构。

视图

项目结构

Android项目结构
  • .gradle目录与.idea目录AS自动生成的文件,无需手动编辑。

  • gradle Gradle类似PHP的Composer即依赖包存放目录

gradle目录下包含gradle wrapper的配置文件,使用gradle wrapper的方式无需提前将gradle下载会,它会根据本地缓存决定是否联网下载gradle

Gradle

AS默认没有启用gradle wrapper的方式,打开方式为【导航栏】>【File】>【Settings】>【Build,Execution,Deployment】>【Gradle】中进行配置。

联网下载Gradle
  • build.gradle文件是项目全局的Gradle构建脚本
$ vim build.gradle
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
    }
}
allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

repositories闭包中声明了jcenter()配置,jcenter是一个代码托管仓库 https://jcenter.bintray.com/,多数Android开源项目会选择将代码托管到jcenter上,声明后可在项目中引用任何jcenter上的开源项目。

dependencies闭包中使用classpath声明了Gradle插件,由于Gradle并非专门为构建Android项目而开发的,Java、C++等多种项目都可以使用Gradle来构建。如果需要使用Gradle构建项目则需要声明它的类文件路径。

  • gradle.properties文件是全局的Gradle配置文件,该文件配置的属性将会影响到项目中所有的Gradle编译脚本。
$ vim gradle.properties
systemProp.http.proxyHost=mirrors.neusoft.edu.cn
org.gradle.jvmargs=-Xmx1536m
systemProp.http.proxyPort=80
  • settings.gradle文件用于指定项目中所有引入的模块,如果项目中只有一个默认的app模块,则该文件只会引入app一个模块。通常模块的引入都是自动完成的。
  • gradlew是在Linux或Mac系统中用在命令行界面中执行Gradle命令所使用的
  • gradlew.bat文件是在Windows系统下在命令行界面中执行Gradle命令所使用的
  • xxx.iml文件是所有IntelliJ IDEA项目都会自动生成的问题及那,用于标识这是一个IntelliJ IDEA项目。
  • local.properties文件用于指定本机中的Android SDK路径,该文件是自动生成的。

项目应用模块目录app

app项目代码与资源存放目录,开发工作目录。

app目录
  • build目录包含了在编译时自动生成的文件
  • libs项目中使用的第三方jar包,这些jar包会被自动添加到构建路径中。
  • .proguard-rules.pro文件用于指定项目代码的混淆规则
  • .build.gradle文件是app`模块中Gradle构建脚本
apply plugin: 'com.android.application'

apply plugin应用了一个插件,一般有两种可选值:'com.android.application'表示是一个应用程序模块, 'com.android.library'表示这是一个库模块。应用程序模块和库模块的区别在于应用程序模块可以直接运行,而库模块只能作为代码库依附于其它应用模块来运行。

android {
...
}

android闭包中可以配置项目构建的各种属性

  • compileSdkVersion 27用于指定项目的编译版本,这里的27表示使用Android对应版本系统的SDK进行编译。
  • buildToolsVersion '28.0.3'用于指定项目构建工具的版本

defaultConfig{...}闭包中可以对项目细节进行配置

  • applicationId 'com.zhiyi.onepay'用于执行项目的包名
  • minSdkVersion 19用于指定项目最低兼容的Android系统版本
  • targetSdkVersion 27表示在对应目标版本上已经做了充分的测试
  • versionCode 1304用于指定项目的版本号
  • versionName "1.3.4"用于指定项目的版本名

buildTypes {...}闭包用于指定生成安装文件的配置

  • release{...}闭包用于指定生成正式版安装文件的配置

  • debug{...}闭包用于指定生成测试版安装文件的配置

  • minifyEnabled false用于指定是否对项目代码进行混淆

  • proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'用于指定混淆时使用的规则文件。

proguard-andrid.txt文件是在Android SDK目录下对所有项目都通用的混淆规则。

proguard-rules.pro是在当前项目目录下,可以编写当前项目特有的混淆规则。

  • dependencies{...}闭包用于指定当前项目所有的依赖关系

AS项目共有三种依赖方式:本地依赖、库依赖、远程依赖

本地依赖可对本地的jar包或目录添加依赖关系

库依赖可以对项目中的库模块添加依赖关系

远程依赖可以对jcenter上开源项目添加依赖关系

源代码目录src

src
  • java目录用于存放所有Java代码
  • res目录存放项目中所有使用到的图片、布局、字符串等资源。
    图片存放在drawable目录下,布局存放在layout目录下,字符串存放在vaues目录下。
    layout文件夹用于存放布局文件等,各个控件主要通过layout布局文件来提供显示效果。
    menu文件夹 用来存放菜单及其子菜单项
    mipmap文件夹用于存放图标文件
    values文件夹用于存放具体数值类文件,采用键值对形式存放。
  • AndroidManifest.xml文件是整个Android项目的配置文件,在程序中定义的四大组件都需要在这个文件中注册。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容