文章目录
安卓概貌
安卓系统架构
-
Linux内核层
为安卓提供各种硬件底层驱动
-
系统运行库
-
应用框架层
提供构建应用程序时可能用到的API
-
应用层
用户安装的应用
安卓发布版本
Android版本名称Code name | Android版本 | 版本发布时间 | 对应API |
---|---|---|---|
(no code name) | 1.0 | 2008年9月23日 | API level 1 |
(no code name) | 1.1 | 2009年2月2日 | API level 2 |
Cupcake | 1.5 | 2009年4月17日 | API level 3,NDK 1 |
Donut | 1.6 | 2009年9月15日 | API level 4,NDK 2 |
Eclair | 2.0.1 | 2009年12月3日 | API level 6 |
Eclair | 2.1 | 2010年1月12日 | API level 7,NDK3 |
Froyo | 2.2.x | 2010年1月12日 | API level 8,NDK 4 |
Gingerbread | 2.3 – 2.3.2 | 2011年1月1日 | API level 9,NDK5 |
Gingerbread | 2.3.3 – 2.3.7 | 2011年9月2日 | API level 10 |
Honeycomb | 3.0 | 2011年2月24日 | API level 11 |
Honeycomb | 3.1 | 2011年5月10日 | API level 12,NDK 6 |
Honeycomb | 3.2.x | 2011年7月15日 | API level 13 |
Ice Cream Sandwich | 4.0.1 – 4.0.2 | 2011年10月19日 | API level 14,NDK 7 |
Ice Cream Sandwich | 4.0.3 – 4.0.4 | 2012年2月6日 | API level 15,NDK 8 |
Jelly Bean | 4.1 | 2012年6月28日 | API level 16 |
Jelly Bean | 4.1.1 | 2012年6月28日 | API level 16 |
Jelly Bean | 4.2-4.2.2 | 2012年11月 | API level 17 |
Jelly Bean | 4.3 | 2013年7月 | API level 18 |
KitKat | 4.4 | 2013年7月24日 | API level 19 |
Kitkat Watch | 4.4W | 2014年6月 | API level 20 |
Lollipop(Android L) | 5.0/5.1 | 2014年6月25日 | API level 21/API level 22 |
Marshmallow(Android M) | 6.0 | 2015年5月28日 | API level 23 |
Nougat(Android N) | 7.0 | 2016年5月18日 | API level 24 |
Nougat(Android N) | 7.1 | 2016年12月 | API level 25 |
Oreo(Android O) | 8.0 | 2017年8月22日 | API level 26 |
Oreo(Android O) | 8.1 | 2017年12月5日 | API level 27 |
Pie (Android P) | 9.0 | 2018年8月7日 | API level 28 |
安卓四大组件
- 活动(Activity)
- 服务(Service)
- 广播接收器(Broadcast Receiver)
- 内容提供器(Content Provider)
Hello World 项目中app目录结构
- build 存放编译时产生的存放目录
- libs 存放第三方java包
- androidTest 存放编写测试用例
- java 存放java代码
- res 项目资源目录
- AndroidManifest.xml Android 项目配置文件
HelloWorld项目如何运行的
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworld" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
本段代码会对HelloWorldActivity 这个活动进行注册, 没有在AndroidManifest.xml里注册活动不能使用。
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<action android:name="android.intent.action.MAIN" /> 和 <category android:name="android.intent.category.LAUNCHER" />
表示HelloWorld是项目的主活动, 在点击手机应用图标时, 首先启动这个活动。
MainActivity.java
package com.example.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
setContentView()方法,用以引入当前活动的activity_main.xml布局 。位置(res/layout)
布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
TextView 是Android系统提供的一个控件,用于布局中显示文字
res文件夹目录结构
- 所用drawable开头目录用于存放图片
- 所有mipmap开头目录用于存放应用图标
- values开头目录用于存放字符串, 样式, 颜色等配置
- layout 目录用于存放布局文件
注意: 后缀为: -hdpi -xhdpi -xxhdpi 是安卓适应不同分辨率所做区分的。
-xxhdpi 是安卓适应不同分辨率所做区分的。
strings.xml
<resources>
<string name="app_name">HelloWorld</string>
</resources>
这里定义了一个应用程序名的字符串, 对他的应用有两种方式
- 在代码中通过R.layout.activity_main可以获得该字符串的引用
- 在 XML 中通过@string/activity_main可以获得该字符串的引用
详解build.gradle
build.gradle是项目构建文件, Android Studio采用Gradle[^4]来构建项目。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
//闭包
repositories {
google()
//代码仓库托管
jcenter()
}
dependencies {
//引入构建Android项目插件
classpath 'com.android.tools.build:gradle:3.5.3'
// 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
}
app 目录下的build.gradle
//应用插件
// apply plugin的值有两种
//com.android.application (应用程序模块)
//com.android.library(库模块)
//
apply plugin: 'com.android.application'
android {
// Android SDK 版本
compileSdkVersion 29
//构建工具版本
buildToolsVersion "29.0.3"
//项目的细节配置
defaultConfig {
//项目包名
applicationId "com.example.helloworld"
//项目所兼容最低安卓版本
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
//用于指定生成安装文件的相关配置
buildTypes {
release {
//用于指定是否对项目进行混淆防止破解·
minifyEnabled false
//指定混淆规则
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
//项目依赖关系
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
Android Studio 项目依赖方式:
- 本地依赖:可以对本地的jar包或目录添加依赖关系
- 库依赖:对项目中的库添加依赖关系
- 远程依赖: 对代码库上的开源项目添加依赖关系
日志工具使用
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个日志打印工具:Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() 。按照日志级别从高到低为ERROR, WARN, INFO(信息), DEBUG, VERBOSE(冗长)。
下面是对各种日志级别的输出介绍:
- Log.v 的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息
- Log.d的输出颜色是蓝色的,输出大于或等于DEBUG日志级别的信息
- Log.i的输出为绿色,输出大于或等于INFO日志级别的信息
- Log.w的输出为橙色, 输出大于或等于WARN日志级别的信息
- Log.e的输出为红色,仅输出ERROR日志级别的信息.
调用日志打印方法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//调用Log.d()
Log.d("MainActivity ", "HRLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL");
}
}
Log.d()参数: tar:一般传入当前类名, msg:传入打印信息