android studio 项目结构解析

一、android系统架构

    android的系统结构一共能够分为四个,分别为:Linux内核层、系统运行库层、应用框架层和应用层php

1.1 Linux内核层

Android系统是基于Linux内核的,这一层为Android设备的底层提供各类的驱动。html

1.2 系统运行库层

    这一层经过C/C++库为Android系统提供主要的性能支持。例如Webkit库提供了浏览器内核的支持。android

    一样这一层还包含了Android运行时库,它主要是提供了一些核心库,可以容许开发者用Java语言来开发Android应用。另外,Android运行时库,还包含了Dalvik虚拟机(5.0系统以后改成ART容许环境),它使得每一个Android应用都能运行在独立的进程当中,并拥有一个独立的Dalvik虚拟机实例。git

1.3 应用框架层

    这一层提供了构建应用程序时可能用到的各类API,Android自带的一些核心应用就是利用这些API完成的。算法

1.4 应用层

    全部安装在Android手机上的程序都是属于这一层的,例如手机自带的联系人以及包括咱们本身开发的程序。浏览器

一图胜千言,以下图所示:闭包

Android系统架构

二、android studio的项目结构解析

2.1 android studio总体项目结构解析

2.1.1 .gradle和.idea

    Android studio 自动生成的文件。架构

2.1.2 app

    项目中的资源和代码都放在该目录下面。app

2.1.3 gradle

    此目录包含了gradle wrapper的配置文件。使用gradle wrapper,能够在没有安装gradle的电脑中编译程序。若是电脑中已经存在编译此项目的gradle,会直接进行编译,若是没有,Android Studio会自动下载,可是这个时候速度会特别的慢。能够直接结束掉整个Android Studio进程,进行手动下载。具体的下载方式参考:http://www.jianshu.com/p/e1c0b46e317c框架

    关于Gradle Wrapper的解释参考: https://as.quanke.name/gradle-wrapper.html

2.1.4 .gitignore

    将制定的目录和文件排除在版本控制的范围以外

2.1.5 build.gradle

    项目全局的gradle构建版本

2.1.6 gradle.properties

    项目全局的gradle配置文件

2.1.7 gradlew

    用命令行的方式执行gradle命令。这个是运行在Mac和Linux系统中的

2.1.8 gradlew.bat

    用命令行的方式执行gradle命令。这个是运行在Windows系统中的

2.1.9 local.properties

    指定本机中的Android sdk地址

2.1.10 settings.gradle

    指定项目中全部引入的模块

2.2 android studio app目录结构解析

2.2.1 build

    编译时自动生成的文件,能够不用管

2.2.2 libs

    包含了全部的第三方jar包

2.2.3 androidTest

    自动化测试程序应该放的地方

2.2.4 main

    包含全部的代码和资源文件

2.2.5 AndroidManifest.xml

    android的四大组件注册以及权限申明

2.2.6 test

    编写Unit Test测试用例

2.2.7 .gitignore

    将app目录中指定的文件排除在版本控制的范围以外

2.2.8 app.iml

    IntelliJ IDEA项目自动生成的文件.

    (IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由JetBrains软件公司(前称为IntelliJ)发展,提供Apache 2.0开放式受权的社区版本以及专有软件的商业版本,开发者可选择其所需来下载使用。2014年12月,Google宣布其旗下专用于发展Android操做系统的首版Android Studio,即基于IntelliJ IDEA的社区版本发展而成[6],用以取代原来提供Android开发者使用的Eclipse ADT。开发者除了可直接下载Android Studio外,原IntelliJ用户亦可下载其相关插件来进行开发程序。)

    参考地址:https://zh.wikipedia.org/wiki/IntelliJ_IDEA

2.2.9 build.gradle

    app模块的gradle构建脚本

2.2.10 proguard-rules.pro

    指定程序中代码混淆的规则

三、build.gradle文件的解析

3.1 全局build.gradle文件的解析

3.1.1 repositories与jcenter

    这两个都是版本控制的的工具

3.1.2    dependencies中的gradle

    定义的项目依赖gradle来编译,并定义了gradle的具体的版本

3.2 app目录下的build.gradle文件解析

3.2.1 apply plugin

    这一行通常会有两个值,一个是com.android.application,另外一个是com.android.library。前者标志这这个项目是个能够单独运行的项目,后者标志这个项目是其余程序的代码库

3.2.2    compileSdkVersion

    指定这个项目的编译版本

3.2.3    applicationId

    指定项目的包名

3.2.4    minSdkVersion

    指定项目最低兼容的android系统版本

3.2.5    targetSdkVersion

    这个值是一个android系统版本,表示在该系统版本上面已经作了充分的测试,能够正常运行。

3.2.6    versionCode和versionName

    这个表示项目的版本号和版本命。这个在项目升级的时候会用到。

3.2.7    buildTypes

    buildTypes闭包中用于指定代码混淆的相关配置,主要包含两个子闭包,分别为debug和release。debug用于生成测试版的时候,所须要用到的代码混淆。release则是定义生成正式版的时候所须要的代码混淆。

3.2.8    minifyEnabled

    值为true和false,true表明混淆,false表明不混淆。

3.2.9    proguardFiles

    指定代码混淆的规则。其中proguard-android.txt是在Android SDK目录下,其中包含了项目通用的代码混淆。proguard-rules.pro这个文件在app目录下,包含了当前特有的代码混淆规则。

3.2.10    dependencies

    dependencies闭包,主要是指定项目的依赖关系。

    项目中依赖关系能够分为三种:本地依赖,库依赖和远程依赖。

    本地依赖:能够对本地的jar包和目录添加依赖关系。例如:implementation fileTree(dir: 'libs', include: ['*.jar']).这个就表示将libs目录下的全部的jar文件添加到项目的构建路径中去

    库依赖:添加项目中的库模块。例如:compile project(':PluginCore'),其中PluginCore表示的就是一个库模块

    远程依赖:能够对jcenter上的开源项目添加依赖关系。例如:implementation 'com.android.support:appcompat-v7:28.0.0-rc02'

四、关于drawable和mipmap文件夹的区别

    mipmap文件夹中的图片,能够有优化后的缩放算法,而且对于不一样分辨率的手机,只会保存其对应的分辨率的文件,其余的文件会被删除掉。特别是桌面图标和须要作动画的图标。使用mipmap会效率更高。而后google也是推荐使用mipmap来保存桌面图标。因此建议图标仍是放置到mipmap文件夹中。而一些图片文件,则能够放到drawable中!

    参考地址:https://www.jianshu.com/p/ecf007710fae

相关文章
相关标签/搜索