学习Android(一)

简介

移动技术从未停止进化,而 Android 始终是创新的核心引擎。无论是渴望高薪职位、追求创业梦想,还是希望用技术创造价值,学习 Android 开发都是拥抱数字时代的战略性选择。从一行代码到一个改变世界的应用,你的旅程将从这里开始,接下来我们将开始进行学习Android开发。

一、安装 Android Studio

  1. 下载 Android Studio
  2. 安装 Android Studio
    • Windows
      1. 双击 .exe 文件,按向导完成安装(建议勾选 Android Virtual Device 选项)。
      2. 安装完成后启动 Android Studio,首次运行会提示安装 SDK 组件。
    • macOS
      1. 拖拽 .dmg 中的 Android Studio 到 Applications 文件夹。
      2. 启动应用,接受协议并安装默认 SDK 组件。
    • Linux
      1. 解压 .tar.gz 文件到目标目录(如 /opt/android-studio)。
      2. 进入 bin 目录,运行 ./studio.sh,按提示完成 SDK 安装。
  3. 配置 SDK 和工具
    • 首次启动时,Android Studio 会引导安装:
      • Android SDK :确保至少选择一个 API 级别(推荐 API 34 (Android 14))。
      • Android Emulator:用于运行虚拟设备。
      • Kotlin 插件:默认已集成,无需额外安装。

二、配置环境变量

  • 安装 JDK(Java Development Kit)

    首先,确保你已经安装了 JDK(Java开发工具包)。Android Studio 和其他工具需要它来编译和运行Android应用。

    步骤:

    1. 下载并安装 JDK(推荐使用 JDK 8 或更新版本)。你可以从 Oracle JDK 官网 或 OpenJDK 下载。
    2. 安装后,设置 JAVA_HOME 环境变量,指向你的 JDK 安装目录。
  • 设置 JAVA_HOME 环境变量

    JAVA_HOME 是一个重要的环境变量,Android Studio 和一些构建工具(如 Gradle)会使用它来找到你的 JDK。

    Windows

    1. 打开 控制面板 > 系统 > 高级系统设置 > 环境变量
    2. 在 "系统变量" 区域,点击 新建
    3. 输入变量名为 JAVA_HOME,变量值为 JDK 的安装路径(例如 C:\Program Files\Java\jdk-11)。
    4. 点击 确定 保存。
  • 安装 Android SDK 和设置 ANDROID_HOME 环境变量

Android SDK 是开发Android应用所必需的,它包含了编译、构建和模拟等工具。

步骤:

  1. 安装 Android Studio
    • 下载并安装 Android Studio,它会自动安装和配置 Android SDK。
  2. 设置 ANDROID_HOME 环境变量 : Android SDK 的路径是另一个重要的环境变量。你需要设置 ANDROID_HOME 来告诉 Android Studio 和构建工具(如 Gradle)SDK 的位置。

Windows

  1. 打开 控制面板 > 系统 > 高级系统设置 > 环境变量

  2. 在 "系统变量" 区域,点击 新建

  3. 输入变量名为 ANDROID_HOME,变量值为 Android SDK 的路径(通常是 C:\Users\<YourUsername>\AppData\Local\Android\Sdk)。

  4. 找到 Path 变量,点击 编辑,在最后添加以下内容:

    shell 复制代码
    %ANDROID_HOME%\tools
    %ANDROID_HOME%\platform-tools
  5. 点击 确定 保存。

  • 配置 Gradle 环境(可选)

    Gradle 是 Android Studio 使用的构建工具,它也可以通过设置环境变量来进行配置。

    Windows

    1. 下载并解压 Gradle。

    2. 打开 控制面板 > 系统 > 高级系统设置 > 环境变量

    3. 在 "系统变量" 区域,点击 新建

    4. 输入变量名为 GRADLE_HOME,变量值为 Gradle 的解压路径(例如 C:\Gradle)。

    5. 找到 Path 变量,点击 编辑,在最后添加以下内容:

      shell 复制代码
      %GRADLE_HOME%\bin

以上步骤帮助你配置了在 Android 开发中所需要的环境变量,包括 JDK、Android SDK 和 Gradle 等。确保每个环境变量都正确配置,以便能够顺利进行 Android 应用的开发和构建。

三、创建并运行第一个Hello World项目

  1. 新建项目

    • 启动 Android Studio 点击 New Project
  • 选择模版(推荐使用 Empty Activity)最简模版
  • 配置项目:
markdown 复制代码
 - Name:输入项目名
 - Package name:包名,默认生成(如 `com.example.helloworld`)
 - Save location:项目保存地址
 - Minimum SDK:选择Android应用支持的最低操作系统版本,这里选择 API 21(Android 5.0)或更高
 - Build Configuration Language:构建配置语言,用于定义项目构建规则的语言,在Android中主要指 `Gradle` 构建脚本的语法,这里选择 `Kotlin DSL`
  • 点击 Finish,等待 Gradle 构建完成
  1. 运行项目

    • 使用模拟器

      1. 创建虚拟设备(AVD):

        • 点击工具栏 Device ManagerCreate Device
        • 选择设备型号(如 Pixel 6 ),下载推荐的系统镜像(如 Android 14)。
      2. 启动模拟器:

        • 在 Device Manager 中选择设备,点击 启动按钮(绿色三角)。
      3. 运行应用:

        • 点击工具栏 Run 按钮(绿色三角)或按 Shift+F10
markdown 复制代码
    - 选择已启动的模拟器,等待应用安装并自动启动。
  • 使用真机调试

    1. 开启开发者选项:
      • 进入手机 设置 → 关于手机 → 版本号,连续点击 7 次开启开发者模式。
    2. 启用 USB 调试:
      • 返回设置,进入 系统 → 开发者选项 → USB 调试,启用开关。
    3. 连接电脑并运行:
      • 用 USB 线连接手机,选择 允许调试

      • 在 Android Studio 中选择设备,点击 Run

    结果如下

四、了解项目结构

要想了解Android项目结构,首先我们得先

切换至项目预览模式,这方便我们观察和认识项目结构,展开关键如下所示

接下来我们将逐步分析Android项目结构中核心目录与文件详解

  • AndroidManifest.xml

    • 功能:存放 Android 应用的全局配置文件
      • 定义应用的基本信息(包名、图标、权限等)
      • 声明所有组件(Activity(活动)Service(服务)BroadcastReceiver(广播)ContentProvider(内容提供者))在之后我们会详细讲解这四大组件
    xml 复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <application
            android:allowBackup="true"
            android:dataExtractionRules="@xml/data_extraction_rules"
            android:fullBackupContent="@xml/backup_rules"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/Theme.HelloWorld"
            tools:targetApi="31">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    • <?xml version="1.0" encoding="utf-8"?> 声明文件的编码为 UTF-8 通常 Android 项目会使用UTF-8编码。

    • <manifest> 是整个 Android 应用清单的根元素,所有其他元素都应该包含在此标签内。

      xmlns:android="http://schemas.android.com/apk/res/android":这是 android 命名空间的声明,它定义了 XML 中属性的前缀 android,告诉 Android 系统该文件中包含的所有属性都与 Android 应用相关。

      xmlns:tools="http://schemas.android.com/tools":这是 Android 开发工具的命名空间,主要用于在开发阶段向系统提供额外的信息,例如为 Android Studio 提供的工具标记。

    • <application> 是 Android 应用的主要配置元素,它描述了应用的基本信息,如图标、主题、支持的语言方向等

      • android:allowBackup="true":指示应用是否允许备份。true 表示允许,false 表示不允许。这有助于确保用户数据的备份和恢复。
      • android:dataExtractionRules="@xml/data_extraction_rules":定义应用数据提取规则(针对 Android 13 或更高版本)。这是一个 XML 文件,指定哪些数据可以被提取和备份。
      • android:fullBackupContent="@xml/backup_rules":指定应用的完整备份规则。与 dataExtractionRules 配合使用,可以控制哪些数据需要进行全备份。
      • android:icon="@mipmap/ic_launcher":指定应用的图标。这里引用了 @mipmap/ic_launcher,它通常是 res/mipmap/ 目录下的图标资源文件。
      • android:label="@string/app_name":应用程序的名称,它会显示在用户的设备上。@string/app_name 引用了 res/values/strings.xml 中定义的字符串。
      • android:roundIcon="@mipmap/ic_launcher_round":指定圆形图标。Android 会自动使用这个图标来显示圆形的应用图标,特别是在支持圆形图标的设备上(如一些 Android Wear 设备)。
      • android:supportsRtl="true":支持从右向左的布局,适用于阿拉伯语、希伯来语等右到左书写的语言。
      • android:theme="@style/Theme.HelloWorld":指定应用的主题。@style/Theme.HelloWorld 引用了 res/values/styles.xml 中定义的样式资源。
      • tools:targetApi="31":该属性是用于 Android Studio 的工具命名空间,指示目标 API 级别,通常是 Android Studio 在开发过程中进行 Lint 检查时使用。
    • <activity>元素定义了一个应用中的 Activity。每个应用至少需要一个 Activity,作为应用的入口或界面。

      • android:name=".MainActivity":指定该 Activity 的类名。.MainActivity 表示 MainActivity 类位于包的根目录下(例如 com.example.app.MainActivity)。
      • android:exported="true":表示这个 Activity 是否可以被其他应用启动。在 Android 12(API 级别 31)及更高版本中,如果应用中包含了显式声明 intent-filter 的组件(如 Activity),则需要明确设置 android:exported 属性。true 表示可以由其他应用启动,false 表示不能被外部应用启动。
    • <intent-filter> 定义了一个或多个 Intent,指定哪些外部操作可以启动这个组件(在此为 MainActivity)。

      • <action android:name="android.intent.action.MAIN" />:指示这是应用的主入口(即主 Activity)。它告诉系统这是一个主要的入口活动。
      • <category android:name="android.intent.category.LAUNCHER" />:告诉系统这个 Activity 是应用的启动 Activity。当用户点击应用图标时,会启动这个 Activity。

    通过理解 AndroidManifest.xml 文件的结构和内容,你可以更好地配置和管理 Android 应用的各个方面,其他配置在之后开发中用上了会对应的提一嘴,例如权限、服务、广播、内容提供者这些等等等等.

  • java/kotlin/ : 存放 Java / Kotlin 源代码文件

  • res/ 资源目录:存放所有非代码资源文件,Android 会自动生成 R.java 提供资源 ID。

    子目录 用途 示例文件
    drawable/ 图片、矢量图、形状定义等 ic_launcher_background.xml
    layout/ 界面布局文件(XML) activity_main.xml
    mipmap/ 应用图标(不同分辨率) ic_launcher.png
    values/ 字符串、颜色、样式等常量定义 strings.xml, colors.xml
    menu/ 菜单布局文件 main_menu.xml
    raw/ 原始文件(音频、视频等) sound.mp3
    anim/ 动画资源 fade_in.xml
    font/ 字体文件 roboto.ttf
  • Gradle Scripts/ : 定义项目的构建配置和依赖管理:

    文件 作用
    build.gradle.kts (Project) 配置全局项目设置(如 Gradle 版本、仓库地址)。
    build.gradle.kts (Module) 配置模块级设置(编译版本、依赖库等)。
    settings.gradle.kts 定义项目包含哪些模块。
    gradle.properties 配置全局 Gradle 属性(如 JVM 内存大小)。
    • 项目级 build.gradle.kts

      • 路径项目根目录/build.gradle.kts

      • 作用:配置全局构建设置和插件依赖。

      • 典型内容

        kotlin 复制代码
        // 顶级构建文件,在这里你可以添加对所有子项目/模块共享的配置选项。
        plugins {
            // 引用 Android 应用程序插件,这个插件通常用于配置和构建 Android 应用。使用了 `libs.plugins` 别名来引用插件,
            // 但 `apply false` 表示插件本身不会立即应用到当前模块,而是提供给子模块使用。
            alias(libs.plugins.android.application) apply false
        
            // 引用 Kotlin Android 插件,这个插件用于配置和构建包含 Kotlin 代码的 Android 应用。
            // 同样使用 `apply false` 表示该插件不会直接应用在当前模块,而是提供给子模块使用。
            alias(libs.plugins.kotlin.android) apply false
        }
    • 模块级 build.gradle.kts

      • 路径app/build.gradle.kts

      • 作用:配置模块级构建选项、依赖项。

      • 典型内容

        kotlin 复制代码
        // 配置插件,声明本模块将使用 Android 应用插件和 Kotlin 插件。
        plugins {
            // 引用 Android 应用插件,它是构建 Android 应用所必需的。
            alias(libs.plugins.android.application)
            
            // 引用 Kotlin Android 插件,用于支持 Kotlin 代码的编译。
            alias(libs.plugins.kotlin.android)
        }
        
        android {
            // 设置应用的命名空间。通常用于避免不同模块之间的命名冲突。
            namespace = "com.example.helloworld"
            
            // 设置编译 SDK 版本。这里设置为 Android API 级别 35(实际开发中应该使用最新的稳定版)。
            compileSdk = 35
        
            // 配置应用的默认设置。
            defaultConfig {
                // 设置应用的包名,通常与应用的 Java 包名相同。
                applicationId = "com.example.helloworld"
                
                // 设置最低支持的 SDK 版本。这里设置为 21,表示应用支持从 Android 5.0(Lollipop)开始的设备。
                minSdk = 21
                
                // 设置目标 SDK 版本,表示应用测试和优化的目标设备版本。这里设置为 35,表示适配 Android 12。
                targetSdk = 35
                
                // 设置版本号。版本号必须递增,每次发布新版本时要更改此值。
                versionCode = 1
                
                // 设置应用的版本名称。这个值通常会显示在应用的设置页面或安装界面。
                versionName = "1.0"
        
                // 设置测试用的 JUnit 测试运行器。
                testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
            }
        
            // 配置构建类型。这里只配置了 release 类型,表示发布版本的构建设置。
            buildTypes {
                release {
                    // 禁用代码混淆,设置为 false 不会启用 ProGuard 或 R8 混淆工具。
                    isMinifyEnabled = false
                    
                    // 配置 ProGuard 文件。ProGuard 是一个代码优化工具,通常用于发布版本进行混淆和优化。
                    proguardFiles(
                        getDefaultProguardFile("proguard-android-optimize.txt"), // 使用默认的 ProGuard 配置
                        "proguard-rules.pro" // 项目自定义的 ProGuard 配置文件
                    )
                }
            }
        
            // 配置 Java 编译选项。
            compileOptions {
                // 设置 Java 版本兼容性,这里设置为 Java 11。
                sourceCompatibility = JavaVersion.VERSION_11
                targetCompatibility = JavaVersion.VERSION_11
            }
        
            // 配置 Kotlin 编译选项。
            kotlinOptions {
                // 设置 Kotlin 的 JVM 目标版本,这里设置为 Java 11。
                jvmTarget = "11"
            }
        }
        
        // 配置项目的依赖项。
        dependencies {
        
            // AndroidX 相关的库。这里包括核心扩展库、AppCompat、Material Design 组件、Activity 相关库等。
            implementation(libs.androidx.core.ktx) // 提供对 Android 核心库的 Kotlin 扩展支持
            implementation(libs.androidx.appcompat) // 支持应用在不同 Android 版本下的兼容性
            implementation(libs.material) // 提供 Material Design 组件库
            implementation(libs.androidx.activity) // 提供与 Activity 生命周期相关的库
            implementation(libs.androidx.constraintlayout) // 提供用于布局的 ConstraintLayout 库
        
            // 单元测试依赖。使用 JUnit 进行本地单元测试。
            testImplementation(libs.junit) // JUnit 用于执行本地单元测试
        
            // Android 测试依赖。使用 AndroidX 提供的 JUnit 和 Espresso 进行 UI 测试。
            androidTestImplementation(libs.androidx.junit) // AndroidX JUnit 测试框架
            androidTestImplementation(libs.androidx.espresso.core) // Espresso 用于 UI 测试
        }
    • settings.gradle.kts

    • 路径项目根目录/settings.gradle.kts

    • 作用:定义项目包含哪些模块及仓库地址。

    • 典型内容

      kotlin 复制代码
      // 配置插件管理(pluginManagement),决定了如何查找和解析插件。
      pluginManagement {
          repositories {
              // 配置 Google 的插件仓库,限制只包含特定的插件(通过正则匹配)。
              google {
                  content {
                      // 只包含 com.android.* 相关的插件
                      includeGroupByRegex("com\\.android.*")
                      // 只包含 com.google.* 相关的插件
                      includeGroupByRegex("com\\.google.*")
                      // 只包含 androidx.* 相关的插件
                      includeGroupByRegex("androidx.*")
                  }
              }
      
              // 配置 Maven 中央仓库,查找和解析插件。
              mavenCentral()
      
              // 配置 Gradle 插件门户,查找和解析插件。
              gradlePluginPortal()
          }
      }
      
      // 配置依赖解析管理(dependencyResolutionManagement),用来管理项目的依赖解析策略。
      dependencyResolutionManagement {
          // 设置仓库模式,当在子项目中查找依赖时,如果子项目定义了自己的仓库,将会报错。
          repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
      
          // 配置全局的仓库,所有的项目都将从这些仓库中查找依赖。
          repositories {
              // 使用 Google 的仓库(用于 Android 构建相关的依赖)。
              google()
      
              // 使用 Maven 中央仓库,查找和解析其他常见的 Java 依赖。
              mavenCentral()
          }
      }
      
      // 设置根项目的名称。
      rootProject.name = "HelloWorld"
      
      // 包含项目的模块,这里表示项目的主模块是 ":app"。
      include(":app")
    • gradle.properties

      • 路径项目根目录/gradle.properties

      • 作用:配置全局 Gradle 属性(语法与 Groovy 相同)。

      • 常用配置

        properties 复制代码
        # 这个设置对于调整内存设置特别有用。
        org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
        # -Xmx2048m:设置最大堆内存为 2048MB。根据需要,你可以增大或减少这个值来优化内存使用。
        # -Dfile.encoding=UTF-8:确保文件编码为 UTF-8。
        
        # AndroidX 包结构,使其更清楚哪些包是由 Android 操作系统捆绑的,哪些是打包在应用的 APK 中。
        # https://developer.android.com/topic/libraries/support-library/androidx-rn
        android.useAndroidX=true
        # 设置为 true 时,项目将使用 AndroidX 支持库而非旧版支持库。
        # 这对于支持库迁移至 AndroidX 非常重要,确保项目采用最新的 Android 开发标准。
        
        # Kotlin 代码风格设置:可以设置为 "official" 或 "obsolete"。
        kotlin.code.style=official
        # 设置 Kotlin 代码风格为官方风格。"official" 是标准的 Kotlin 代码风格,"obsolete" 是旧版风格。
        
        # 启用库的 R 类命名空间,以便它的 R 类只包含该库自身声明的资源,而不包含库的依赖项的资源,
        # 从而减少该库的 R 类大小。
        android.nonTransitiveRClass=true
        # 设置为 true 时,Android 会为每个库启用命名空间,从而减少 R 类的大小,
        # 使其仅包含该库内的资源,而不包含其他依赖库的资源。

    在日后开发中,我们都离不开对 Gradle Scripts 的管理,至少我们要了解到这些基础的知识,至于其他在之后出现了相关再提及并研究。

五、创建新的界面

Android一个App有很多界面,这不是一个Activity能完成的,接下来我们将创建一个新的界面,步骤如下

创建完成之后我们可以在Android 应用的全局配置文件 AndroidManifest.xml 中发现,AndroidStudio 会自动帮我们注册 Activity

这样我们就可以创建新的界面了,这里先不讲页面之间如何跳转,在之后文章中我们在详细说明。想要运行新界面,我们可以进行如下操作:

将想要运行的界面设置为 android:exported="true" 表示这个 Activity 可以被其他应用启动,包括本地编译器, 然后我们将之前 MainActivity<intent-filter> 范围的代码给剪切到想要运行的界面下,这样我们就可以运行制定的界面了。

在下一章节我们将会对Android中的一些常见的UI组件件进行详细的学习和运用。

相关推荐
Kapaseker32 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴1 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android