android的系统结构一共能够分为四个,分别为:Linux内核层、系统运行库层、应用框架层和应用层php
Android系统是基于Linux内核的,这一层为Android设备的底层提供各类的驱动。html
这一层经过C/C++库为Android系统提供主要的性能支持。例如Webkit库提供了浏览器内核的支持。android
一样这一层还包含了Android运行时库,它主要是提供了一些核心库,可以容许开发者用Java语言来开发Android应用。另外,Android运行时库,还包含了Dalvik虚拟机(5.0系统以后改成ART容许环境),它使得每一个Android应用都能运行在独立的进程当中,并拥有一个独立的Dalvik虚拟机实例。git
这一层提供了构建应用程序时可能用到的各类API,Android自带的一些核心应用就是利用这些API完成的。算法
全部安装在Android手机上的程序都是属于这一层的,例如手机自带的联系人以及包括咱们本身开发的程序。浏览器
一图胜千言,以下图所示:闭包
Android studio 自动生成的文件。架构
项目中的资源和代码都放在该目录下面。app
此目录包含了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
将制定的目录和文件排除在版本控制的范围以外
项目全局的gradle构建版本
项目全局的gradle配置文件
用命令行的方式执行gradle命令。这个是运行在Mac和Linux系统中的
2.1.8 gradlew.bat
用命令行的方式执行gradle命令。这个是运行在Windows系统中的
指定本机中的Android sdk地址
指定项目中全部引入的模块
编译时自动生成的文件,能够不用管
包含了全部的第三方jar包
自动化测试程序应该放的地方
包含全部的代码和资源文件
android的四大组件注册以及权限申明
编写Unit Test测试用例
将app目录中指定的文件排除在版本控制的范围以外
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
app模块的gradle构建脚本
指定程序中代码混淆的规则
这两个都是版本控制的的工具
定义的项目依赖gradle来编译,并定义了gradle的具体的版本
这一行通常会有两个值,一个是com.android.application,另外一个是com.android.library。前者标志这这个项目是个能够单独运行的项目,后者标志这个项目是其余程序的代码库
指定这个项目的编译版本
指定项目的包名
指定项目最低兼容的android系统版本
这个值是一个android系统版本,表示在该系统版本上面已经作了充分的测试,能够正常运行。
这个表示项目的版本号和版本命。这个在项目升级的时候会用到。
buildTypes闭包中用于指定代码混淆的相关配置,主要包含两个子闭包,分别为debug和release。debug用于生成测试版的时候,所须要用到的代码混淆。release则是定义生成正式版的时候所须要的代码混淆。
值为true和false,true表明混淆,false表明不混淆。
指定代码混淆的规则。其中proguard-android.txt是在Android SDK目录下,其中包含了项目通用的代码混淆。proguard-rules.pro这个文件在app目录下,包含了当前特有的代码混淆规则。
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'
mipmap文件夹中的图片,能够有优化后的缩放算法,而且对于不一样分辨率的手机,只会保存其对应的分辨率的文件,其余的文件会被删除掉。特别是桌面图标和须要作动画的图标。使用mipmap会效率更高。而后google也是推荐使用mipmap来保存桌面图标。因此建议图标仍是放置到mipmap文件夹中。而一些图片文件,则能够放到drawable中!
参考地址:https://www.jianshu.com/p/ecf007710fae