android studio中,project和module的目录结构

在android studio中,代码工程的组织结构是:project + module,跟以往的eclipse是有区别的。那么,project和module下分别包含了哪些文件呢?其中,又有哪些是需要加入代码管理仓库进行管理的呢?哪些是在android studio导入工程的时候,编译过程中生成的中间文件呢?下面就分别对project目录和module目录进行详细的分析。

注:YES -- 该目录需要纳入代码仓库管理;NO -- 该目录不需要纳入代码仓库管理

1、module目录结构

module.png
  • build目录--NO:这个是编译module生成的文件夹,里面存放着该module生成的apk\aar文件(具体看该module的build.gradle是apply plugin: 'com.android.application' -- 生成apk,或者是apply plugin: 'com.android.library' -- 生成aar)

  • build.gradle文件--YES:这个是编译module模块的脚本,里面配置着该module编译的api版本,依赖的仓库,编译时是否混淆代码等等。该文件是module的编译核心

  • .gitignore文件--YES:这个是该module通过git init初始化了一个仓库进行代码管理的时候,可以将不想被仓库管理的文件或目录等写入该文件中,这样git status, git add 等操作就会将其忽略掉。
    你可能会有个疑问?为什么android studio自动帮我们生成了这个文件?
    可以这么理解,git代码管理工具是目前世界上所用最多,范围最广的分布式代码管理仓库。所以android studio自动帮我们生成该文件也是可以理解的,这意味着google推荐我们使用git去管理我们的项目代码。事实上,谷歌自己对aosp(安卓源码项目)开源项目也是用的git工具进行管理的

  • libs目录--YES:这个文件夹是用来存放jar | aar | so等第三方库的。集成了第三方库后,需要在对应的module中的build.gradle中的dependencies{}添加依赖,这样module编译的时候才会去将该“第三方库”链接进来编译运行。毋庸置疑,这个libs文件夹相当于将“第三方库”当做项目源码进行调用。所以“一定要”纳入代码仓库管理,不然编译会报错--找不到调用的第三方库的方法异常

  • proguard-rules.pro文件--YES:这个是代码混淆文件。是为了生成的apk\aar不容易被反编译。是否在编译过程中使用“代码混淆”,需要在build.gradle文件中配置:
    buildTypes {
    release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    其中,proguard-android.txt是系统默认的混淆文件(定义了一些默认的混淆规则),proguard-rules.pro是我们自己提供的混淆规则。系统在混淆时会将proguard-android.txt, proguard-rules.pro的规则结合起来一起用。所以proguard-rules.pro文件需要纳入代码仓库管理,而proguard-android.txt是由系统提供,一般不需要改动,所以存放的位置是:项目sdk路径/tools/proguard/目录下

  • src目录--YES:这个文件夹是用来存放下面项目代码的。所有的源码,图片,资源等文件都存放在这里。这里面包含main目录。main目录下包含java目录res目录AndroidManifest.xml清单文件。java目录用于存放java源码;res目录用于存放图片,字符串等相关文件;AndroidManifest.xml用于声明该module需要用到的相关组件,权限等信息

  • test(module名字).iml文件--NO:这个文件是用来管理module的相关配置信息的,也是用来标识该文件夹是一个android项目,而不是普通的文件夹。但是该文件是根据build.gradle生成的,所以不用纳入代码仓库中管理。文件中存储着build.gradle编译完成后的相关配置信息,后面正式编译module的生成对应apk | aar的时候,要用到这个test.iml,并根据里面的信息去寻找连接对应的文件,如AndroidManifest.xml文件,res文件夹的路径:
    <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> -- 清单文件存放路径
    <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> -- res资源文件存放路径
    如果误删了这个文件,android studio没法辨别出该文件夹是android项目,那么"run"运行按钮会变成一个红色的X;但是由于build.gradle文件还存在,所以可以通过assembleRelease执行gradle的release任务生成对应的apk,然后通过adb install test.apk安装到设备上。如图test.iml。

    test.iml.png

那么怎么恢复这个文件呢?这篇博客讲的很好
1.将gradle文件中删除一行空格,目的是出现sync now
2.点击右上角Gradle,选中你的moudle
3.点击上面的刷新按钮
4.点击sync now
你就发现iml文件重新生成了(如图sync_now)

sync_now.png

2、project目录结构

project.png
  • project.iml--NO:这个是用来管理project的相关配置信息的,也是标识这个文件夹是一个android项目的。如果误删该文件,Android Studio将不会将该文件当做安卓项目,只会当做普通的文件夹进行处理。但是由于里面的build.gradle都存在,所以module工程还是能正常编译。误删之后如果退出之后重新进入,Android Studio会重新生成该文件

  • test(module)目录--YES:这个是实际的module模块。里面包含了所有关于该模块的源码,配置等信息。也就是上面分析的module目录结构的目录,该文件夹是整个工程最核心的部分,你写的源码等都在该文件夹中。所以要纳入代码仓库中

  • build目录--NO:该目录是编译过程中生成的文件。类似module模块中的build目录。所以不需要加入代码仓库中管理

  • build.gradle文件--YES:该文件是project编译的脚本,而且还可以理解成module模块中的build.gradle的“父文件”。当module中的build.gradle文件缺少的相关配置,如果project的build.gradle存在,那么就会复用该文件的相关配置。里面配置了一个google维护的jcenter()仓库,该仓库是用来提供相关软件源给android studio下载的。如gradle的相关版本等等

  • .gitignore文件--YES:该文件和module模块中的.gitignore是一样的。如果该project通过git init初始化了一个仓库,进行仓库管理的时候,可以将不想被仓库管理的文件目录等写入该文件中

  • gradle目录--YES:该目录是用来存放关于编译该project需要用到的gradle版本,下载地址等。里面存放这wrapper文件夹,在wrapper文件夹下包含着gradle-wrapper.jar和gradle-wrapper.properties文件。在gradle-wrapper.properties文件中,存放这编译该project需要用到的版本和下载地址。gradle-wrapper.properties文件内容如下:参考该博客
    #Wed Jul 22 20:30:43 CST 2020
    distributionBase=GRADLE_USER_HOME -- zip包解压后存放的文件夹:在linux下是$HOME/.gradle,例如~/.gradle文件夹
    distributionPath=wrapper/dists -- zip包解压后存放的文件夹下的子路径,linux下即~/.gradle/wrapper/dists
    zipStoreBase=GRADLE_USER_HOME -- zip压缩包的存储文件夹:在linux下是$HOME/.gradle,例如~/.gradle文件夹
    zipStorePath=wrapper/dists -- zip压缩包的存储路径,linux下即~/.gradle/wrapper/dists
    distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip -- 编译用到的gradle的下载地址

  • .gradle目录--NO:这个文件是编译project的时候生成的,里面存放的是编译过程中的中间文件,供编译出问题的时候debug使用。误删之后通过clean project -- rebuild project 之后系统会自动生成,或者通过重新import项目之后,系统会自动重新编译gradle之后生成

  • .gradle.properties文件--NO:配置gradle运行环境的文件,比如配置gradle运行模式,运行时jvm虚拟机的大小。在创建的项目中,暂时是没有内容的。如果手动配置了,那么虚拟机运行时就会按照该文件的配置信息运行

  • gradlew和gradlew.bat文件--YES:gradlew是Linux下的脚本,gradlew.bat是Windows下的脚本。作用是,根据gradle/wrapper/gradle-wrapper.properties文件中的url去下载对应的gradle版本,然后存储在对应的文件中。具体参考gradle目录知识点(6)。
    可能你有个疑问:为什么要下载gradle版本呢?用本地的不行吗?
    其实是可以用本地的gradle版本的,是可以去配置的。但是谷歌这样设计的目的是:保证在不同的环境下构建时都是使用的统一版本的gradle,即使该环境没有安装gradle也可以,因为gradle wrapper会自动下载对应的gradle版本。相当于加了一层保险

  • .idea目录--NO:这个目录是Intellij IDEA 运行时候生成的文件目录,不需要纳入代码仓库中管理。误删除之后,只需要关闭Android Studio,重新导入项目就会自动生成

  • local.properties--NO:这个文件是显示当前project用到的sdk和ndk的路径的,不是用来配置sdk和ndk路径的。就像该文件内容中所描述的,
    # This file is automatically generated by Android Studio. -- 该文件是Android Studio自动生成的
    # Do not modify this file -- YOUR CHANGES WILL BE ERASED! -- 不要修改这个文件,就算修改了也会被擦除
    所以误删之后直接clean -- rebuild会出错,需要关闭Android Studio后重新import该项目,Android Studio就会自动生成该文件。

  • settings.gradle--YES:这个文件是用来配置当前的project中包含了哪些module。如果哪个module在里面没有配置,那么就算该module有build.gralde文件,在gradle面板中也不会显示该工程

结尾:感谢上面引用到的相关博客的技术大佬,谢谢。如果不想被引用,请联系删除

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335