Android 系统架构
Android 大致分为四层架构: Linux 内核层, 系统运行库层, 应用框架层, 应用层
1.Linux 内核层
Android 系统是基于 Linux 内核的, 这一层为 Android 设备的各种硬件提供了底层的驱动.
2. 系统运行库层
这一层通过一些 C/C++ 库来为 Android 系统提供了主要的特性支持.
在这一层还有 Android 运行时库:
它主要提供了一些核心库, 能够允许使用 Java 语言来编写 Android 应用.
Android 运行时库中还包含 Dalvik 虚拟机 (5.0 系统之后改为 ART 运行环境), 它使得每一个 Android 应用都能运行在独立的进程当中, 并且拥有一个自己的 Dalvik 虚拟机实例.
3. 应用框架层
这一层主要提供了构建应用程序时可能用到的各种 API.
4. 应用层
所有安装在手机上的应用程序都是属于这一层的.
Android 系统是通过包名来区分不同应用程序的, 因此包名一定要具有唯一性.
- <activity Android:name=".MainActivity">
- <intent-filter>
- <action Android:name="android.intent.action.MAIN" />
- <category Android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
这段代码表示对 MainActivity 这个活动进行注册, 没有在 AndroidManifest.xml 里注册的活动是不能使用的.
intent-filter 里面的两行代码表示 MainAcitvity 是这个项目的主活动, 在手机上点击应用图标, 首先启动就是这个活动.
AppCompatActivity 是一种向下兼容的 Activity, 可以将 Activity 在各个系统版本中增加的特性和功能最低兼容到 Android 2.1 系统.
Activity 是 Android 系统提供的一个活动基类, 项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性 (AppCompatActivity 是 Activity 的子类)
res 目录
res.PNG
1.drawable
用来存放图片
2.mipmap
用来存放应用图标
3.values
用来存放字符串, 样式, 颜色等配置
4.layout
用来存放布局文件
使用这些资源, 两种方式来引用
1. 在代码中通过 R.string.app_name 可以获得该字符串的引用
2. 在 xml 中通过 @string/app_name 可以获得该字符串的引用
注释: 其中 string 部分是可以替换的 (drawable,mipmap,layout)
App 目录下的 build.gradle 文件
App 目录下的 build.gradle 文件. PNG
1.apply plugin: 'xxx'
com.Android.application 表示这是一个应用程序模块
com.Android.library 表示这是一个库模块
区别:
应用程序模块是可以直接运行的
库模块只能作为代码库依附于别的应用程序模块来运行
2. Android 闭包
1.compileSdkVersion 指定项目的编译版本
2.buildToolsVersion 指定项目构建工具的版本
3.defaultConfig
applicationId 指定项目的包名
minSdkVersion 指定项目最低兼容的 Android 系统版本
targetSdkVersion 指定的值表示在该目标版本上已经做过了充分的测试, 系统将会为应用启用一些最新的功能和特性
versionCode 指定项目的版本号
versionName 指定项目的版本名
buildTypes 闭包: 用于指定生成安装文件的相关配置
debug 用于指定生成测试版安装文件的配置
release 用于指定生成正式版安装文件的配置
minifyEnabled 指定是否对项目的代码进行混淆 (true 表示混淆, false 表示不混淆)
proguardFiles 指定混淆时使用的规则文件, 这里指定了两个文件
proguard-Android.txt 是在 Android SDK 目录下的, 里面是所有项目通用的混淆规则
proguard-rules.pro 是在当前项目的根目录下的, 里面可以编写当前项目特有的混淆规则
3.dependencies 闭包: 指定当前项目所有的依赖关系
有 3 种依赖方式:
本地依赖: 可以对本地的 Jar 包或目录添加依赖关系
本地依赖声明:
implementation fileTree(dir: 'libs', include: ['*.jar'])
表示将 libs 目录下所有. jar 后缀的文件都添加到项目的构建路径当中
库依赖: 可以对项目中的库模块添加依赖关系
库依赖声明:
Implementation project(':helper')
远程依赖: 可以对 jcenter 库上的开源项目添加依赖关系
远程依赖声明:
implementation 'androidx.appcompat:appcompat:1.1.0'
声明:《第一行代码 (第 2 版)》
来源: http://www.jianshu.com/p/4a3e2f3257d4