学习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组件件进行详细的学习和运用。

相关推荐
Jomurphys22 分钟前
Android Studio - 解决 Please Select Android SDK
android·android studio
stevenzqzq1 小时前
kotlin扩展函数
android·开发语言·kotlin
V少年1 小时前
深入浅出Java内存模型(JMM)
android
行墨1 小时前
插件资源隔离冲突‌解决方案
android
Hello姜先森1 小时前
Kotlin日常使用函数记录
android·开发语言·kotlin
zhangphil1 小时前
Android Coil 3 Fetcher大批量Bitmap拼接成1张扁平宽图,Kotlin
android·kotlin
IT技术图谱2 小时前
【绝非标题党】Android15适配,太恶心了
android·面试
harry235day2 小时前
Compose 自定义转盘
kotlin·android jetpack
古鸽100862 小时前
Vehicle HAL 介绍
android
和煦的春风2 小时前
Linux | 关于CPU 调频的一些QA
android·linux