From 000a3d3547d772b52ddba17f9188095b159b9224 Mon Sep 17 00:00:00 2001 From: Andonade Date: Mon, 20 Nov 2023 22:49:00 +0800 Subject: [PATCH 1/9] feat(Android): add index page --- docs/frontend/android/index.md | 38 ++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 docs/frontend/android/index.md diff --git a/docs/frontend/android/index.md b/docs/frontend/android/index.md new file mode 100644 index 00000000..4aa2ef9f --- /dev/null +++ b/docs/frontend/android/index.md @@ -0,0 +1,38 @@ +# Android 开发入门 + +!!! info "说明" + + 本文根据 2023 年学生科协暑培朱煜章同学主讲的 Android 课程的讲义进行一定修改而成。 + +Android 是一个开源的、基于 Linux 开发的移动设备操作系统,编写一个 Android 应用可以使用的编程语言有 Java, Kotlin, C++ 等,本文档将以 Java 为例进行讲解 + +## 前置知识 + +- Java 语言基础知识,可以参考 [Java 语言基础](../../languages/java/index.md) + +## 开发准备 + +- Java 语言环境 +- 我们选择 Android Studio 作为开发平台,可以在 [Download Android Studio & App Tools - Android Developers (google.cn)](https://developer.android.google.cn/studio/) 下载。Android Studio 是一个基于 IntelliJ IDEA 的 Android 开发工具,为开发人员提供了广泛的功能和工具,用于设计、编写、调试和测试 Android 应用程序。我们在本课程需要用到的功能有: + - Java 编程窗口:Android 应用程序可以使用 Java 或 Kotlin 编写。我们在本课程选择 Java。 + - 布局编辑器:Android Studio 提供了一个可视化布局编辑器,用于设计应用程序的用户界面。开发人员可以直观地添加 UI 元素、调整布局和设置属性。 + - 调试工具:Android Studio 具有内置的调试工具,开发人员可以在代码中设置断点,跟踪变量的值,并执行逐行调试。 + - 虚拟设备管理器:Android Studio 包含一个虚拟设备管理器,用于创建和管理模拟的 Android 设备。这使开发人员能够在没有实际设备的情况下进行应用程序的测试和调试。 + - APK 构建工具:Android Studio 可以将应用程序打包为 Android 安装包(APK)。开发人员可以生成签名的 APK 文件,以便在设备上进行部署和分发。 + - SDK 管理器:Android Studio 包含一个 SDK(Software Development Kit)管理器,用于下载和管理 Android 平台的各种版本和附加组件。开发人员可以根据目标设备和最低支持版本来选择所需的 SDK 组件。 + +## 学习方法 + +单纯通过文档来学习 Android 开发是很痛苦的,因此我们强烈建议面向一些实际的代码,而不是文档中的样例代码,这样可以更容易了解 Android 的设计模式,而且在 IDE 中可以用你的 shift 键直接跳转到你需要浏览的地方,这比看文档看到不明白的地方再去百度/谷歌快太多了。本文末尾也会提供一个项目供大家参考。 + +## 后续拓展 + +本文档可以在以下课程帮助到你: + +- 程序设计训练 Java 课堂 +- 其他存在 Android 开发需求的课程 + +## 资源链接 + +- Android 开发者官方文档 +- GitHub 上的一个 Android 包含教程、一些开源项目和工具库的合集 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index bba137ca..519c786a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -172,6 +172,8 @@ nav: - 非常规数据流: frontend/react/dataflow.md - 函数组件: frontend/react/function-component.md - 后续拓展: frontend/react/extensions.md + - Android 开发入门: + - frontend/android/index.md - 后端框架: - backend/index.md - ExpressJS: backend/expressjs/express-js.md From ec7f058bfed196413c89510144f246d7c8dd8e29 Mon Sep 17 00:00:00 2001 From: Andonade Date: Mon, 20 Nov 2023 23:44:29 +0800 Subject: [PATCH 2/9] fix(Android): typo --- docs/frontend/android/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/frontend/android/index.md b/docs/frontend/android/index.md index 4aa2ef9f..140e714a 100644 --- a/docs/frontend/android/index.md +++ b/docs/frontend/android/index.md @@ -13,8 +13,7 @@ Android 是一个开源的、基于 Linux 开发的移动设备操作系统, ## 开发准备 - Java 语言环境 -- 我们选择 Android Studio 作为开发平台,可以在 [Download Android Studio & App Tools - Android Developers (google.cn)](https://developer.android.google.cn/studio/) 下载。Android Studio 是一个基于 IntelliJ IDEA 的 Android 开发工具,为开发人员提供了广泛的功能和工具,用于设计、编写、调试和测试 Android 应用程序。我们在本课程需要用到的功能有: - - Java 编程窗口:Android 应用程序可以使用 Java 或 Kotlin 编写。我们在本课程选择 Java。 +- 我们选择 Android Studio 作为开发平台,可以在 [Download Android Studio & App Tools - Android Developers (google.cn)](https://developer.android.google.cn/studio/) 下载。Android Studio 是一个基于 IntelliJ IDEA 的 Android 开发工具,为开发人员提供了广泛的功能和工具,用于设计、编写、调试和测试 Android 应用程序。开发中常用的功能有: - 布局编辑器:Android Studio 提供了一个可视化布局编辑器,用于设计应用程序的用户界面。开发人员可以直观地添加 UI 元素、调整布局和设置属性。 - 调试工具:Android Studio 具有内置的调试工具,开发人员可以在代码中设置断点,跟踪变量的值,并执行逐行调试。 - 虚拟设备管理器:Android Studio 包含一个虚拟设备管理器,用于创建和管理模拟的 Android 设备。这使开发人员能够在没有实际设备的情况下进行应用程序的测试和调试。 From 1d679dff767709199e9e2b7d50b3a13c58053907 Mon Sep 17 00:00:00 2001 From: Andonade Date: Fri, 24 Nov 2023 14:11:46 +0800 Subject: [PATCH 3/9] feat(Android): add structure page --- docs/frontend/android/structure.md | 32 ++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 33 insertions(+) create mode 100644 docs/frontend/android/structure.md diff --git a/docs/frontend/android/structure.md b/docs/frontend/android/structure.md new file mode 100644 index 00000000..e6d56b64 --- /dev/null +++ b/docs/frontend/android/structure.md @@ -0,0 +1,32 @@ +# Android 项目的构成 + +## 项目概览 + +在 Android Studio 中新建一个空项目,可以看到项目结构如下 + +
+ +
+ +## 项目文件 + +项目中最关键的就是 app 目录下的项目文件,它包含几个重要的部分: + +- `AndroidManifest.xml` 是应用清单文件,需要声明以下内容: + + - 应用的软件包名称,如 com.example.myapp。 + - 应用的组件,如应用中使用的 Activity 和 Service。 + - 应用为访问系统或其他应用的受保护部分所需的权限,如使用网络连接的权限、读取外部储存的权限等等,具体的权限清单可以查看 [权限 API 参考文档页面](https://developer.android.com/reference/android/Manifest.permission)。 + - 应用需要的硬件和软件功能,特别是 **minSdkversion** 和 **targetSdkversion**,前者定义了 APP 所需要的最低 API 级别,后者指定了应用的目标 API 级别,API 级别与 Android 的系统版本相对应,对应关系可查看 [什么是 API 级别](https://developer.android.com/guide/topics/manifest/uses-sdk-element?hl=zh-cn#ApiLevels)。 + +- `java` 目录下存放的是 Java 源代码文件。 +- `res` 目录下包含所有非代码资源(例如 XML 布局、界面字符串和位图图像),我们将在下一节介绍 Android 的资源文件。 +- `build.gradle` 是构建工具包 Gradle 执行应用构建过程的配置文件,除了指定使用的 Java 版本以及 API 级别外,应用所使用的依赖项也需要添加到 `build.gradle` 中,如 + ```text + dependencies { + implementation 'com.google.android.material:material:1.8.0' + implementation 'com.squareup.okhttp3:okhttp:4.9.2' + } + ``` + +其他文件在创建项目时就已经由 Android Studio 帮助你完成了,几乎不需要更多的修改。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 519c786a..4db8589d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -174,6 +174,7 @@ nav: - 后续拓展: frontend/react/extensions.md - Android 开发入门: - frontend/android/index.md + - 项目结构: frontend/android/structure.md - 后端框架: - backend/index.md - ExpressJS: backend/expressjs/express-js.md From f6edf15dab19761fdd84a44d87b97e06b1869da3 Mon Sep 17 00:00:00 2001 From: Andonade Date: Fri, 24 Nov 2023 14:14:49 +0800 Subject: [PATCH 4/9] fix(Android): update illustration --- docs/frontend/android/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/frontend/android/index.md b/docs/frontend/android/index.md index 140e714a..400f824a 100644 --- a/docs/frontend/android/index.md +++ b/docs/frontend/android/index.md @@ -2,7 +2,7 @@ !!! info "说明" - 本文根据 2023 年学生科协暑培朱煜章同学主讲的 Android 课程的讲义进行一定修改而成。 + 本文基于 2023 年学生科协暑培朱煜章同学主讲的 Android 课程的讲义完成。 Android 是一个开源的、基于 Linux 开发的移动设备操作系统,编写一个 Android 应用可以使用的编程语言有 Java, Kotlin, C++ 等,本文档将以 Java 为例进行讲解 From d8df519474c446bd8877bd494a19dcef1270f7ae Mon Sep 17 00:00:00 2001 From: Andonade Date: Fri, 24 Nov 2023 14:18:51 +0800 Subject: [PATCH 5/9] fix(Android): use correct title --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 4db8589d..49c76417 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -174,7 +174,7 @@ nav: - 后续拓展: frontend/react/extensions.md - Android 开发入门: - frontend/android/index.md - - 项目结构: frontend/android/structure.md + - Android 项目的构成: frontend/android/structure.md - 后端框架: - backend/index.md - ExpressJS: backend/expressjs/express-js.md From 132cec38a3f301de5e0f216947543006971f5dd1 Mon Sep 17 00:00:00 2001 From: Andonade Date: Sat, 25 Nov 2023 14:35:13 +0800 Subject: [PATCH 6/9] feat(Android): add resources page --- docs/frontend/android/resources.md | 135 +++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 136 insertions(+) create mode 100644 docs/frontend/android/resources.md diff --git a/docs/frontend/android/resources.md b/docs/frontend/android/resources.md new file mode 100644 index 00000000..b0dd71c7 --- /dev/null +++ b/docs/frontend/android/resources.md @@ -0,0 +1,135 @@ +# Android 的资源库 + +Android 的资源库存储着 APP 的本地资源,包括布局文件、图片、音频、字符串、颜色等内容,这些资源使用 XML 语法编写,被存储在项目文件的 res 目录下,在 APP 运行时可以被调用。 + +
+ +
+ +## 布局文件 + +布局文件一般被存储在 layout 目录下,你需要使用多种 `Layout` 将对应的部分插入到界面对应的位置并使用各种各样的 `View` 单独或嵌套在 `Layout` 内作为页面展示的元素。下面是一个示例: + +```xml + + + + + + + + + + + + + + + + + + + + +``` + +得到的布局如下图,如你所见,前后两个 View 是上下占位边框,中间的部分是一组横向线性排列,权重为 $2:1$;左边是两个文本框组成的,右边是一张图片。布局文件的编写还是比较直观的,更多地需要在实践中提高使用的熟练度,这里不再赘述。 + +
+ +
+ +!!! tip "几点关于布局文件的 tip" + + 1. 布局文件只能有一个根元素。 + 2. 上图可视化布局文件的工具是 Android Studio 的布局编辑器,你也可以在布局编辑器中直接添加元素并调整相关参数,任何更改 Android Studio 都会帮你写入布局文件内,不过直接对布局文件进行修改是更推荐的做法。 + +## 其他资源类型 + +除了布局文件以外,Android 还有很多类型的资源,比如颜色列表状态资源,它一般存储在 values 目录下的 `colors.xml`。 + +```xml + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + #66CCFF + #39C5BB + #787a7a + #FAFAFA + +``` + +还有菜单资源,一般存储在 menu 目录下。 + +```xml + + + + + + +``` + +Android 还有更多种资源类型,这里一一介绍并不现实,想要了解更多的可以跳转 [资源类型简介](https://developer.android.google.cn/guide/topics/resources/available-resources?hl=zh-cn)。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 49c76417..d6bd9d5e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -175,6 +175,7 @@ nav: - Android 开发入门: - frontend/android/index.md - Android 项目的构成: frontend/android/structure.md + - Android 的资源库: frontend/android/resources.md - 后端框架: - backend/index.md - ExpressJS: backend/expressjs/express-js.md From 7a81bd1012c0d4d487dfbc1c43f29a9635080765 Mon Sep 17 00:00:00 2001 From: Andonade Date: Sun, 26 Nov 2023 21:18:56 +0800 Subject: [PATCH 7/9] feat(Android): add components page --- docs/frontend/android/components.md | 290 ++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 291 insertions(+) create mode 100644 docs/frontend/android/components.md diff --git a/docs/frontend/android/components.md b/docs/frontend/android/components.md new file mode 100644 index 00000000..48692701 --- /dev/null +++ b/docs/frontend/android/components.md @@ -0,0 +1,290 @@ +# Android 的组件 + +编写 Android 应用程序就像搭积木,组件是构建应用程序的基本单元。对组件来说,最重要的方法是围绕着生命周期和交互进行的。我们下面将对这些概念进行介绍。 + +## Activity & Fragment + +活动(Activity)代表应用程序的一个屏幕或一个交互页面。Android 应用程序通常由多个活动组成,并且可以通过意图(Intent)在活动之间进行切换。通过启动新的活动,可以实现屏幕之间的导航和交互。片段(Fragment)是一种可重复使用的 UI 组件,通常嵌入在活动中,每个 Activity 可以包含多个 Fragment。 + +Activity 和 Fragment 通过布局文件定义其用户界面的外观和结构。布局文件使用 XML 格式编写,其中包含各种视图组件,如按钮、文本框、图像等。通过调用 `setContentView()` 方法,可以将布局文件与活动关联起来。下面是一个最简单的例子。我们使用 `R.` 来获取资源库的对应文件(如果你不确定写法,不妨打一个 `R.`,然后让强大的 Android Studio 补全),这样你就可以看见你的组件了。 + +```java +// MyActivity1.java +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +public class MyActivity1 extends Activity { + + private TextView textView; + private Button button; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_1); + + textView = findViewById(R.id.textView); + button = findViewById(R.id.button); + + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); + } + }); + } +} +``` + +```xml + + + + + +