目录
4.2应用程序框架层(Application Framework)
1.Android历程
Andy Rubin,Android开发领头人,原google副总裁。
2005年,google收购Android公司
2007年,开放手持设备联盟成立,
2008年,首台Android手机发布-- HTC G1
2010年,Android2.3手机操作系统正式发布
2011年,Android4.0手机操作系统正式发布。
2.Android的SDK和NDK
2.1SDK
Software Development Kit ,软件开发工具包
2.2NDK
Android Development Kit,Android原生工具开发包
3.Android的应用领域
车载设备,家用设备(冰箱),支付,AI,VR,
4.Android的架构
android采用分层架构,由高到低分为4层,依次是应用程序层,应用程序框架层,核心类库,Linux内核。
4.1应用程序层(Applications)
应用程序层是一个核心应用程序的集合,所有安装在手机上的应用程序都属于这一层。例如系统自带的联系人程序,短信程序,还有自己开发的程序。
4.2应用程序框架层(Application Framework)
应用程序框架层主要提供了构建应用程序时所用到的各种API。Android自带的一些核心应用就是使用这些API完成的。开发者可以通过这些API来开发自己的应用程序。
4.3核心类库,即系统运行库层(Libraries)
核心类库中包含了系统库及Android运行时库。系统库这一层主要是通过C/C++库来为Android系统提供主要的特性支持。能够运行开发者使用java语言来编写Android应用程序。如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的操作,Webkit库提供了浏览器内核的支持等。
另外还包括了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得每一个Android应用都能运行在独立的进程中,并且拥有一个自己的Dalvik虚拟机实例。相比于java虚拟机,Dalvik虚拟机是专门为移动设备定制的,针对实际内存,CPU性能等做了优化处理。
包括了专门为Android开发的基于Java的程序库,如下所示:
android.app 提供应用程序模型的访问,是所有Android应用程序的基石。 android.content 方便应用程序之间、应用程序组件之间的内容访问、发布、消息传递。 android.database 用于访问内容提供者发布的的数据,包含SQLite数据库管理类。 android.opengl OpenGL ES 3D图片渲染API的Java接口。 android.os 提供应用程序访问标准操作系统服务的能力,包括消息、系统服务和进程间的通信。 android.text 在设备上显示渲染和操作文本。 android.view 应用程序用户界面的基础构建块。 andoird.widget 丰富的预置用户界面组件集合,包括按钮、标签、列表、布局管理、单选多选按钮等。 android.webkit 一系列类的集合,允许为应用程序提供内建Web浏览能力。 4.4Linux内核层(Linux Kernel)
Android是基于Linux内核的,Linux内核层为Android设备的各种硬件提供了底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,电源管理驱动,Wi-Fi驱动等。
5.Android版本历史
2008年9月,谷歌正式发布了Android1.0版本。
版本号 系统代号 API 发布时间 Android 1.0 BASE 1 2008-09 Android 1.1 BASE_1_1 2 2009-02 Android 1.5 CUPCAKE 3 2009-04 Android 1.6 DONUT 4 2009-09 Android 2.0 ECLAIR 5 2009-10 Android 2.0.1 ECLAIR_0_1 6 2009-12 Android 2.1.x ECLAIR_MR1 7 2010-01 2.2.1
2.2.3
FROYO 8 2010-05
2011-01~11
2.3
2.3.1
2.3.2
Gingerbread 9 2010-12/12
2011-01
2.3.3
2.3.7
Gingerbread mr1 10 2011-02
2011-09
3.0.x Honeycomb 11 2011-02 3.1.x Honeycomb mr1 12 2011-05 3.2
3.2.1
3.2.6
Honeycomb mr2 13 2011-07
2012
4.0
4.0.1
4.0.2
Ice Cream Sandwish 14 2011-10
2011-0
2011-11
4.0.0
4.0.4
Ice Cream Sandwich mr1 15 2011-12
2012-03
4.1.x
4.2.x
4.3
Jelly Bean 16
17
18
2012-07/ 07/ 10
2012-11/ 11 / 2013-02
2013-07/ 10
4.4 / 4.4.1~4.4.4 KitKat 19 2013-10 / 2014-06 4.4x
4.4x.1
4.4x.2
itkat 20 2014-06
2014-09
2014-10
5.0
5.1
Lollipop 21
22
2014-11/12
2015-03/04
6.0 Marshmallow 23 2015-10 7.0 Nougat 24 2016-08 7.1 Nougat 25 2016-10 8.0 Oreo 26 2017-03
6.Dalvik虚拟机与java虚拟机的不同
1.编译后的文件不同
java虚拟机运行的是.class字节码文件,而Dalvik虚拟机运行的则是其专有的.dex文件。
java虚拟机:.java -> .class -> .jar
Dalvik虚拟机: .java -> .class -> .dex -> .odex
2.基于的架构不同
java虚拟机是基于栈的架构,栈是一个连续的内存空间,取出和存入的速度比较慢
Dalvik是基于寄存器的架构,寄存器是CPU上的一块缓存,寄存器的存取速度要比从内存中存取的速度快很多,这样就可以根据硬件来最大程度优化设备,更适合移动设备的使用。
7.ART
Android 运行环境,Android4.4以上
8.Android系统四大组件
分别为:
Activity(活动) 凡是在应用中看得见的东西,都是放在活动中。 Service(服务) 在后台运行,即便退出应用,仍然可以继续运行。 Broadcaset Receiver(广播接收器) 允许应用接收来自各处的广播消息,比如电话,短信等。
同样,可以向外发出广播消息。
Content Provider(内容提供者) 为应用程序之间共享数据提供了可能,比如读取电话薄
里面的联系人。
创建放入如下,都需要继承超类
public class MainActivity extends Activity { } public class MyService extends Service { } public class MyReceiver extends BroadcastReceiver { } public class MyContentProvider extends ContentProvider { }
9.搭建开发环境
9.1 JDK
Java开发工具包。
9.2 Android SDK
谷歌公司提供的Android开发工具包,开发Android程序时,需要引入,来使用API。
9.3 Android Studio
10.Android Studio使用
常用快捷键
Ctr + D : 复制光标所在行,并在此行的下面粘贴出来
11.Android 程序结构
项目目录结构如下:
.gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件。 app 项目中的代码,资源等内容几乎都是放置在这个目录下的。 build 主要包含了一些在编译时自动生成的文件。 gradle 这个目录包含了gradle wrapper配置文件,会自动联网下载。Android Studio默认
没有启用gradle wrapper,如需要打开,可以点击File-Settings-Build,Exception,Deployment-Gradle
.gitignore 这个目录用来指定的目录或者文件排除在版本控制之外的。 build.gradle 这是项目全局的gradle构建脚本。 gradle.properties 这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。 gradlew和gradlew.bat 这两个文件用来在命令行界面执行gradle命令的,其中gradlew是在Linux或Mac系统中使用,
gradlew.bat是在Windows系统中使用的。
InternetOperation.iml 项目名.iml,其中iml是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于
IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,不需要修改其内容。
local.properties 这个文件用于指定本机中的Android Studio的SDK路径,通常自动生成。如果SDK位置发生改变,
则重新修改即可。
settings,gradle 这个文件用于指定项目中所有引入的模块。通常自动生成 app模块目录下的子目录如下:
build 这个目录和外层的build目录类似,主要也是包含了一些在编译时自动生成的文件,
不过它的内容更加复杂。
libs 第三方jar包需要放在这个目录下,放在这个目录下的jar包会自动添加到构建路径中去。 androidTest 此目录用于编写Android Test测试用例的,可以对项目进行一些自动化测试。 java 这个目录放置所有Java代码。 res 这个目录用于放置项目中使用的图片,布局,字符串,图标等资源。其中图片放在drawable子目录下,
布局放在layout子目录下,字符串放在values子目录下, mipmap子目录:通常用于存放应用程序图标,
系统会根据手机屏幕分辨率匹配相应大小的图标
AndroidManifest.xml AndroidManifest.xml文件(又称为清单文件),该文件是整个项目的配置文件,在程序中
定义的四大组件都需要在这个文件中注册,另外在该文件中还可以为程序添加权限。在清单文件中
配置的信息会添加到Android系统中,当程序运行时,系统会找到清单文件中配置信息,然后根据
配置信息打开相应组件。
test 此目录用于编写Unit Test测试用例,是对项目进行自动化测试的另外一种方式。 .gitignore 这个文件用于将app模块内指定的目录或者文件排除在版本控制之外。 app.iml IntelliJ IDEA项目自动生成的文件。 build.gradle 这是app模块构建脚本,这个文件中会指定很多项目构建相关的配置。 proguard-rules.pro 这个文件用于指定项目代码的混淆规则。
12.详解build.gradle文件
Android Studio采用Gradle来构建项目的。Gradle是一个先进的项目构建工具,它使用一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如Ant和Maven)的各种繁琐配置。
项目有两个build.gradle文件,一个位于最外层,一个位于app目录下,这两个文件对构建Android Studio项目都起到了至关重要的作用。
最外层的build.gradle:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
repositories闭包 两处repositories闭包中都声明了jcenter()这行配置,它是一个代码托管仓库,
很多Android开源项目都会将项目托管到jcenter上,声明这项配置后,我们就
可用在项目中轻松的引用任何jcenter上的开源项目。
dependencies闭包 dependencies闭包使用classpath声明了一个Gradle插件。Gradle并不是专门为构建
Android项目而开发的,Java,C++等很多项目都可以使用Gradle来构建,因此,
为了构建Android项目,就需要声明这个插件。其中,最后的3.1.2是版本号
app目录下的build.gradle:
apply plugin: 'com.android.application' android { compileSdkVersion 28 buildToolsVersion "24.0.2" defaultConfig { applicationId "com.administrator.internetoperation" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' implementation project(':helper') androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
apply plugin 表示应用一个插件,一般有两种值可选:com.android,application表示
这是一个应用程序模块,com.android.library表示这是一个库模块。应用
程序模块和库模块最大区别在于:一个可以直接运行,一个只能作为代码
库依附于别的应用程序模块来运行。
android闭包 由于配置项目构建的各种属性。
defaultConfig子闭包:用于对项目配置
compileSdkVersion:指定项目编译版本。
buildToolsVersion:指定项目构建工具的版本。
applicationId:指定项目的包名。
minSdkVersion:指定项目最低兼容的Android系统版本。
targetSdkVersion:指定的值表示已经在该目标版本上已经做过充分的测试,最新特性匹配最高版本。
versionCode:项目的版本号
versionName:项目的版本名
buildTypes子闭包:用于指定生成安装文件的相关配置
debug子闭包:指定生成测试安装文件的配置,可以忽略不写。
release子闭包:指定生成正式版安装文件的配置
minifyEnabled:用于指定是否对项目代码进行混淆。
proguardFiles:用于指定混淆时使用的规则文件。这里指定了两个文件,第一个proguard-android.txt
是在Android SDK目录下的,里面是所有项目通用的混淆规则;第二个proguard-rules.pro是在当前
项目的根目录下的,里面可以编写当前项目的特有混淆规则。
dependencies闭包 这个闭包功能强大,可以指定当前项目所有的依赖关系。通常Android一共有3种依赖方式:本地依赖,库依赖
和远程依赖。
本地依赖:可以对本地的jar包或目录添加依赖关系。
库依赖:可以对项目中的库模块添加依赖关系。
远程依赖:可以对jcenter库上的开源项目添加依赖关系。
implementation fileTree:是一个本地依赖声明,表示将libs目录下所有jar后缀的文件都添加到项目的构建
路径中去。
implementation :为远程依赖声明,其中com.android.support是域名部分,用于和其他公司的库做区分; appcompat-v7是组名称,用于和同一个公司中不同的库做区分;28.0.0是版本号,用于
和同一个库不同的版本做区分。
implementation project:为库依赖声明。
testImplementation:用于声明测试用例库
13.Android程序打包
打包成正式的Android安装包文件(Android Package,简称APK),其后缀名为.apk
方法:在菜单栏中点击Build下的Generate Signed APK选项。