安卓开发从0到1~基础讲解
文章目录
1.为什么开始学习android开发
我本是一名java后端开发人员,因为换了一份工作,找到了一份android开发工程师的工作,并且自己也想在移动端有所建树,时间原因,不说废话,直接干货从0走起。
2. android发展历程
-
2003年:Android Inc. 成立,由安迪·鲁宾、里奇·马兰尼等人创建。他们着手开发一种基于Linux内核的移动设备操作系统。
-
2005年:Google 收购了 Android Inc.,并将其作为未来移动设备操作系统的基础。
-
2007年:首款搭载 Android 操作系统的智能手机 HTC Dream(也称为 T-Mobile G1)发布,标志着 Android 手机的诞生。
-
2008年:Google 发布了首个 Android 版本——Android 1.0。这个版本包含了许多现在被视为经典的功能和设计元素。
-
2009年:随着 Android 2.0 的发布,Google 推出了名为 Nexus One 的旗舰级 Android 手机。
-
2010年:Android 应用程序商店 Google Play(当时称为 Android Market)开始运营,为开发者提供了一个广泛分发和销售他们应用程序的平台。
-
2011年:随着 Android 4.0(冰淇淋三明治)的发布,Google 引入了全新的用户界面设计语言——Material Design,并改进了操作系统的稳定性和性能。
-
2014年:随着 Android 5.0(棒棒糖)的发布,Google 推出了 Android 开发者预览计划,使开发者能够在新发布之前提前体验和测试最新版本。
-
2016年:Android Studio 成为官方的集成开发环境(IDE),取代了 Eclipse,并为开发者提供更强大、高效的开发工具。
-
2017年:随着 Android 8.0(奥利奥)的发布,Google 引入了 Project Treble,旨在简化 Android 设备制造商对操作系统升级的过程,加快设备广泛采用新版本的速度。
3. android的工程目录结构
1. app/:该目录下包含应用程序的源代码和资源文件。
- src/:Java 或 Kotlin 源代码文件所在的目录。
- res/:包含应用程序使用到的各种资源文件,如布局文件、图像、字符串等。
- manifests/:AndroidManifest.xml 文件所在的目录,其中声明了应用程序的配置信息、权限等。
- assets/:可选目录,可以存放应用程序需要用到的一些原始数据文件。
2. gradle/:包含 Gradle 构建脚本文件。
- build.gradle:项目级别的配置文件,用于指定项目的依赖和构建配置。
- settings.gradle:设置项目模块的信息。
3. Gradle Wrapper/:包含 Gradle Wrapper 的相关文件,用于自动下载并使用指定版本的 Gradle。
- gradlew:UNIX 系统下的 Gradle Wrapper 脚本。
- gradlew.bat:Windows 系统下的 Gradle Wrapper 脚本。
- gradle/wrapper/gradle-wrapper.jar:Gradle Wrapper 的 JAR 文件。
- gradle/wrapper/gradle-wrapper.properties:Gradle Wrapper 配置文件,指定下载的 Gradle 版本。
4. build/:构建过程中生成的输出文件和临时文件。
- generated/:包含在编译期间生成的代码和资源。
- outputs/:包含构建结果的文件,如 APK 文件、AAR 文件等。
5. libs/:用于存放第三方库(JAR 文件)的目录。
6. tests/:包含单元测试和仪器化测试的相关代码。
-
此外,根目录下还有一些其他的文件,如:
-
build.gradle:项目的根级别 Gradle 构建脚本文件。
gradlew:UNIX 系统下的用于执行 Gradle 命令的脚本。
settings.gradle:指定项目模块的信息。
4.其他一些概念
1.什么是gradle
Gradle 是一种构建工具,用于自动化构建、测试和部署软件项目。它是一个开源的构建工具,旨在提供一种灵活、效率高且易于使用的方式来构建各种类型的项目。
Gradle 使用 Groovy 或 Kotlin 作为构建脚本的DSL(领域特定语言),允许开发者通过编写脚本来定义项目的构建过程,包括依赖管理、编译、打包等操作步骤。
相比于传统的构建工具如 Ant 或 Maven,Gradle 提供了更强大和灵活的功能。它支持基于约定的配置,同时也支持自定义任务和插件,可以方便地集成第三方库和工具,以满足不同项目的需求。
Gradle 具有以下特点和优势:
- 声明式构建:通过声明依赖关系、任务和插件,使构建过程更清晰、可维护。
- 灵活性:可以根据项目的需要自定义构建过程,适应各种复杂的构建场景。
- 高性能:采用增量构建和缓存策略,只重新构建必要的部分,提高构建速度。
- 多语言支持:支持多种编程语言和技术栈,如 Java、Kotlin、Android、C/C++等。
- 插件生态系统:丰富的插件仓库和社区支持,提供了大量可重用的构建任务和功能扩展。
Gradle 在 Android 开发中得到广泛应用,作为 Android Studio 的默认构建系统,它能够帮助开发者管理依赖、编译代码、生成 APK 文件等。此外,Gradle 还可以用于其他类型的项目,如 Java 应用程序、Web 应用程序等。
2.对项目中的两个build.gradle的解释
在 Android 项目中,存在两个 build.gradle 文件,分别位于项目级别和模块级别。
1. 项目级别的 build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '8.0.2' apply false
id 'com.android.library' version '8.0.2' apply false
}
在 Android 项目的根目录下,有一个名为 build.gradle 的文件。这个文件定义了整个项目的全局配置,包括构建脚本的版本、项目的仓库依赖等。主要包含以下内容:
-
buildscript:用于配置构建脚本的相关信息,如依赖项和插件。
-
repositories:指定构建所需的仓库地址,从中下载依赖库。
-
dependencies:定义构建脚本自身所需要的依赖项。
通过修改项目级别的 build.gradle 文件,可以添加或修改构建工具的版本、引入全局依赖项等。
2. 模块级别的 build.gradle:
plugins {
id 'com.android.application'
}
android {
namespace 'com.example.myapplication'
compileSdk 33
defaultConfig {
applicationId "com.example.myapplication"
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled 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.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
在 Android 项目中的每个模块(如 app 模块)都有一个对应的 build.gradle 文件。该文件位于模块目录下,通常是 app/build.gradle。这个文件指定了特定模块的构建配置,包括编译选项、依赖项、签名配置等。主要包含以下内容:
-
android:指定与 Android 相关的构建选项,如编译版本、最小 SDK 版本、目标 SDK 版本等。
-
dependencies:定义模块所依赖的其他模块或第三方库。
-
buildTypes:定义不同编译类型的配置,如 Debug、Release 等。
-
signingConfigs:指定应用程序签名配置的信息。
通过修改模块级别的 build.gradle 文件,可以针对特定模块进行不同的构建配置,添加所需的依赖项和自定义编译选项。
这两个 build.gradle 文件是 Android 项目中重要的构建配置文件,用于控制整个项目的构建过程,包括各种编译选项、依赖管理等。
3. Android的SDK对应版本号
4.对清单文件AndroidManifest.xml的解析
AndroidManifest.xml是Android应用程序的清单文件,它承载了应用程序的基本信息、设置和配置。
<?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.MyApplication"
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>
1.包名(Package Name):
AndroidManifest.xml文件的第一行指定了应用程序的包名,它必须是全局唯一的标识符,用于区分不同的应用程序。
2.应用程序图标(Application Icon):
通过在application标签内部设置android:icon属性,可以指定应用程序在应用列表和桌面上显示的图标。
3.应用程序名称(Application Name):
通过在application标签内部设置android:label属性,可以指定应用程序的名称,在应用列表和标题栏显示。
4.权限声明(Permissions Declaration):
通过在manifest标签内部声明uses-permission子标签,可以列出应用程序所需的各种权限,如访问网络、读写存储等。
5.应用程序组件(Application Components):
-通过在application标签内部声明activity、service、receiver和provider子标签,可以定义应用程序的四个核心组件。
-Activity:表示用户界面的独立屏幕,通过声明activity标签来定义。
-Service:后台运行的组件,通过声明service标签来定义。
-BroadcastReceiver:接收系统广播或自定义广播的组件,通过声明receiver标签来定义。
-Content Provider:提供数据给其他应用程序访问的组件,通过声明provider标签来定义。
6.应用程序启动器(Launcher):
通过在activity标签内部设置intent-filter和category属性,可以指定应用程序的启动界面(入口点),即点击应用图标后打开的第一个界面。
7.其他配置项:
AndroidManifest.xml还可以包含其他各种配置项,如版本号、最低SDK版本要求、屏幕方向、多语言支持等。
5.Android中的log日志
在Android中,日志系统提供了不同的日志等级(Log Level)来区分和指示日志的重要程度和详细程度。常见的五个日志等级(从低到高)如下:
-
VERBOSE:
最低的日志等级,用于输出详细的调试信息。通常在调试阶段使用,用于记录程序执行过程中的详细信息。
-
DEBUG:
调试日志等级,用于输出调试信息,辅助应用程序的开发和调试工作。一般情况下,DEBUG级别的日志信息在发布应用程序时会被禁用或移除掉。
-
INFO:
信息日志等级,用于输出一般的信息性消息。这些消息可以用来追踪应用程序的运行状态,但不是那么具体或详细。
-
WARN:
警告日志等级,表示潜在的异常情况,可能会导致应用程序出现问题。这些警告信息表明应用程序在某些方面存在潜在的风险或错误,但并不会导致应用程序崩溃。
-
ERROR:
最高的日志等级,用于输出错误消息。当应用程序遇到严重的错误或异常情况时,会使用ERROR级别记录相应的错误信息,这些错误可能导致应用程序终止或无法正常运行。
开发者可以使用不同日志等级的打印方法(如Log.v()、Log.d()、Log.i()、Log.w()、Log.e()),根据实际需求和场景输出相应等级的日志信息。在正式发布应用程序时,应该避免过多地输出低级别的日志,以提高应用性能和减少不必要的日志信息。
6.什么是Activity?
在Android中,Activity(活动)是一种表示用户界面的组件,它通常代表应用程序中的一个屏幕或一个交互页面。每个Activity都提供了与用户交互的界面,并且可以包含用户输入、数据展示、响应事件等功能。
Activity在Android应用程序中扮演着重要角色,它负责处理以下任务:
-
用户界面:
Activity定义了应用程序的用户界面,通过在屏幕上显示视图元素(如按钮、文本框、图像等)来与用户进行交互。每个Activity都会占据整个屏幕或位于其他Activity之上的一个窗口。
-
生命周期管理:
Android系统按照一定的生命周期管理Activity的创建、启动、暂停、恢复、停止和销毁等过程。开发者可以根据需要重写不同生命周期方法(如onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()等),在这些方法中执行相关操作。
-
界面导航:
由于应用程序通常由多个Activity组成,Activity之间可以相互切换和导航。例如,从一个Activity启动另一个Activity,从而实现应用程序内部的页面跳转和交互。
-
数据传递和返回:
Activity之间可以通过Intent对象传递数据,一个Activity可以启动另一个Activity并且传递参数。同时,当从一个Activity返回到前一个Activity时,可以携带返回的数据。
-
生命周期状态保存与恢复:
在某些情况下(如设备旋转、内存紧张),Activity可能会被销毁并重新创建。通过合理保存和恢复Activity的状态,可以避免数据丢失和用户体验不连续的问题。
总之,Activity是Android应用程序的核心组件之一,用于展示用户界面、处理用户交互以及管理生命周期等功能。通过合理设计和使用Activity,可以构建出丰富、灵活的 Android 应用程序。
通过Intent对象传递数据,一个Activity可以启动另一个Activity并且传递参数。同时,当从一个Activity返回到前一个Activity时,可以携带返回的数据。