Android项目目录介绍

$ ls -al
total 40
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 ./
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 ../
-rw-r--r-- 1 Administrator 197121  222  3月 18 11:37 .gitignore
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 .gradle/
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 .idea/
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 app/
-rw-r--r-- 1 Administrator 197121  585  3月 18 11:37 build.gradle
drwxr-xr-x 1 Administrator 197121    0  3月 18 11:37 gradle/
-rw-r--r-- 1 Administrator 197121 1093  3月 18 11:37 gradle.properties
-rwxr-xr-x 1 Administrator 197121 4962  3月 18 11:37 gradlew*
-rw-r--r-- 1 Administrator 197121 2260  3月 18 11:37 gradlew.bat
-rw-r--r-- 1 Administrator 197121  939  3月 18 11:37 HelloWorld.iml
-rw-r--r-- 1 Administrator 197121  445  3月 18 11:37 local.properties
-rw-r--r-- 1 Administrator 197121   47  3月 18 11:37 settings.gradle
  • .gitignore
    • 这个文件是用来将指定的目录或文件排除在版本控制之外的,这样你在 git 合并或者提交时,并不会比对这些文件,也不会将这些文件的本地改动提交。
  • .gradle .idea
    • 这两个目录项目构建时生成的缓存文件,开发者无需干预。
  • app
    • 开发者需要操作的大多在这个目录下面,里面包含了代码文件、资源文件、jar 包等等,后面我们展开这个目录详细讲解。
  • build.gradle
    • 这是项目全局的 gradle 构建脚本,大多数情况不需要操作该文件。
  • gradle
    • 这个目录下包含了 gradle wrapper 的配置文件。
  • gradle.properties
    • 这个文件是全局的 gradle 配置文件,在这里配置的属性将会影响到项目中所有的 gradle 编译脚本。
  • build
    • 编译时自动生成的文件,开发者无需干预。
  • gradlew gradlew.bat
    • 这两个文件是用来在命令行界面中执行 gradle 命令的,其中 gradlew 是在 Linux 或 Mac 系统中使用的,gradlew.bat 是在 Windows 系统中使用的。
  • HelloWorld.iml
    • iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio 是基于 IntelliJ IDEA 开发的),用于标识这是一个 IntelliJ IDEA 项目,开发者无需干预。
  • local.properties
    • 配置 Android SDK 的路径,自动生成的,也可以手动修改路径。
  • settings.gradle
    • 配置项目的模块。如果需要引入其它模块的话,可以在这个文件里添加,通常项目不需要修改。

重点讲解 app 文件夹

app.
├─build
│  ├─generated
│  │  ├─ap_generated_sources
│  │  │  └─debug
│  │  │      └─out
│  │  ├─not_namespaced_r_class_sources
│  │  │  └─debug
│  │  │      └─r
│  │  │          ├─androidx
│  │  │          │  ├─appcompat
│  │  │          │  ├─arch
│  │  │          │  │  └─core
│  │  │          │  ├─asynclayoutinflater
│  │  │          │  ├─constraintlayout
│  │  │          │  │  └─widget
│  │  │          │  ├─coordinatorlayout
│  │  │          │  ├─core
│  │  │          │  ├─cursoradapter
│  │  │          │  ├─customview
│  │  │          │  ├─documentfile
│  │  │          │  ├─drawerlayout
│  │  │          │  ├─fragment
│  │  │          │  ├─interpolator
│  │  │          │  ├─legacy
│  │  │          │  │  ├─coreui
│  │  │          │  │  └─coreutils
│  │  │          │  ├─lifecycle
│  │  │          │  │  ├─livedata
│  │  │          │  │  │  └─core
│  │  │          │  │  └─viewmodel
│  │  │          │  ├─loader
│  │  │          │  ├─localbroadcastmanager
│  │  │          │  ├─print
│  │  │          │  ├─slidingpanelayout
│  │  │          │  ├─swiperefreshlayout
│  │  │          │  ├─vectordrawable
│  │  │          │  ├─versionedparcelable
│  │  │          │  └─viewpager
│  │  │          └─com
│  │  │              └─example
│  │  │                  └─helloworld
│  │  ├─res
│  │  │  ├─pngs
│  │  │  │  └─debug
│  │  │  └─resValues
│  │  │      └─debug
│  │  └─source
│  │      └─buildConfig
│  │          ├─androidTest
│  │          │  └─debug
│  │          │      └─com
│  │          │          └─example
│  │          │              └─helloworld
│  │          │                  └─test
│  │          └─debug
│  │              └─com
│  │                  └─example
│  │                      └─helloworld
│  ├─intermediates
│  │  ├─annotation_processor_list
│  │  │  └─debug
│  │  ├─apk_list
│  │  │  └─debug
│  │  │      └─mainApkListPersistenceDebug
│  │  ├─blame
│  │  │  └─res
│  │  │      └─debug
│  │  │          ├─multi-v2
│  │  │          └─single
│  │  ├─bundle_manifest
│  │  │  └─debug
│  │  │      └─processDebugManifest
│  │  │          └─bundle-manifest
│  │  ├─check_manifest_result
│  │  │  └─debug
│  │  │      └─checkDebugManifest
│  │  │          └─out
│  │  ├─compatible_screen_manifest
│  │  │  └─debug
│  │  │      └─createDebugCompatibleScreenManifests
│  │  │          └─out
│  │  ├─dex
│  │  │  └─debug
│  │  │      ├─mergeExtDexDebug
│  │  │      │  └─out
│  │  │      ├─mergeLibDexDebug
│  │  │      │  └─out
│  │  │      └─mergeProjectDexDebug
│  │  │          └─out
│  │  ├─duplicate_classes_check
│  │  │  └─debug
│  │  │      └─out
│  │  ├─incremental
│  │  │  ├─debug-mergeJavaRes
│  │  │  │  └─zip-cache
│  │  │  ├─debug-mergeNativeLibs
│  │  │  │  └─zip-cache
│  │  │  ├─mergeDebugAssets
│  │  │  ├─mergeDebugJniLibFolders
│  │  │  ├─mergeDebugResources
│  │  │  │  ├─merged.dir
│  │  │  │  │  ├─values
│  │  │  │  │  ├─values-af
│  │  │  │  │  ├─values-am
│  │  │  │  │  ├─values-ar
│  │  │  │  │  ├─values-as
│  │  │  │  │  ├─values-az
│  │  │  │  │  ├─values-b+sr+Latn
│  │  │  │  │  ├─values-be
│  │  │  │  │  ├─values-bg
│  │  │  │  │  ├─values-bn
│  │  │  │  │  ├─values-bs
│  │  │  │  │  ├─values-ca
│  │  │  │  │  ├─values-cs
│  │  │  │  │  ├─values-da
│  │  │  │  │  ├─values-de
│  │  │  │  │  ├─values-el
│  │  │  │  │  ├─values-en-rAU
│  │  │  │  │  ├─values-en-rCA
│  │  │  │  │  ├─values-en-rGB
│  │  │  │  │  ├─values-en-rIN
│  │  │  │  │  ├─values-en-rXC
│  │  │  │  │  ├─values-es
│  │  │  │  │  ├─values-es-rUS
│  │  │  │  │  ├─values-et
│  │  │  │  │  ├─values-eu
│  │  │  │  │  ├─values-fa
│  │  │  │  │  ├─values-fi
│  │  │  │  │  ├─values-fr
│  │  │  │  │  ├─values-fr-rCA
│  │  │  │  │  ├─values-gl
│  │  │  │  │  ├─values-gu
│  │  │  │  │  ├─values-h720dp-v13
│  │  │  │  │  ├─values-hdpi-v4
│  │  │  │  │  ├─values-hi
│  │  │  │  │  ├─values-hr
│  │  │  │  │  ├─values-hu
│  │  │  │  │  ├─values-hy
│  │  │  │  │  ├─values-in
│  │  │  │  │  ├─values-is
│  │  │  │  │  ├─values-it
│  │  │  │  │  ├─values-iw
│  │  │  │  │  ├─values-ja
│  │  │  │  │  ├─values-ka
│  │  │  │  │  ├─values-kk
│  │  │  │  │  ├─values-km
│  │  │  │  │  ├─values-kn
│  │  │  │  │  ├─values-ko
│  │  │  │  │  ├─values-ky
│  │  │  │  │  ├─values-land
│  │  │  │  │  ├─values-large-v4
│  │  │  │  │  ├─values-ldltr-v21
│  │  │  │  │  ├─values-lo
│  │  │  │  │  ├─values-lt
│  │  │  │  │  ├─values-lv
│  │  │  │  │  ├─values-mk
│  │  │  │  │  ├─values-ml
│  │  │  │  │  ├─values-mn
│  │  │  │  │  ├─values-mr
│  │  │  │  │  ├─values-ms
│  │  │  │  │  ├─values-my
│  │  │  │  │  ├─values-nb
│  │  │  │  │  ├─values-ne
│  │  │  │  │  ├─values-night-v8
│  │  │  │  │  ├─values-nl
│  │  │  │  │  ├─values-or
│  │  │  │  │  ├─values-pa
│  │  │  │  │  ├─values-pl
│  │  │  │  │  ├─values-port
│  │  │  │  │  ├─values-pt
│  │  │  │  │  ├─values-pt-rBR
│  │  │  │  │  ├─values-pt-rPT
│  │  │  │  │  ├─values-ro
│  │  │  │  │  ├─values-ru
│  │  │  │  │  ├─values-si
│  │  │  │  │  ├─values-sk
│  │  │  │  │  ├─values-sl
│  │  │  │  │  ├─values-sq
│  │  │  │  │  ├─values-sr
│  │  │  │  │  ├─values-sv
│  │  │  │  │  ├─values-sw
│  │  │  │  │  ├─values-sw600dp-v13
│  │  │  │  │  ├─values-ta
│  │  │  │  │  ├─values-te
│  │  │  │  │  ├─values-th
│  │  │  │  │  ├─values-tl
│  │  │  │  │  ├─values-tr
│  │  │  │  │  ├─values-uk
│  │  │  │  │  ├─values-ur
│  │  │  │  │  ├─values-uz
│  │  │  │  │  ├─values-v16
│  │  │  │  │  ├─values-v17
│  │  │  │  │  ├─values-v18
│  │  │  │  │  ├─values-v21
│  │  │  │  │  ├─values-v22
│  │  │  │  │  ├─values-v23
│  │  │  │  │  ├─values-v24
│  │  │  │  │  ├─values-v25
│  │  │  │  │  ├─values-v26
│  │  │  │  │  ├─values-v28
│  │  │  │  │  ├─values-vi
│  │  │  │  │  ├─values-watch-v20
│  │  │  │  │  ├─values-watch-v21
│  │  │  │  │  ├─values-xlarge-v4
│  │  │  │  │  ├─values-zh-rCN
│  │  │  │  │  ├─values-zh-rHK
│  │  │  │  │  ├─values-zh-rTW
│  │  │  │  │  └─values-zu
│  │  │  │  └─stripped.dir
│  │  │  ├─mergeDebugShaders
│  │  │  ├─packageDebug
│  │  │  │  └─tmp
│  │  │  │      └─debug
│  │  │  │          └─zip-cache
│  │  │  └─processDebugResources
│  │  ├─instant_app_manifest
│  │  │  └─debug
│  │  ├─javac
│  │  │  └─debug
│  │  │      └─classes
│  │  │          ├─androidx
│  │  │          │  ├─appcompat
│  │  │          │  ├─arch
│  │  │          │  │  └─core
│  │  │          │  ├─asynclayoutinflater
│  │  │          │  ├─constraintlayout
│  │  │          │  │  └─widget
│  │  │          │  ├─coordinatorlayout
│  │  │          │  ├─core
│  │  │          │  ├─cursoradapter
│  │  │          │  ├─customview
│  │  │          │  ├─documentfile
│  │  │          │  ├─drawerlayout
│  │  │          │  ├─fragment
│  │  │          │  ├─interpolator
│  │  │          │  ├─legacy
│  │  │          │  │  ├─coreui
│  │  │          │  │  └─coreutils
│  │  │          │  ├─lifecycle
│  │  │          │  │  ├─livedata
│  │  │          │  │  │  └─core
│  │  │          │  │  └─viewmodel
│  │  │          │  ├─loader
│  │  │          │  ├─localbroadcastmanager
│  │  │          │  ├─print
│  │  │          │  ├─slidingpanelayout
│  │  │          │  ├─swiperefreshlayout
│  │  │          │  ├─vectordrawable
│  │  │          │  ├─versionedparcelable
│  │  │          │  └─viewpager
│  │  │          └─com
│  │  │              └─example
│  │  │                  └─helloworld
│  │  ├─lint_jar
│  │  │  └─global
│  │  │      └─prepareLintJar
│  │  ├─lint_publish_jar
│  │  │  └─global
│  │  │      └─prepareLintJarForPublish
│  │  ├─manifest_merge_blame_file
│  │  │  ├─debug
│  │  │  └─debugAndroidTest
│  │  ├─merged_assets
│  │  │  └─debug
│  │  │      └─out
│  │  ├─merged_java_res
│  │  │  └─debug
│  │  ├─merged_jni_libs
│  │  │  └─debug
│  │  │      └─out
│  │  ├─merged_manifests
│  │  │  ├─debug
│  │  │  └─debugAndroidTest
│  │  ├─merged_native_libs
│  │  │  └─debug
│  │  │      └─out
│  │  ├─merged_shaders
│  │  │  └─debug
│  │  │      └─out
│  │  ├─metadata_feature_manifest
│  │  │  └─debug
│  │  │      └─processDebugManifest
│  │  │          └─metadata-feature
│  │  ├─processed_res
│  │  │  └─debug
│  │  │      └─processDebugResources
│  │  │          └─out
│  │  ├─res
│  │  │  ├─merged
│  │  │  │  └─debug
│  │  │  └─symbol-table-with-package
│  │  │      └─debug
│  │  ├─shader_assets
│  │  │  └─debug
│  │  │      └─compileDebugShaders
│  │  │          └─out
│  │  ├─signing_config
│  │  │  └─debug
│  │  │      └─out
│  │  ├─stripped_native_libs
│  │  │  └─debug
│  │  │      └─out
│  │  ├─symbols
│  │  │  └─debug
│  │  ├─tmp
│  │  │  └─manifest
│  │  │      └─androidTest
│  │  │          └─debug
│  │  ├─transforms
│  │  │  └─dexBuilder
│  │  │      └─debug
│  │  │          └─0
│  │  │              ├─androidx
│  │  │              │  ├─appcompat
│  │  │              │  ├─arch
│  │  │              │  │  └─core
│  │  │              │  ├─asynclayoutinflater
│  │  │              │  ├─constraintlayout
│  │  │              │  │  └─widget
│  │  │              │  ├─coordinatorlayout
│  │  │              │  ├─core
│  │  │              │  ├─cursoradapter
│  │  │              │  ├─customview
│  │  │              │  ├─documentfile
│  │  │              │  ├─drawerlayout
│  │  │              │  ├─fragment
│  │  │              │  ├─interpolator
│  │  │              │  ├─legacy
│  │  │              │  │  ├─coreui
│  │  │              │  │  └─coreutils
│  │  │              │  ├─lifecycle
│  │  │              │  │  ├─livedata
│  │  │              │  │  │  └─core
│  │  │              │  │  └─viewmodel
│  │  │              │  ├─loader
│  │  │              │  ├─localbroadcastmanager
│  │  │              │  ├─print
│  │  │              │  ├─slidingpanelayout
│  │  │              │  ├─swiperefreshlayout
│  │  │              │  ├─vectordrawable
│  │  │              │  ├─versionedparcelable
│  │  │              │  └─viewpager
│  │  │              └─com
│  │  │                  └─example
│  │  │                      └─helloworld
│  │  └─validate_signing_config
│  │      └─debug
│  │          └─out
│  ├─outputs
│  │  ├─apk
│  │  │  └─debug
│  │  └─logs
│  └─tmp
│      └─compileDebugJavaWithJavac
├─libs
└─src
├─androidTest
│  └─java
│      └─com
│          └─example
│              └─helloworld
├─main
│  ├─java
│  │  └─com
│  │      └─example
│  │          └─helloworld
│  └─res
│      ├─drawable
│      ├─drawable-v24
│      ├─layout
│      ├─mipmap-anydpi-v26
│      ├─mipmap-hdpi
│      ├─mipmap-mdpi
│      ├─mipmap-xhdpi
│      ├─mipmap-xxhdpi
│      ├─mipmap-xxxhdpi
│      └─values
└─test
└─java
└─com
└─example
└─helloworld
  • libs
    • 放一些 jar 包,比如你接入第三方平台的话,例如微信分享、支付、QQ登陆等等,那么你可能需要把他们提供的 jar 包放在该目录下,或者参照第三方平台提供的 demo,让你放在哪,就放在哪。
  • src
    • 这个文件夹就是存放各种资源了,包括代码资源、图片资源等等。
  • src/androidTest
    • 单元测试的代码。
  • src/main
    • 最主要的文件夹。
  • src/main/assets
    • 放置一些不需要被编译成二进制的文件,比如内置的db文件。
  • src/main/java
    • java代码都在这里。
  • src/main/res/anim
    • 默认是没有这个文件夹的,这个文件是我新建的,当你需要存放动画xml资源的时候,你就需要新建这么一个文件夹 anim,大家先记着,用到时候就知道有这么回事了。
  • src/main/res/drawable
    • 存放自定义的背景xml文件,用来设置视图的背景。注意,我这种说法是实际开发中就这么做的,当然,你也可以把图片放里面,不是不可以。
  • src/main/res/drawable-xxhdpi
    • 这个文件夹默认也是没有的,是我新建的,当然实际上你还可以新建drawable-hdpi、drawable-xhdpi、drawable-xxxhdpi,用来存放不同尺寸的图片资源
  • src/main/res/layout
    • 存放布局 xml 文件,包括 Activity 的布局文件,自定义 View 的布局文件等等。
  • src/main/res/mipmap-*
    • 存放不同尺寸的 APP 的启动图标。
  • src/main/res/values
    • 存放颜色、单位、自定义属性、样式等 xml 文件。
  • src/main/res/AndroidManifest.xml
    • 每一个 Activity 都需要在这个文件里面注册,还可以设置默认启动的 Activity,设置权限等等。
  • src/test
    • 单元测试代码。
  • .gitignore
    • 和外层 .gitignore 类似,将制定目录或文件排除在版本控制之外。
  • app.iml
    • 和外层 .iml 文件一样,IntelliJ IDEA 项目自动生成的文件,不需要干预。
  • build.gradle
    • 这个还是很重要的,当然,初学者暂止也无需关心。Android Studio 通过 Gradle 来构建项目,我们可以在 build.gradle 配置很多信息,例如需要引入的库、release 包和 debug 包的不同配置、各个渠道包的配置等等。Gradle 是一个知识体系,深入学习的话还是有很多内容的。
  • proguard-rules.pro
    • 混淆文件。我们防止别人通过安装包获取到源代码,所以通过此文件对代码进行混淆,从而破坏代码的阅读性。可以指定部分包下面的代码混淆,或者指定部分文件混淆;也可以指定部分文件不混淆,任由你配置。

本文参考于《Android》项目目录结构解读

https://www.jianshu.com/p/f64a9bebaac3