Skip to content

Commit 7ef026a

Browse files
authored
Merge pull request #65 from leverimmy/android
[Feature Request] Update Android section of summer24
2 parents a138793 + e91fe8a commit 7ef026a

File tree

12 files changed

+275
-92
lines changed

12 files changed

+275
-92
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# sast-skill-docs
2+
3+
## Installation
4+
5+
```bash
6+
python3 -m venv .venv
7+
source .venv/bin/activate
8+
pip install -r requirements.txt
9+
```

docs/frontend/android/extensions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
到这里文档就算结束了,但是如果想更加深入的学习 Android 开发,可以参考下面的内容
44

55
- [Android 开发者官网](https://developer.android.com/docs?hl=zh-cn):官方网站是最权威的学习资料,里面有很多教程和详尽的 API 文档,还有一些示例代码。除此之外,官网还有一些关于 Android 开发的最新动态,如新的 API 版本、新的开发工具等。
6-
- [Android Weekly](https://androidweekly.net/):每周更新,汇集了互联网上有关 Android 开发的技术文章、开源项目、工具等,截至文档完成时已经更新了接近 600 期。
6+
- [Android Weekly](https://androidweekly.net/):每周更新,汇集了互联网上有关 Android 开发的技术文章、开源项目、工具等,截至文档完成时已经更新了接近 600 期。

docs/frontend/android/index.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
!!! info "说明"
44

5-
本文基于 2023 年学生科协暑培朱煜章同学主讲的 Android 课程的讲义完成
5+
本内容根据 [2023 年科协暑培朱煜章同学的 Java 课程讲义](https://summer23.net9.org/frontend/android/),和 [2024 年科协暑培熊泽恩同学的 Java 课程讲义](https://summer24.net9.org/frontend/android/prerequisites)整理
66

77
Android 是一个开源的、基于 Linux 开发的移动设备操作系统,编写一个 Android 应用可以使用的编程语言有 Java, Kotlin, C++ 等,本文档将以 Java 为例进行讲解。
88

@@ -14,11 +14,11 @@ Android 是一个开源的、基于 Linux 开发的移动设备操作系统,
1414

1515
- Java 语言环境
1616
- 我们选择 Android Studio 作为开发平台,可以在 [Download Android Studio & App Tools - Android Developers (google.cn)](https://developer.android.google.cn/studio/) 下载。Android Studio 是一个基于 IntelliJ IDEA 的 Android 开发工具,为开发人员提供了广泛的功能和工具,用于设计、编写、调试和测试 Android 应用程序。开发中常用的功能有:
17-
- 布局编辑器:Android Studio 提供了一个可视化布局编辑器,用于设计应用程序的用户界面。开发人员可以直观地添加 UI 元素、调整布局和设置属性。
18-
- 调试工具:Android Studio 具有内置的调试工具,开发人员可以在代码中设置断点,跟踪变量的值,并执行逐行调试。
19-
- 虚拟设备管理器:Android Studio 包含一个虚拟设备管理器,用于创建和管理模拟的 Android 设备。这使开发人员能够在没有实际设备的情况下进行应用程序的测试和调试。
20-
- APK 构建工具:Android Studio 可以将应用程序打包为 Android 安装包(APK)。开发人员可以生成签名的 APK 文件,以便在设备上进行部署和分发。
21-
- SDK 管理器:Android Studio 包含一个 SDK(Software Development Kit)管理器,用于下载和管理 Android 平台的各种版本和附加组件。开发人员可以根据目标设备和最低支持版本来选择所需的 SDK 组件。
17+
- 布局编辑器:Android Studio 提供了一个可视化布局编辑器,用于设计应用程序的用户界面。开发人员可以直观地添加 UI 元素、调整布局和设置属性。
18+
- 调试工具:Android Studio 具有内置的调试工具,开发人员可以在代码中设置断点,跟踪变量的值,并执行逐行调试。
19+
- 虚拟设备管理器:Android Studio 包含一个虚拟设备管理器,用于创建和管理模拟的 Android 设备。这使开发人员能够在没有实际设备的情况下进行应用程序的测试和调试。
20+
- APK 构建工具:Android Studio 可以将应用程序打包为 Android 安装包(APK)。开发人员可以生成签名的 APK 文件,以便在设备上进行部署和分发。
21+
- SDK 管理器:Android Studio 包含一个 SDK(Software Development Kit)管理器,用于下载和管理 Android 平台的各种版本和附加组件。开发人员可以根据目标设备和最低支持版本来选择所需的 SDK 组件。
2222

2323
## 学习方法
2424

@@ -28,10 +28,16 @@ Android 是一个开源的、基于 Linux 开发的移动设备操作系统,
2828

2929
本文档可以在以下课程帮助到你:
3030

31-
- 程序设计训练 Java 课堂
31+
- 程序设计训练Java 课堂
3232
- 其他存在 Android 开发需求的课程
3333

3434
## 资源链接
3535

36-
- Android 开发者官方文档 <https://developer.android.google.cn/docs>
37-
- GitHub 上的一个 Android 包含教程、一些开源项目和工具库的合集 <https://github.com/aritraroy/UltimateAndroidReference>
36+
- Android 开发者[官方文档](https://developer.android.google.cn/docs)
37+
- GitHub 上的一个 Android 包含教程、一些开源项目和工具库的合集:https://github.com/aritraroy/UltimateAndroidReference
38+
39+
## 相关链接
40+
41+
- 2022 年科协暑培的 [Android 项目示例](https://github.com/xsun2001/simple-tree-hole-android)(Java 语言)
42+
- 2023 年科协暑培的 [Android 课程作业](https://github.com/sast-summer-training-2023/sast2023-java-and-android)
43+
- 2024 年科协暑培的 [Android 课程作业](https://github.com/sast-summer-training-2024/sast2024-android)

docs/frontend/android/resources.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,4 @@ Android 的资源库存储着 APP 的本地资源,包括布局文件、图片
132132
</menu>
133133
```
134134

135-
Android 还有更多种资源类型,这里一一介绍并不现实,想要了解更多的可以跳转 [资源类型简介](https://developer.android.google.cn/guide/topics/resources/available-resources?hl=zh-cn)
135+
Android 还有更多种资源类型,这里一一介绍并不现实,想要了解更多的可以跳转 [资源类型简介](https://developer.android.google.cn/guide/topics/resources/available-resources?hl=zh-cn)

docs/frontend/android/structure.md

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,72 @@
11
# Android 项目的构成
22

3-
## 项目概览
3+
## Manifests
44

5-
在 Android Studio 中新建一个空项目,可以看到项目结构如下
5+
在 Android 应用中,`AndroidManifest.xml` 文件是必不可少的。它是 Android 应用的核心配置文件,它包含了应用的元数据和配置信息,用于描述应用的结构和行为。这个文件为系统提供了关于应用的各种关键信息,如应用的**包名****应用图标****版本信息****支持的 Android 版本****对外暴露的组件**(如 Activity、Service、BroadcastReceiver 等),以及其他系统需要知道的设置和权限。
66

7-
<center>
8-
<img src="https://i.imgs.ovh/2023/11/24/MBny0.png" width="30%">
9-
</center>
7+
以下是一个 `AndroidManifest.xml` 文件的示例:
108

11-
## 项目文件
9+
```xml
10+
<?xml version="1.0" encoding="utf-8"?>
11+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
12+
xmlns:tools="http://schemas.android.com/tools">
1213

13-
项目中最关键的就是 app 目录下的项目文件,它包含几个重要的部分:
14+
<application
15+
android:allowBackup="true"
16+
android:dataExtractionRules="@xml/data_extraction_rules"
17+
android:fullBackupContent="@xml/backup_rules"
18+
android:icon="@mipmap/ic_launcher"
19+
android:label="@string/app_name"
20+
android:roundIcon="@mipmap/ic_launcher_round"
21+
android:supportsRtl="true"
22+
android:theme="@style/Theme.Wordle"
23+
tools:targetApi="31">
24+
<activity
25+
android:name=".MainActivity"
26+
android:exported="true">
27+
<intent-filter>
28+
<action android:name="android.intent.action.MAIN" />
1429

15-
- `AndroidManifest.xml` 是应用清单文件,需要声明以下内容:
30+
<category android:name="android.intent.category.LAUNCHER" />
31+
</intent-filter>
32+
</activity>
33+
</application>
1634

17-
- 应用的软件包名称,如 com.example.myapp。
18-
- 应用的组件,如应用中使用的 Activity 和 Service。
19-
- 应用为访问系统或其他应用的受保护部分所需的权限,如使用网络连接的权限、读取外部储存的权限等等,具体的权限清单可以查看 [权限 API 参考文档页面](https://developer.android.com/reference/android/Manifest.permission)
20-
- 应用需要的硬件和软件功能,特别是 **minSdkversion****targetSdkversion**,前者定义了 APP 所需要的最低 API 级别,后者指定了应用的目标 API 级别,API 级别与 Android 的系统版本相对应,对应关系可查看 [什么是 API 级别](https://developer.android.com/guide/topics/manifest/uses-sdk-element?hl=zh-cn#ApiLevels)
35+
</manifest>
36+
```
2137

22-
- `java` 目录下存放的是 Java 源代码文件。
23-
- `res` 目录下包含所有非代码资源(例如 XML 布局、界面字符串和位图图像),我们将在下一节介绍 Android 的资源文件。
24-
- `build.gradle` 是构建工具包 Gradle 执行应用构建过程的配置文件,除了指定使用的 Java 版本以及 API 级别外,应用所使用的依赖项也需要添加到 `build.gradle` 中,如
25-
```text
26-
dependencies {
27-
implementation 'com.google.android.material:material:1.8.0'
28-
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
29-
}
30-
```
38+
## Fragments/Activities/Services/Adapters/Intents
3139

32-
其他文件在创建项目时就已经由 Android Studio 帮助你完成了,几乎不需要更多的修改。
40+
这些组件是 Android 应用的基本组成部分,位于 `app/src/main/java/` 文件夹里。
41+
42+
- **Fragments**:可以看作是活动的一部分,用于管理用户界面的一部分。
43+
- **Activities**:是应用中的一个单独的屏幕,用户可以与之交互。
44+
- **Services**:用于在后台执行长时间运行的操作,而不会干扰用户界面。
45+
- **Adapters**:用于将数据绑定到视图组件,如列表视图或网格视图。
46+
- **Intents**:用于启动活动、服务或广播,还可以在应用之间传递数据。
47+
48+
其中,`MainActivity.java` 通常作为应用的主入口点,它是一个继承自 `Activity` 的类,用于定义应用的主界面和用户交互逻辑。
49+
50+
## Tests
51+
52+
测试是确保应用质量和稳定性的重要部分。测试文件通常位于以下两个目录:
53+
54+
- `app/src/test/`:包含单元测试,这些测试在开发人员的机器上运行。
55+
- `app/src/androidTest/`:包含仪器测试,这些测试在设备或模拟器上运行。
56+
57+
## Resources
58+
59+
资源文件是应用的非代码部分,包括图像、字符串、颜色定义等。资源文件位于 `app/src/main/res/` 文件夹中,主要包括:
60+
61+
- `drawable/`:存放图像资源。
62+
- `values/`:存放字符串、颜色定义、尺寸定义等。
63+
- `layout/`:存放应用的布局文件,如 XML 文件。
64+
65+
## Gradle Scripts
66+
67+
Gradle 是 Android 应用的构建系统。Gradle Scripts 用于定义项目的构建过程和依赖关系。主要文件包括:
68+
69+
- `gradle.properties`:定义全局配置,如最小 SDK 版本。
70+
- `gradle-wrapper.properties`:定义 Gradle 包装器的配置。
71+
- `settings.gradle.kts`:定义项目设置,如模块名称。
72+
- `build.gradle.kts`:定义模块的构建逻辑,包括依赖项和插件。

docs/frontend/android/useful-things.md

Lines changed: 149 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,152 @@ videoView.setVideoPath(video);
160160
MediaController mediaController = new MediaController(getContext());
161161
videoView.setMediaController(mediaController);
162162
videoView.requestFocus();
163-
```
163+
```
164+
165+
## 序列化与反序列化:JSON
166+
167+
JSONObject 和 JSONArray 是在处理 JSON 数据时使用的两种基本数据结构。它们是轻量级的,并且通常用于在 Web 服务和移动应用之间传输数据。在 Android 开发中,这两个类通常由 `org.json` 库提供,这个库不是 Android 标准库的一部分,因此需要单独添加到项目中。
168+
169+
### JSONObject
170+
171+
JSONObject 是一个映射表,用来存储键值对,其中键是字符串,值可以是以下类型之一:
172+
173+
- `String`
174+
- `Number`
175+
- `JSONObject`
176+
- `JSONArray`
177+
- `Boolean`
178+
- `null`
179+
180+
**基本用法**:
181+
182+
1. **创建 JSONObject**:
183+
184+
```java
185+
JSONObject jsonObject = new JSONObject();
186+
```
187+
188+
2. **添加数据**:
189+
190+
```java
191+
jsonObject.put("key", "value");
192+
jsonObject.put("key2", 123);
193+
jsonObject.put("key3", anotherJsonObject);
194+
```
195+
196+
3. **获取数据**:
197+
198+
```java
199+
String value = jsonObject.getString("key");
200+
int number = jsonObject.getInt("key2");
201+
JSONObject jobj = jsonObject.getJSONObject("key3");
202+
```
203+
204+
4. **遍历 JSONObject**:
205+
206+
```java
207+
Iterator<String> keys = jsonObject.keys();
208+
while (keys.hasNext()) {
209+
String key = keys.next();
210+
Object value = jsonObject.get(key);
211+
// 处理 key 和 value
212+
}
213+
```
214+
215+
### JSONArray
216+
217+
JSONArray 是一个列表,用于存储有序的值集合。与 JSONObject 类似,JSONArray 中的值也可以是字符串、数字、布尔值、另一个 JSONObject 或 JSONArray。
218+
219+
**基本用法**:
220+
221+
1. **创建 JSONArray**:
222+
223+
```java
224+
JSONArray jsonArray = new JSONArray();
225+
```
226+
227+
2. **添加数据**:
228+
229+
```java
230+
jsonArray.put("value1");
231+
jsonArray.put(123);
232+
jsonArray.put(anotherJsonObject);
233+
jsonArray.put(anotherJsonArray);
234+
```
235+
236+
3. **获取数据**:
237+
238+
```java
239+
String value = jsonArray.getString(0);
240+
int number = jsonArray.getInt(1);
241+
JSONObject jobj = jsonArray.getJSONObject(2);
242+
JSONArray jarray = jsonArray.getJSONArray(3);
243+
```
244+
245+
4. **访问长度**:
246+
247+
```java
248+
int length = jsonArray.length();
249+
```
250+
251+
5. **遍历 JSONArray**:
252+
253+
```java
254+
for (int i = 0; i < jsonArray.length(); i++) {
255+
Object value = jsonArray.get(i);
256+
// 处理 value
257+
}
258+
```
259+
260+
### 示例代码
261+
262+
以下是一个简单的示例,演示了如何创建和使用 `JSONObject``JSONArray`
263+
264+
```java
265+
import org.json.JSONArray;
266+
import org.json.JSONObject;
267+
268+
public class JsonExample {
269+
public static void main(String[] args) {
270+
// 创建 JSONObject
271+
JSONObject jsonObject = new JSONObject();
272+
jsonObject.put("name", "John Doe");
273+
jsonObject.put("age", 30);
274+
275+
// 创建 JSONArray
276+
JSONArray jsonArray = new JSONArray();
277+
jsonArray.put("Apple");
278+
jsonArray.put("Banana");
279+
jsonArray.put("Cherry");
280+
281+
// 将 JSONArray 添加到 JSONObject
282+
jsonObject.put("fruits", jsonArray);
283+
284+
// 输出整个 JSON 对象
285+
System.out.println(jsonObject.toString());
286+
287+
// 获取并输出 name
288+
System.out.println(jsonObject.getString("name"));
289+
290+
// 获取并遍历 fruits
291+
JSONArray fruits = jsonObject.getJSONArray("fruits");
292+
for (int i = 0; i < fruits.length(); i++) {
293+
System.out.println(fruits.get(i));
294+
}
295+
}
296+
}
297+
```
298+
299+
## 输出日志:Log
300+
301+
在 Android 开发中,Log 类是用于输出日志信息的非常有用的工具。它属于 `android.util` 包,提供了多种方法来打印不同级别的日志信息,帮助开发者调试应用。
302+
303+
日志信息通常包括一个标签(tag)和一个消息(message)。标签是一个简短的字符串,用于标识日志信息的来源,而消息则是要输出的具体内容。
304+
305+
```java
306+
Log.d("preferenceTest", "This is a debug message.");
307+
```
308+
309+
Log 类输出的日志可以在 Android Studio 的 Logcat 窗口中查看。Logcat 是一个实时日志查看工具,允许开发者根据日志级别、标签等条件过滤日志信息。
310+
311+
使用 Log 类是 Android 开发中调试和监控应用状态的重要手段。合理使用日志可以帮助你快速定位问题并优化应用性能。

docs/index.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
| [ChrisZhang](https://zcy.moe/) | Rust |
3434
| livingshade | 对抗搜索 |
3535
| lys | Swift、Swift UI |
36-
| [zcy0](https://zhaochenyang20.github.io) | C++ OOP |
36+
| [zcy0](https://zhaochenyang20.github.io/Chayenne/) | C++ OOP |
3737
| lifeihan | PyTorch 入门 |
38-
| pyz | Go |
38+
| pyz | Go |
39+
| [Clever_Jimmy](https://leverimmy.top/) | Java、Android |

0 commit comments

Comments
 (0)