AS第一节实验课

今天是AS实验课第一节课,完成AS的安装和配置,然后做一个hello world app,算是简单了解一下AS的基本操作。

一、安装和配置

网上教程很多,此处不再赘述。

二、了解基础界面和操作

这是建好project的界面,其中:

  • AndroidManifest.xml:
    Android 应用程序的清单文件,包含了应用程序的基本信息、组件声明、权限请求等。
  • java
    存放 Java 代码文件,这些代码是与 Android 应用程序的逻辑和功能相关的。通常包含了各种活动 (Activities)、服务 (Services)、广播接收器 (Broadcast Receivers) 等组件的代码。
  • res(资源):
    用途:存放 Android 应用程序的资源文件,包括图像、布局、字符串、样式等。
    这里的资源是与用户界面和应用程序功能相关的静态文件。
    • drawable
      用途:存放图像资源文件,如 PNG、JPEG 图片等。
      这些图像可以在应用程序的界面中使用。
    • layout
      用途:存放 XML 文件,用于定义 Android 应用程序的用户 界面布局结构。
      通过 XML 文件描述界面的结构和元素。
    • mipmap
      用途:存放应用程序的应用图标,包括各种不同分辨率的图 标。
      Android 系统会根据设备的屏幕密度选择合适的图标。
    • values
      用途:存放资源值,如字符串、颜色、尺寸等。
      这使得在应用程序中使用这些值更加灵活。
    • xml
      用途:存放一些 XML 文件,用于配置一些非布局、非字符串 等资源,如网络请求配置、权限配置等。

AS-helloworld界面

  1. 这里的build.gradle.kts(Project:My_Application)内容为
    1
    2
    3
    4
    // Top-level build file where you can add   configuration options common to all sub-projects/  modules.
    plugins {
    id("com.android.application") version "8.1.1" apply false
    }
    具体解释如下:
  • plugins:这是一个 Groovy 闭包(即代码块),用于配 置项目中的插件。
  • id("com.android.application") version "8.1.1" apply false:这行指示了应用了一个 Android 应用程序插件,它告诉 Gradle 构建系统这是一个 Android 应用项目。版本号为 “8.1.1” 表示使用的 Android Gradle 插件的版本。最后的 apply false 表示在此处 禁用了插件的自动应用,意味着该插件将不会在当前的 build.gradle 文件中被自动应用,可能会在后续的配置中手动应用。
  1. 这里的build.gradle.kts(Module :app)内容为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    plugins {
    id("com.android.application")
    }

    android {
    namespace = "com.example.myapplication"
    compileSdk = 33

    defaultConfig {
    applicationId = "com.example. myapplication"
    minSdk = 24
    targetSdk = 33
    versionCode = 1
    versionName = "1.0"

    testInstrumentationRunner = "androidx. test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    release {
    isMinifyEnabled = false
    proguardFiles(getDefaultProguardFile ("proguard-android-optimize.txt"), "proguard-rules.pro")
    }
    }
    compileOptions {
    sourceCompatibility = JavaVersion. VERSION_1_8
    targetCompatibility = JavaVersion. VERSION_1_8
    }
    }

    dependencies {

    implementation("androidx. appcompat:appcompat:1.6.1")
    implementation("com.google.android. material:material:1.8.0")
    implementation("androidx. constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test. ext:junit:1.1.5")
    androidTestImplementation("androidx.test. espresso:espresso-core:3.5.1")
    }
    这是一个 Android 项目的 build.gradle 文件内容,它用于配置 Android 项目的构建设置,包括依赖库、编译选项等。
  • plugins:

    1
    2
    3
    plugins {
    id("com.android.application")
    }

    这里声明了一个插件,com.android.application 表示这是一个 Android 应用项目,用于构建 Android 应用程序。

  • android:

    1
    2
    3
    4
    5
    android {
    namespace = "com.example.myapplication"
    compileSdk = 33
    ...
    }

    namespace: 这是 Android 应用程序的命名空间,它指定了我的应用程序的基本包名。在这里,命名空间被设置为 com.example.myapplication。
    compileSdk: 指定了我的项目所使用的编译版本(SDK 版本)。在这里,使用的是 SDK 版本 33。

  • defaultConfig:

    1
    2
    3
    4
    5
    6
    7
    8
    defaultConfig {
    applicationId = "com.example.myapplication"
    minSdk = 24
    targetSdk = 33
    versionCode = 1
    versionName = "1.0"
    testInstrumentationRunner = "androidx.test. runner.AndroidJUnitRunner"
    }

    applicationId: 这是我的 Android 应用程序的包名。在这里,它被设置为 com.example.myapplication。
    minSdk: 指定了应用程序支持的最低 Android 版本。在这里,最低支持 Android 版本为 24。
    targetSdk: 指定了应用程序的目标 Android 版本。在这里,目标 Android 版本为 33。
    versionCode: 这是 Android 应用程序的版本代码,用于区分不同版本。
    versionName: 这是 Android 应用程序的版本名,用于显示给用户。
    testInstrumentationRunner: 指定了用于运行单元测试的测试运行器。

  • buildTypes:

    1
    2
    3
    4
    5
    6
    buildTypes {
    release {
    isMinifyEnabled = false
    proguardFiles(getDefaultProguardFile ("proguard-android-optimize.txt"), "proguard-rules.pro")
    }
    }

    这里定义了一个构建类型 release,它用于生成发布版本的 APK 文件。在 release 构建类型中,设置了以下选项:
    isMinifyEnabled: 表示是否启用代码混淆。在发布版本中,一般会开启代码混淆以保护代码。
    proguardFiles(...): 指定了 ProGuard 配置文件的位置,用于配置代码混淆规则。

  • compileOptions:

    1
    2
    3
    4
    compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    }

    这里指定了 Java 编译选项,将源代码和目标代码的兼容性设置为 Java 1.8。

  • dependencies:

    1
    2
    3
    4
    5
    6
    7
    8
    dependencies {
    implementation("androidx. appcompat:appcompat:1.6.1")
    implementation("com.google.android. material:material:1.8.0")
    implementation("androidx. constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test. ext:junit:1.1.5")
    androidTestImplementation("androidx.test. espresso:espresso-core:3.5.1")
    }

    这里列出了项目的依赖项:
    implementation: 用于指定在应用程序运行时需要的库。
    testImplementation: 用于指定在进行单元测试时需要的库。
    androidTestImplementation: 用于指定在进行 Android 测试时需要的库。
    以上这些配置文件是一个 Android 项目的基本构建设置,它定义了项目的属性、依赖关系以及编译选项等信息。

以下是运行后的模拟器界面:
AS-helloworld-模拟器界面.png

三、设置Activity生命周期的Log日志

  1. 修改代码为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    package com.example.myapplication;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;

    import android.util.Log;

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("MainActivity", "onCreate");
    }

    @Override
    protected void onStart() {
    super.onStart();
    Log.d("MainActivity", "onStart");
    }

    @Override
    protected void onResume() {
    super.onResume();
    Log.d("MainActivity", "onResume");
    }

    @Override
    protected void onPause() {
    super.onPause();
    Log.d("MainActivity", "onPause");
    }

    @Override
    protected void onStop() {
    super.onStop();
    Log.d("MainActivity", "onStop");
    }

    @Override
    protected void onDestroy() {
    super.onDestroy();
    Log.d("MainActivity", "onDestroy");
    }

    @Override
    protected void onRestart() {
    super.onRestart();
    Log.d("MainActivity", "onRestart");
    }


    }
  2. 运行程序如图:

    运行程序1可知执行顺序确为onCreate()、onStart()、onResume()。
  3. back返回桌面并清理掉后台,如图:

    运行程序2可知执行顺序确为onPause()、onStop()、onDestory()。
  4. 再启动HelloWorld,在LogCat的输出日志中检查输出情况,如图:
    运行程序3可知执行顺序确为onRestart()、onStart()、onResume()。