🤵♂️ 个人主页:@若峰–的个人主页
✍🏻作者简介:后端程序猿
😄 希望大家多多支持,如果文章对你有帮助的话,欢迎 💬👍🏻📂
目录
Android操作系统(OS)是最受欢迎的移动设备平台之一,在全球拥有众多用户。该操作系统用于汽车和智能手表、电视、手机等可穿戴设备,这使得Android开发者的市场非常广阔。
因此,新开发人员需要学习如何利用新的现代Android开发(MAD)技能构建Android应用程序。
自2008年发布以来,Android已经走过了漫长的道路,并在第一个集成开发环境(IDES)、Eclipse和NetBeans中使用。
今天,Android Studio是Android开发的推荐IDE,与以前Java是首选语言不同的是,Kotlin现在是首选语言。
Android Studio包括对Kotlin、Java、c++和其他编程语言的支持,使得这个IDE适合不同技能的开发人员。
因此,在本章结束时,按照指南,你将安装Android Studio,使用Jetpack Compose构建你的第一个Android应用程序,并学习一些Kotlin语法,利用Android开发的首选语言。
此外,本介绍将为您了解对MAD至关重要的高级材料做好基础准备。
在本章中,我们将介绍以下内容:
成功运行Android IDE和模拟器可能会让您的计算机望而生畏。
你可能听过一个笑话,说运行Android Studio的机器在冬天可以用作加热器。
好吧,这是有一定道理的,所以你的计算机应该有以下规格,以确保你的系统可以应付IDE的要求:
Kotlin是Android开发的推荐语言;您仍然可以选择Java作为语言,因为许多遗留应用程序仍然严重依赖Java。
然而,在本专栏中,我们将使用Kotlin,如果这是你第一次使用Kotlin语言构建Android应用程序,Kotlin组织有很好的资源来帮助你开始免费练习和自定进度的评估,称为Kotlin Koans (https://play.kotlinlang.org/koans/overview).
此外,您可以使用Kotlin语言进行多平台开发,使用Kotlin multiat form Mobile (KMM),在其中您可以在iOS和Android应用程序之间共享标准代码,并仅在必要时编写特定于平台的代码。
KMM目前处于Alpha阶段。
在这个指南中,您可以使用在线Kotlin playground (https://play.kotlinlang.org/)来运行代码,也可以在Android Studio IDE中运行代码。
或者,如果你打算用Koans做更多的Kotlin练习题,你可以下载并使用IntelliJ IDEA IDE。
在这个指南中,我们将探索和修改一个简单的程序,我们将在Kotlin中编写;你可以把程序想象成我们给计算机或移动设备的指令,让它们执行我们给它们的动作。
例如,我们将在程序中创建一个问候语,然后编写另一个程序。
对于这个指南,你可以选择Android Studio或免费的在线IDE,因为我们将接触到一些Kotlin功能:
fun main() {
println("Hello, Android Community")
}
// Hello, Android Community
让我们看另一个例子;面试中常用的一个算法问题–反转字符串。例如,您有一个字符串Community,我们希望反转该字符串,以便输出为ytinummoC。有几种方法可以解决这个问题,但是我们将使用Kotlin惯用的方法来解决它。
在IDE的playground或Kotlin playground中输入以下代码:
fun main() {
val stringToBeReversed = "Community"
println(reverseString(stringToBeReversed))
}
fun reverseString(stringToReverse: String): String {
return stringToReverse.reversed()
}
// ytinummoC
有必要在Kotlin中提到,通过利用默认参数值并只设置需要更改的参数,有一些独特的方法可以保持代码更干净、更精确和更简单。
fun在Kotlin编程语言中代表函数,而Kotlin中的函数是执行特定任务的程序的一部分。
第一个示例中的函数名称是main(),而在main()函数中,我们没有任何输入。
一般来说,函数都有名称,以便在代码库比较复杂时能够区分它们。
此外,在Java中,函数类似于方法。
函数名有两个括号和大括号,还有println,它告诉系统打印一行文本。
如果您使用过Java,您可能会注意到Kotlin编程语言与Java非常相似。
然而,开发人员现在谈论Kotlin语言对开发人员来说有多棒,因为它提供了更具表现力的语法和复杂的类型系统,并处理了Java多年来一直存在的空指针问题。
为了充分利用Kotlin语言的强大功能并编写更简洁的代码,了解Kotlin习惯用法可能是有益的。
Kotlin习语是经常使用的集合,有助于操作数据,使Android开发人员的体验更加轻松。
在第二个示例中,我们有两个函数main()和reverseString()。
main()不接受任何输入,但reverseString()接受String输入。
您还会注意到我们使用了val,这是Kotlin使用的一个唯一的词,它指的是一个只能设置为一个值的不可变值,而var是一个可变变量,这意味着它可以被替换。
我们创建一个val stringToBeReversed,它是一个字符串,并将其命名为“Community”,然后在main()函数中调用println,并在reverseString()函数中传递我们想要打印的文本。
此外,在本例中,reverseString函数从string对象中接受一个string参数,然后返回一个字符串类型。
还有更多的东西要学习,并且公平地承认,我们在这个指南中所涵盖的只是您可以使用Kotlin习语的一小部分。
这个指南的目的是介绍一些概念,我们可能会在后面的章节中接触或使用,但不是深入的,因为我们将在后面的章节中探索更多的Kotlin。
因此,了解Kotlin习语是什么以及为什么它们现在很重要是很有必要的。
更好地理解Kotlin语法和流行的用例对您的日常工作至关重要,因此请查看以下资源:
现在我们已经安装了Android Studio,我们将创建第一个Android应用程序。
此外,我们将使用Compose–只是提前提一下,在这个指南中,我们不会深入讨论Compose,因为我们有专门的章节来讨论Compose,即第二章,使用声明式UI创建屏幕和探索Compose原理。
在开始之前,了解你的Android项目的一致性是很有帮助的。
默认情况下,AndroidStudio会在你的主目录下创建一个包,包名为AndroidStudioProjects;在这里,您将找到您创建的所有项目。
如果要更改文件夹,还可以决定文件夹的位置。
此外,确保你使用的是最新版本的Android Studio,以利用所有伟大的功能。
要了解最新的Android版本,您可以使用以下链接: https://developer.android.com/studio/releases 。
在Android Studio IDE中,项目模板是一个Android应用程序,它拥有创建应用程序所需的所有必要部分,并帮助您开始和设置。
因此,一步一步地,我们将制作我们的第一个Android应用程序并在模拟器上启动它:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
AndroidCommunityTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
此外,你也可以将“Hello, Android Community”传递到默认实现中,这将产生相同的UI。
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
AndroidCommunityTheme {
Greeting("Android")
}
}
使用Jetpack Compose创建视图的主要好处是,它加快了开发时间,因为你使用相同的语言来编写整个代码库(Kotlin),并且更容易测试。
您还可以创建可重用的组件,并根据需要对其进行定制。
因此,要确保出错的几率更低,并且必须使用XML编写视图,因为这很繁琐。
onCreate()函数被认为是Android应用程序的入口点。
此外,我们还使用修饰函数来添加行为和修饰可组合对象。
我们将在下一章中更多地讨论修饰符和表面函数的作用。
Android Studio是一个可靠且成熟的IDE。
因此,自2014年以来,Android Studio一直是开发Android应用程序的首选IDE。
当然,您仍然可以使用其他ide,但Android Studio的优势在于您不需要单独安装Android SDK。
您需要完成前面的配方才能遵循此配方,因为我们将设置模拟器以运行我们刚刚创建的项目。
本章旨在对初学者友好,并在您完成指南的过程中使您顺利地向更高级的Android学习。
让我们按照以下步骤来看看如何设置模拟器并在使用Android Studio recipe创建一个Hello, Android Community App中运行您的项目:
导航到工具|设备管理器。一旦设备管理器准备好了,你有两个选择:
虚拟或物理。虚拟意味着你将使用模拟器,而物理意味着你将启用Android手机来调试Android应用程序。
出于我们的目的,我们将选择Virtual。
单击Create device,将弹出Virtual device Configuration界面。
选择手机。你会注意到Android Studio还有其他类别,如电视、Wear OS、平板电脑和汽车。
让我们现在使用Phone,在未来的章节中,我们将尝试使用Wear OS。单击Next。
测试和确保应用程序显示预期的结果非常重要。
这就是为什么Android Studio使用模拟器来帮助开发人员确保他们的应用程序可以在标准设备上运行。
此外,Android手机还提供了可供开发者使用的开发者选项,这使得Android支持的不同设备数量变得更加容易,也有助于重现模拟器中难以发现的漏洞。
我们必须注意,我们不能在一个指南中涵盖所有的观点;我们有一章专门介绍更多关于Jetpack Compose的知识,所以在我们创建的项目中,我们将尝试为我们的项目创建两个额外的视图。
打开Android Community项目,因为这是我们将在此配方中构建的项目。
让我们从在Compose中实现一个简单的按钮开始:
Column(
modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center),
horizontalAlignment = Alignment.CenterHorizontally
) {
Greeting("Android")
}
现在,创建一个函数并将其命名为SampleButton;在本例中我们将不传递任何信息。
然而,我们将有一个RowScope{},它定义了在本例中适用于我们的按钮的修饰符函数,并且我们将给我们的按钮一个名称:click me。
在Compose中,当您创建一个按钮时,您可以设置它的形状、图标和标高,检查它是否启用,检查它的内容,等等。
你可以通过命令单击button()组件来检查如何自定义按钮:
@Composable
fun SampleButton() {
Button(
onClick = { /*Do nothing*/ },
modifier = Modifier
.fillMaxWidth()
.padding(24.dp),
shape = RoundedCornerShape(20.dp),
border = BorderStroke(2.dp, Color.Blue),
colors = ButtonDefaults.buttonColors(
contentColor = Color.Gray,
containerColor = Color.White
)
) {
Text(
text = stringResource(id = R.string.click_me),
fontSize = 14.sp,
modifier = Modifier.padding(horizontal = 30.dp, vertical = 6.dp)
)
}
}
在我们的SampleButton中,onClick不做任何事情;我们的按钮有一个最大填充宽度的修改器,填充为24个与密度无关的像素(dp),圆角半径为20 dp。
我们还设置了按钮的颜色,并添加了点击我作为文本。
我们将字体大小设置为14个与比例无关的像素(sp),因为这有助于确保文本能够很好地根据屏幕和用户的偏好进行调整。
Column(
modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center),
horizontalAlignment = Alignment.CenterHorizontally
) {
Greeting("Android")
SampleButton()
}
一个可组合的应用包含几个可组合的函数,只是普通的带@Composable注解的函数。
正如Google文档所解释的那样,注释告诉Compose向过程添加特殊支持,以便随着时间的推移更新和维护UI。
Compose还允许您将代码结构成可维护的小块,以便随时调整和重用。
由于很难在一个指南中涵盖所有视图,我们将在第2章中讨论更多视图,探索最佳实践,并测试我们的可组合视图。
gradlew命令是一个健壮的Gradle包装器,有很好的用途。然而,在Android Studio中,您不需要安装它,因为它是一个打包在项目中的脚本。
但是现在,我们不会研究所有的Gradle命令,而是使用最流行的命令来清理、构建、提供信息、调试和扫描我们的项目,以便在运行应用程序时发现任何问题。
你可以在笔记本电脑的终端上运行这些命令,只要你在正确的目录下,或者使用Android Studio提供的终端。
按照以下步骤检查并确认Gradle是否按预期工作:
要构建和清理项目,可以运行/gradlew clean和/gradlew build命令。
如果您的项目有任何错误,构建将失败,您可以调查错误。
此外,在Android中,你总是可以不使用Gradle命令运行你的项目,只使用IDE运行和清理选项。
下面是一些更有用的gradlew命令;例如,当你的构建失败时,你想知道是什么出了问题,使用命令来调查或点击错误消息(参见下图):
Gradle是一个通用的构建工具,在Android开发中非常强大。
此外,您还可以创建和发布自定义插件来封装约定和构建功能。
Gradle的优点包括用于测试执行、编译和在构建系统中发生的任何其他任务的增量构建工作。
如果这是您第一次查看Android项目文件夹,您可能想知道在哪里添加代码以及这些包的含义。
本指南将介绍每个文件夹中包含的内容以及代码的位置。
如果您打开您的项目,您将注意到许多文件夹。你的Android项目的主要文件夹列在这里:
让我们浏览每个文件夹,了解存储的内容、位置和原因:
在下图中,您可以看到Packages下拉框;点击它,就会弹出一个包含项目、包、项目文件等内容的窗口。
您可以选择使用Android徽标,通过project或下拉菜单旁边的project高亮部分查看您的项目。
当应用程序中有许多模块并希望添加特定代码时,Project视图是最佳选择。
请随意点击各个部分,看看它们都有什么。
manifest文件夹是Android应用程序的真实来源;它包含AndroidManifest.xml。
点击文件内部,你会注意到你有一个意图启动器,在你的模拟器上启动Android应用程序。
此外,版本号通常是在Gradle中设置的,然后合并到manifest中,我们在manifest中添加所有需要的权限。
您还会注意到包的名称、元数据、数据提取规则、主题和图标;如果你有一个独特的图标,你可以在这里添加一个。
res文件夹包含XML布局、UI字符串、可绘制图像和Mipmap图标。
另一方面,values文件夹包含许多有用的XML文件,如尺寸、颜色和主题。
继续,点击res文件夹来熟悉那里有什么,因为我们将在下一章中使用它。
在Android Studio中,对于第一次使用的用户来说,不知道文件放在哪里以及什么是必需的可能会让他们不知所措。
因此,有一个循序渐进的指南,在哪里添加测试或代码,并了解Android项目结构是至关重要的。
此外,在复杂的项目中,您可能会发现不同的模块;因此,了解项目结构是有帮助的。
Android Studio中的模块是源文件和构建设置的集合,允许您将项目划分为具有特定目的的不同实体。
调试和日志记录在Android开发中是至关重要的,您可以编写出现在Logcat中的日志消息,以帮助您发现代码中的问题,或者在应该执行的时候验证一段代码。
我们将在这里介绍这个话题,但说我们将在一个指南中涵盖所有内容是不公平的
让我们用一个例子来理解日志。以下日志方法按优先级从高到低排列。
当记录网络错误、成功调用和其他错误时,它们是正确的:
一个好的做法是将每个日志与一个TAG关联起来,以便在Logcat中快速识别错误消息。
"TAG"指的是一个文本标签,可以分配给Android应用程序中的视图或其他UI元素。
在Android中使用标签的主要目的是提供一种将附加信息或元数据与UI元素相关联的方法。
让我们继续在我们的小项目中添加一个日志消息:
Log.d(TAG, "asdf Testing call")
在Logcat部分的搜索框中,输入asdf,看看是否可以找到该消息。
您将注意到日志有一个类名、我们的TAG (MainActivity)和显示的日志消息;如下图中的右箭头所示。
调试是指在类中设置断点,降低模拟器的速度,并尝试在代码中找到问题。
例如,如果您在代码中遇到竞争条件,或者您的代码在某些设备上工作而在其他设备上不起作用,则调试功能非常强大。
此外,为了利用调试,您需要首先将调试器附加到模拟器,然后在Debug模式下运行。
另一方面,日志记录可以帮助您记录在遇到问题时可能对您有帮助的信息。
有时,调试可能很有挑战性,但是在代码中需要的地方放置日志可能非常有帮助。
一个实际的例子是当你从API加载数据时;当出现网络错误时,您可能希望将其记录下来,以便通知您如果网络调用失败会发生什么。
因此,使用断点进行调试可能有助于在评估值时减慢过程,并且由于我们在本章中没有构建很多内容,我们可以在后面的章节中以不同的方法重新讨论这个主题。
Timber是一个日志记录器,带有一个小的、可扩展的API,它在Android的标准Log类之上提供实用程序,许多开发人员使用它进行日志记录。
有关Timber的更多信息,请参见:https://github.com/JakeWharton/timber.
博主Github,Gitee同名账号,Follow 一下就可以一起愉快的玩耍了,更多精彩文章请持续关注。
专栏推荐
Android 从入门到出门 |
---|
第一章:Android开发技能入门指南 |
第二章:使用声明式UI创建屏幕并探索组合原则 |
第三章:使用Hilt处理Jetpack Compose UI状态 |
第四章:现代Android开发中的导航 |
第五章:使用DataStore存储数据和测试 |
第六章:使用Room数据库并测试 |
第七章:开始使用WorkManager |
第八章:分页入门指南 |