1.1 Android 简介
1.1.1 Android 系统架构
- Linux 内核层:为各种硬件提供底层驱动
- 系统运行库层:通过 C/C++ 库提供主要的特性支持。
- 应用框架层:提供构建应用程序时需要用到的各种 API。
- 应用层:安装在手机上的应用程序。
1.1.2 Android 已发布的版本
Android API | Android版本 | 分布比例 |
---|---|---|
28 | Android 9 (Pie) | 10.40% |
27 | Android 8.1 (Oreo) | 15.40% |
26 | Android 8.0 (Oreo) | 12.90% |
25 | Android 7.1.1 (Nougat) | 7.80% |
24 | Android 7.0 (Nougat) | 11.40% |
23 | Android 6.0 (MarshMallow) | 16.90% |
22 | Android 5.1 (Lollipop) | 11.50% |
21 | Android 5.0 (Lollipop) | 3.00% |
19 | Android 4.4 (Kitkat) | 6.90% |
18 | Android 4.3 (Jelly Bean) | 0.50% |
17 | Android 4.2.x (Jelly Bean) | 1.50% |
16 | Android 4.1.x (Jelly Bean) | 1.20% |
15 | Android 4.0.3 - 4.0.4 (Ice Cream Sandwich) | 0.30% |
10 | Android 2.3.3 - 2.3.7 (Gingerbread) | 0.30% |
1.1.3 Android 应用开发特色
- 四大组件:活动、服务、广播接收器、内容提供器
- 丰富的系统控件
- SQLite 数据库
- 强大的多媒体
- 地理位置定位
1.2 搭建开发环境
- JDK8 或以上版本
- Android SDK
- Android Studio
1.3 创建 Android 项目
- Start a new Android Studio project
- 启动模拟器
- 运行 HelloWorld 项目
1.3.1 分析目录结构
首先将项目结构模式切换为 Project 模式。
.gradle 自动生成的目录,无须关心
.idea 自动生成的目录,无须关心
app 项目主要目录,即工作目录
build 编译时自动生成的文件目录,无须关心
libs 第三方 jar 包存放目录
src 项目主要目录,即工作目录
androidTest 测试用例目录,进行自动化测试
main 项目主要目录,即工作目录
java JAVA 代码目录
res 资源目录
AndroidManifest.xml Android项目配置文件
test 单元测试用例目录
.gitignore Git 版本控制排除的配置文件
app.iml IDEA 自动生成的文件,无须关心
build.gradle app 模块的 gradle 构建脚本
proguard-rules.pro 配置项目代码的混淆规则
build 编译时自动生成的文件目录,无须关心
gradle 包含 gradle wrapper 的配置文件
.gitignore Git 版本控制排除的配置文件
build.gradle 全局的 gradle 构建脚本,通常不需修改
gradle.properties 全局的 gradle 配置文件
gradlew 命令行执行 gradle 的文件(Linux)
gradlew.bat 命令行执行 gradle 的文件(Windows)
HelloWorld.iml IDEA 自动生成的文件,无须关心
local.properties 指定本机 Android SDK 位置的配置文件,通常不需修改
settings.gradle 指定项目中引入的模块的配置文件
代码分析。
# app/src/main/AndroidManifest.xml
<!-- 对 HelloWorldActivity 活动进行注册 -->
<activity android:name=".HelloWorldActivity">
<intent-filter>
<!-- 指定 HelloWorldActivity 是项目的主活动 -->
<action android:name="android.intent.action.MAIN" />
<!-- 指定 HelloWorldActivity 是应用启动时首先启动的活动 -->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
# app/src/main/java/com/example/helloworld/HelloWorldActivity.java
// 活动代码,需要继承 AppCompatActivity
public class HelloWorldActivity extends AppCompatActivity {
// 活动创建时会自动执行的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
}
}
# app/src/main/res/layout/hello_world_layout.xml
...
# 文本控件
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
...
1.3.2 详解项目中的资源
res/drawable 图片目录
res/drawable-xxhdpi 图片目录,建议放在此目录
res/layout 布局文件
res/mipmap-hdpi 应用图标
res/mipmap-mdpi 应用图标
res/mipmap-xhdpi 应用图标
res/mipmap-xxhdpi 应用图标,建议放在此目录
res/mipmap-xxxhdpi 应用图标
res/values-w820dp 字符串、样式、颜色等配置
res/values 字符串、样式、颜色等配置
# app/src/main/res/values/strings.xml
# 定义字符串
<resources>
<string name="app_name">HelloWorld</string>
</resources>
# 代码中使用
R.string.app_name
# XML中使用
@string/app_name
使用示例。
# HelloWorld/app/src/main/AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" # 指定图标配置,使用@mipmap引用图标
android:label="@string/app_name" # 指定应用名称配置,使用@string引用字符串
android:supportsRtl="true"
android:theme="@style/AppTheme"> # 指定主题配置,使用@style引用风格目录
1.3.3 详解 build.gradle 文件
# build.gradle
buildscript {
repositories {
// 声明代码托管仓库
jcenter()
}
dependencies {
// 使用 gradle 构建 Android 项目
classpath 'com.android.tools.build:gradle:2.2.0'
}
}
allprojects {
repositories {
// 声明代码托管仓库
jcenter()
}
}
# app/build.gradle
// 应用的插件:com.android.application 为应用程序模块;com.android.library 为库模块
apply plugin: 'com.android.application'
android {
// 指定项目的编译版本
compileSdkVersion 24
// 指定项目构建工具的版本
buildToolsVersion "24.0.2"
defaultConfig {
// 指定项目包名
applicationId "com.example.helloworld"
// 指定项目最低兼容的安卓版本
minSdkVersion 15
// 指定在该版本上已经做了充分的测试,启动最新的功能和特性
targetSdkVersion 24
// 指定项目的版本号
versionCode 1
// 指定项目的版本名称
versionName "1.0"
}
// 生成安装文件的相关配置
buildTypes {
// 生成正式版安装文件的相关配置
release {
// 是否对项目代码进行混淆
minifyEnabled false
// 代码混淆时使用的规则文件:安卓通用混淆规则&项目混淆规则
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
// 指定项目的依赖关系
dependencies {
// 本地依赖声明
compile fileTree(include: ['*.jar'], dir: 'libs')
// 远程依赖声明
compile 'com.android.support:appcompat-v7:24.2.1'
// 测试用例库声明
testCompile 'junit:junit:4.12'
}
1.4 日志工具的使用
Log.v() verbose 级别,琐碎的、意义最小的日志
Log.d() debug 级别,调试分析的日志
Log.i() info 级别,重要的数据的日志
Log.w() warn 级别,潜在风险的日志
Log.e() error 级别,错误的的日志
public class HelloWorldActivity extends AppCompatActivity {
private static final String TAG = "HelloWorldActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate execute");
setContentView(R.layout.hello_world_layout);
}
}
打印的日志位于:Android Monitor -> logcat 面板。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。