提交 5ad61191 编写于 作者: W wizardforcel

2022-01-28 22:43:46

上级 bec0cdfd
......@@ -2,11 +2,11 @@
> 原文:<https://www.studytonight.com/android/setup-android-dev-env>
最后,摊牌时间到了。是时候开发你自己的安卓应用了。等等,你要在哪里输入代码?你需要一些环境来开发你的应用。因此,首先您需要下载必要的工具、SDK和安装文件来设置开发环境。你可以使用苹果操作系统、视窗或 Linux 平台进行安卓应用开发。所有必需的包、工具和其他必需的文件都可以从互联网上下载。以下是这些文件的名称,以及它们的描述,这些描述是开发安卓应用所必需的。
最后,摊牌时间到了。是时候开发你自己的安卓应用了。等等,你要在哪里输入代码?你需要一些环境来开发你的应用。因此,首先您需要下载必要的工具、SDK 和安装文件来设置开发环境。你可以使用苹果操作系统、视窗或 Linux 平台进行安卓应用开发。所有必需的包、工具和其他必需的文件都可以从互联网上下载。以下是这些文件的名称,以及它们的描述,这些描述是开发安卓应用所必需的。
## Java 开发工具包(JDK)
安卓SDK在 Java SE 开发工具包(JDK)上运行。因此,首先您的系统必须安装 JDK。如果系统上没有,可以从[这里](http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载。
安卓 SDK 在 Java SE 开发工具包(JDK)上运行。因此,首先您的系统必须安装 JDK。如果系统上没有,可以从[这里](http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载。
> ***注意:**请确保根据您的系统配置下载适当的 JDK,因为对于 macOS、Windows 和 Linux 平台有单独的设置文件。*
......@@ -18,7 +18,7 @@
接下来是 Android SDK。它包含库、调试器、仿真器、文档、示例代码和针对安卓发布版本的每个应用编程接口级别的教程。
> ***注:**在 Android Studio 发布之前,SDK 是 Android Application 开发工具的独立部分,可以借助 Android ADT Bundle 与 Eclipse 等其他 IDE 集成。后来,谷歌将安卓SDK作为AndroidStudio的一部分,这是安卓开发的官方IDE。*
> ***注:**在 Android Studio 发布之前,SDK 是 Android Application 开发工具的独立部分,可以借助 Android ADT Bundle 与 Eclipse 等其他 IDE 集成。后来,谷歌将安卓 SDK 作为 AndroidStudio 的一部分,这是安卓开发的官方 IDE。*
可以从[这里](https://developer.android.com/studio/index.html#downloads)的链接下载完整的安卓开发环境捆绑包(安卓 Studio + SDK)。
......@@ -26,9 +26,9 @@
* * *
### AndroidStudio的设置和安装
### AndroidStudio 的设置和安装
一旦你完成了安装 JDK 和下载AndroidStudioIDE安装文件,双击。AndroidStudio的. exe 文件(设置文件)。它将为安装准备文件,并询问您要安装的位置,如下图所示。
一旦你完成了安装 JDK 和下载 AndroidStudioIDE 安装文件,双击。AndroidStudio 的. exe 文件(设置文件)。它将为安装准备文件,并询问您要安装的位置,如下图所示。
![Setup Android Development Environment](img/6974919d28f5a7611a8d636094e4c204.png)
......@@ -44,15 +44,15 @@
![Setup Android Development Environment](img/8037ccc7aecd283d4e383ab31b40d7da.png)
AndroidStudio已经直接安装,可以使用了。点击完成按钮,AndroidStudio将打开。
AndroidStudio 已经直接安装,可以使用了。点击完成按钮,AndroidStudio 将打开。
> ***注意:**如果你已经安装了AndroidStudio的任何早期版本,AndroidStudio安装程序将首先删除你的早期版本,然后安装新版本,如下图所示。在此过程中,不会删除设置和配置。*
> ***注意:**如果你已经安装了 AndroidStudio 的任何早期版本,AndroidStudio 安装程序将首先删除你的早期版本,然后安装新版本,如下图所示。在此过程中,不会删除设置和配置。*
![Setup Android Development Environment](img/c8d3c0a82f2eaac139f82095d6d8ee05.png)
![Setup Android Development Environment](img/a21a21bb16c34a5abdcc05f816c51a1b.png)
如果AndroidStudio和自己在同一个位置,它会自动获取安卓SDK的位置。但是如果它没有发现,那么它会要求你浏览到安卓SDK的位置。
如果 AndroidStudio 和自己在同一个位置,它会自动获取安卓 SDK 的位置。但是如果它没有发现,那么它会要求你浏览到安卓 SDK 的位置。
[下一个教程](adding-tools-packages-android-studio)中,我们将讨论 Android SDK 管理器以及 SDK 管理器中完成系统设置以进行开发所需的附加包。
......
# 安卓SDK管理器——下载所需工具和软件包
# 安卓 SDK 管理器——下载所需工具和软件包
> 原文:<https://www.studytonight.com/android/adding-tools-packages-android-studio>
[之前的教程](setup-android-dev-env)中,我们谈到了安卓应用开发所需的工具,并列出了在我们的计算机上配置这些工具的步骤。现在,在本教程中,我们将阐明**安卓SDK管理器**,这对安卓应用开发有多重要,以及开始安卓应用开发需要下载哪些包。
[之前的教程](setup-android-dev-env)中,我们谈到了安卓应用开发所需的工具,并列出了在我们的计算机上配置这些工具的步骤。现在,在本教程中,我们将阐明**安卓 SDK 管理器**,这对安卓应用开发有多重要,以及开始安卓应用开发需要下载哪些包。
安卓SDK管理器,管理各种**安卓SDK版本**,工具和各种其他有用的包,您可以选择和下载,以保持您的开发环境最新。
安卓 SDK 管理器,管理各种**安卓 SDK 版本**,工具和各种其他有用的包,您可以选择和下载,以保持您的开发环境最新。
一般当你第一次启动[AndroidStudio](android-studio-for-android)时,它会打开安卓 SDK 管理器窗口,提示你安装安卓开发所需的软件包。但是如果没有出现这种情况,您可以通过转到**工具→安卓→ SDK 管理器**或点击AndroidStudio工具栏中的![Open SDK Manager Icon](img/898e10031bbd5fe53601488d4e2c6ad9.png)图标来打开 SDK 管理器。
一般当你第一次启动[AndroidStudio](android-studio-for-android)时,它会打开安卓 SDK 管理器窗口,提示你安装安卓开发所需的软件包。但是如果没有出现这种情况,您可以通过转到**工具→安卓→ SDK 管理器**或点击 AndroidStudio 工具栏中的![Open SDK Manager Icon](img/898e10031bbd5fe53601488d4e2c6ad9.png)图标来打开 SDK 管理器。
启动您的SDK管理器,您将看到当前安装项目的列表。它还将列出您系统中已安装项目的所有新项目和可用更新。从这里,您可以查看所需的构建工具、SDK工具、平台工具、SDK平台、SDK示例、系统映像(适用于 AVD)、文档、安卓SDK源和额外的开发包。它需要互联网连接来下载软件包(大多数是大尺寸的),所以请确保您有一个。
启动您的 SDK 管理器,您将看到当前安装项目的列表。它还将列出您系统中已安装项目的所有新项目和可用更新。从这里,您可以查看所需的构建工具、SDK 工具、平台工具、SDK 平台、SDK 示例、系统映像(适用于 AVD)、文档、安卓 SDK 源和额外的开发包。它需要互联网连接来下载软件包(大多数是大尺寸的),所以请确保您有一个。
![Andoid SDK Manager to download packages](img/928af2ddd65373b2202037853b2b1370.png)
* **SDK 工具**和构建工具包含构建您的安卓应用的包和来自谷歌的几个更新/补丁,以更好地开发应用。
* 对于安卓的特定应用编程接口级别(版本),您必须从 **SDK 平台**部分下载额外的包。你很容易理解你要安装哪个 API Level/Android 版本,因为有一个列出 Android 版本名称的列表,你只需要选择一个,点击**确定**。在前面的图片中,您可以看到我们已经在系统上安装了一些 API 级别 22 的包,并且也有更新可供使用。让我们看看我们需要在机器上安装哪些软件包:
1. **SDK 平台:**安卓 SDK 平台包含开发的包/库&为特定版本构建安卓应用。根据特定版本编译您的应用,加载特定的小部件、视图和工具进行编译,是由SDK平台完成的。因此,无论何时你想为任何新的安卓版本(如 8.0 或 7.0)下载软件包,一定要选择并下载SDK平台。
1. **SDK 平台:**安卓 SDK 平台包含开发的包/库&为特定版本构建安卓应用。根据特定版本编译您的应用,加载特定的小部件、视图和工具进行编译,是由 SDK 平台完成的。因此,无论何时你想为任何新的安卓版本(如 8.0 或 7.0)下载软件包,一定要选择并下载 SDK 平台。
2. **系统映像:**要为任何特定的应用编程接口创建 **AVD( [安卓虚拟设备](android-virtual-device) )** ,您应该根据您的系统类型(32 位或 64 位操作系统)下载系统映像。对于安卓智能手机,佩戴&电视,需要单独的图片,也可以下载。如果您的应用正在使用一些播放服务功能,如谷歌地图等,那么要用它们测试您的应用,您还必须下载<u>谷歌应用编程接口系统映像</u>
3. **可选包:**SDK示例,安卓SDK来源&应用编程接口级别的文档是可选的。SDK管理器还允许您为任何特定的SDK平台下载一些示例,并为应用编程接口级别下载源代码。如果有文档,您可以下载包含该 API 级别的特定类和方法信息的文档。如果你需要它们,你可以选择下载,否则就不要。
3. **可选包:**SDK 示例,安卓 SDK 来源&应用编程接口级别的文档是可选的。SDK 管理器还允许您为任何特定的 SDK 平台下载一些示例,并为应用编程接口级别下载源代码。如果有文档,您可以下载包含该 API 级别的特定类和方法信息的文档。如果你需要它们,你可以选择下载,否则就不要。
4. 在 SDK 管理器中向下滚动,您将看到 **Extras** 部分,其中包含应用开发所需/有帮助的附加包/库/服务。你可以下载,如果你认为你需要的话。从现在开始,我们建议你忽略它们。
我们希望您已经选择了需要安装的工具和软件包,点击**确定****安装**。这将打开另一个窗口,如下图所示,选择**接受许可**`RadioButton`,然后点击 SDK 管理器窗口右下角的**安装软件包**按钮,这将开始下载您选择的软件包。安装需要时间,请耐心等待。当所有软件包安装到您的系统中时,系统会要求您重新启动 **ADB** ,单击**是**即可。
![Accept License for Packages in SDK manager](img/5c3492a21c3a86025a76fec9eef44057.png)
这都是关于SDK管理器的。在一行中:
这都是关于 SDK 管理器的。在一行中:
> 它可以让你下载你需要的安卓版本包和应用开发工具”。
......
# 使用 Eclipse IDE开发安卓应用
# 使用 Eclipse IDE 开发安卓应用
> 原文:<https://www.studytonight.com/android/using-eclipse-for-android>
......@@ -12,7 +12,7 @@
所以最好开始使用[AndroidStudio](android-studio-for-android),如果你一直使用 Eclipse IDE 的话。如果你是一个初学者,那么我们为什么要用一个旧的开发环境开始一段新的旅程。正确
**AndroidStudio就是那时!**
**AndroidStudio 就是那时!**
* * *
......
# 设置AndroidStudio
# 设置 AndroidStudio
> 原文:<https://www.studytonight.com/android/android-studio-for-android>
在我们[之前的教程](using-eclipse-for-android)中,我们谈到了 Eclipse IDE 不再被谷歌支持用于安卓开发,所以现在最好的用于安卓开发的 IDE 是 Android Studio。在本教程中,我们将了解AndroidStudio,如何设置它及其功能。
在我们[之前的教程](using-eclipse-for-android)中,我们谈到了 Eclipse IDE 不再被谷歌支持用于安卓开发,所以现在最好的用于安卓开发的 IDE 是 Android Studio。在本教程中,我们将了解 AndroidStudio,如何设置它及其功能。
![Android Studio Installation](img/bf24de23695cd31578ae6808f22cd744.png)
在为 Eclipse 发布了许多 ADT 插件后,谷歌决定为安卓应用开发构建自己的IDE。2014 年 12 月,谷歌发布了AndroidStudio v1.0 的第一个稳定版本。在此之前,谷歌已经在 2013 年 5 月和 2014 年 6 月晚些时候为开发者提供了AndroidStudio v0.1 的早期预览阶段。他们从 v0.8 开始发布了 beta 阶段。
在为 Eclipse 发布了许多 ADT 插件后,谷歌决定为安卓应用开发构建自己的 IDE。2014 年 12 月,谷歌发布了 AndroidStudio v1.0 的第一个稳定版本。在此之前,谷歌已经在 2013 年 5 月和 2014 年 6 月晚些时候为开发者提供了 AndroidStudio v0.1 的早期预览阶段。他们从 v0.8 开始发布了 beta 阶段。
从稳定发布之日起,Android Studio 就成为支持所有 Android SDKs 进行 Android 应用开发的官方开发工具。如果您一直在使用 Eclipse 进行安卓应用开发,那么是时候转到AndroidStudio享受谷歌即将推出的升级了,因为谷歌已经停止为 Eclipse 插件或 ADT 提供更新,所以 Eclipse 不会提供这些升级。
从稳定发布之日起,Android Studio 就成为支持所有 Android SDKs 进行 Android 应用开发的官方开发工具。如果您一直在使用 Eclipse 进行安卓应用开发,那么是时候转到 AndroidStudio 享受谷歌即将推出的升级了,因为谷歌已经停止为 Eclipse 插件或 ADT 提供更新,所以 Eclipse 不会提供这些升级。
你可以从[这里](https://developer.android.com/studio/index.html)下载AndroidStudio。
你可以从[这里](https://developer.android.com/studio/index.html)下载 AndroidStudio。
![Download and setup Android Studio](img/b9cc952022c01650a3edfebe1fad5f82.png)
......@@ -18,9 +18,9 @@
* * *
## AndroidStudio的特点
## AndroidStudio 的特点
AndroidStudio为应用开发提供了许多出色的功能。从发展的角度来看,这里有一些我们喜欢的特性:
AndroidStudio 为应用开发提供了许多出色的功能。从发展的角度来看,这里有一些我们喜欢的特性:
### 格拉德尔
......@@ -40,13 +40,13 @@ AndroidStudio为应用开发提供了许多出色的功能。从发展的角度
### 云集成和 Firebase
有了谷歌应用引擎,你可以直接从AndroidStudio用最少的努力连接到不同的谷歌云服务。通过使用 Firebase 助手,您可以轻松连接到 Firebase,使用其快速身份验证、通知和其他功能。
有了谷歌应用引擎,你可以直接从 AndroidStudio 用最少的努力连接到不同的谷歌云服务。通过使用 Firebase 助手,您可以轻松连接到 Firebase,使用其快速身份验证、通知和其他功能。
* * *
### 应用编程接口集成
在 Android Studio 中,已经配置了各种可以直接用于应用开发的 API。附加的应用编程接口也可以集成到AndroidStudio中(见下图)。要添加或删除一个或多个库,您可以点击右侧的绿色`+`和红色`–`按钮。
在 Android Studio 中,已经配置了各种可以直接用于应用开发的 API。附加的应用编程接口也可以集成到 AndroidStudio 中(见下图)。要添加或删除一个或多个库,您可以点击右侧的绿色`+`和红色`–`按钮。
![Android Studio Install](img/47c701083b2ef62fe76001edfa6f94b4.png)
......@@ -76,7 +76,7 @@ AndroidStudio为应用开发提供了许多出色的功能。从发展的角度
### 版本控制
AndroidStudio已经集成了 Github 和 Bitbucket。所以你的代码可以通过AndroidStudio直接推送到像 Github 或者 BitBucket 这样的在线存储库。
AndroidStudio 已经集成了 Github 和 Bitbucket。所以你的代码可以通过 AndroidStudio 直接推送到像 Github 或者 BitBucket 这样的在线存储库。
* * *
......
# 使用AVD管理器创建安卓虚拟设备
# 使用 AVD 管理器创建安卓虚拟设备
> 原文:<https://www.studytonight.com/android/android-virtual-device>
......@@ -30,11 +30,11 @@ Next window will list down all the configured settings for final verification. H
![creating a new Android Virtual Device](img/6830685f9759b0be1a247cbc3a1c7cbf.png)
您可以根据自己的要求配置设备,点击**完成**。AndroidStudio将立即开始用选定的配置构建AVD&可能需要一些时间。完成后,AVD 管理器将在可用设备列表中列出您的虚拟设备,如下图所示。
您可以根据自己的要求配置设备,点击**完成**。AndroidStudio 将立即开始用选定的配置构建 AVD&可能需要一些时间。完成后,AVD 管理器将在可用设备列表中列出您的虚拟设备,如下图所示。
![Android Virtual Device](img/3ac37090f0332d4e71c7b35a33fb7c54.png)
**动作**栏(表格最后一栏),可以执行**启动 AVD****编辑 AVD** 配置等多个动作。通过单击开始图标(绿色播放图标)启动您的第一个AVD。它将启动一个虚拟设备,就像安卓设备一样,如下图所示。侧工具栏包含按钮,用于执行诸如上下音量、改变方向、返回、回家或最近的&等操作。您也可以使用电源按钮关闭虚拟设备的电源,并选择关闭按钮关闭虚拟设备。
**动作**栏(表格最后一栏),可以执行**启动 AVD****编辑 AVD** 配置等多个动作。通过单击开始图标(绿色播放图标)启动您的第一个 AVD。它将启动一个虚拟设备,就像安卓设备一样,如下图所示。侧工具栏包含按钮,用于执行诸如上下音量、改变方向、返回、回家或最近的&等操作。您也可以使用电源按钮关闭虚拟设备的电源,并选择关闭按钮关闭虚拟设备。
![launching a new Android Virtual Device](img/c61233cdb99fa1581ea18de68b8708c8.png)
......
......@@ -10,7 +10,7 @@
我们的第一个应用将是一个简单的应用,有一个活动和一个布局,其中我们将只打印 **Hello World!设备屏幕上的**。以下是一些你必须知道的事情,不要担心,随着我们的前进,你会明白所有这些:
* 一个**活动**`Activity`的一个实例,一个安卓SDK中的类。活动负责管理用户与屏幕信息的交互。每当我们创建一个新的活动时,我们实际上是在编写`Activity`类的子类。一个简单的应用可能只需要一个子类,而一个复杂的应用可以有很多子类。在我们的第一个应用中`FirstAppActivity`将是我们的活动子类。
* 一个**活动**`Activity`的一个实例,一个安卓 SDK 中的类。活动负责管理用户与屏幕信息的交互。每当我们创建一个新的活动时,我们实际上是在编写`Activity`类的子类。一个简单的应用可能只需要一个子类,而一个复杂的应用可以有很多子类。在我们的第一个应用中`FirstAppActivity`将是我们的活动子类。
* A **[布局](introduction-to-layouts)** 定义一组用户界面(UI)对象(视图和小部件)及其在设备屏幕上的位置。布局由用 XML 编写的定义组成。每个定义都用来创建一个出现在设备屏幕上的对象(用户界面),比如按钮、文本或图像。
简单来说,我们可以说后端将由扩展`Activity`类的类来处理,前端即用户界面在布局 XML 文件中定义。
......@@ -41,23 +41,23 @@
布局名称将自动更新为`activity_first_app`以反映活动名称。布局名称颠倒了活动名称的顺序,全部小写,单词之间有下划线。
点击**完成**,AndroidStudio会花一些时间为你准备项目。
点击**完成**,AndroidStudio 会花一些时间为你准备项目。
* * *
## 在AndroidStudio导航
## 在 AndroidStudio 导航
AndroidStudio将在如下所示的窗口中打开您的项目:
AndroidStudio 将在如下所示的窗口中打开您的项目:
![navigating in Android Application](img/7dbc186257086a24938b0187c17ca98f.png)
AndroidStudio中不同的窗格被称为**工具窗口**
AndroidStudio 中不同的窗格被称为**工具窗口**
左侧视图是**项目**工具窗口。从这里,您可以查看和管理与项目相关联的文件。
中间视图是**编辑器**。为了让你开始,AndroidStudio已经在编辑器中打开了`activity_first_app.xml``FirstAppActivity.java`文件。
中间视图是**编辑器**。为了让你开始,AndroidStudio 已经在编辑器中打开了`activity_first_app.xml``FirstAppActivity.java`文件。
当布局 xml 打开时,您也可以通过单击编辑器窗口左下角的**设计选项卡**切换到**设计**模式,查看您的布局将如何显示。在设计模式下,你可以直接拖放元素,AndroidStudio会自动在你的布局 xml 文件中为添加的小部件编写代码。
当布局 xml 打开时,您也可以通过单击编辑器窗口左下角的**设计选项卡**切换到**设计**模式,查看您的布局将如何显示。在设计模式下,你可以直接拖放元素,AndroidStudio 会自动在你的布局 xml 文件中为添加的小部件编写代码。
![First Android Application](img/f57074129e57cdc1f07b1aadd8f57ab9.png)
......@@ -107,7 +107,7 @@ public class FirstAppActivity extends ActionBarActivity {
}
```
这就是你的第一份申请。希望你已经了解了开发安卓应用的相关基本概念,现在知道如何使用AndroidStudio了。
这就是你的第一份申请。希望你已经了解了开发安卓应用的相关基本概念,现在知道如何使用 AndroidStudio 了。
如果你不理解代码,不要太担心它。我们将在接下来的教程中详细解释每一个细节。从现在开始,只要记住任何扩展`Activity`类的类都会在 App 中创建一个视图,并且该视图的设计是使用`layout.xml`文件设置的。在`FirstAppActivity`类中,`setContentView(R.layout.activity_first_app);`行链接布局 XML 文件和`FirstAppActivity`类。
......
......@@ -4,7 +4,7 @@
在我们[之前的教程](first-android-application)中,我们学习了如何创建我们的第一个安卓应用以及如何运行它。当我们创建一个安卓项目时,[AndroidStudio](android-studio-for-android)用一些默认的包和文件夹生成应用项目。在本教程中,我们将讨论安卓应用的项目结构。
以前很多安卓应用都是在 [Eclipse IDE](using-eclipse-for-android) 上开发的,但是现在一天只能用AndroidStudio开发一个安卓应用,否则谷歌不会允许这个应用公开,甚至拒绝来自谷歌 Play 商店的应用。对于那些使用 Eclipse 开发的应用,现在计划将代码转移到AndroidStudio的人来说,这一课将帮助你理解这两个开发工具的结构。
以前很多安卓应用都是在 [Eclipse IDE](using-eclipse-for-android) 上开发的,但是现在一天只能用 AndroidStudio 开发一个安卓应用,否则谷歌不会允许这个应用公开,甚至拒绝来自谷歌 Play 商店的应用。对于那些使用 Eclipse 开发的应用,现在计划将代码转移到 AndroidStudio 的人来说,这一课将帮助你理解这两个开发工具的结构。
首先我们将了解 **Eclipse IDE** 的项目结构(如果你是初学者,可以跳过这一部分)。为此,我们将假设你有一个基本的“你好世界!”在 Eclipse IDE 中创建的安卓应用。Eclipse 和 Android Studio 都需要相同的步骤来创建一个应用项目,只有细微的区别。
......@@ -27,15 +27,15 @@
这些是默认文件夹,它们和另外两个文件一起共同构成了一个安卓应用项目,一个是`AndroidManifest.xml``default.properties`。还有其他文件夹,如 **bin****参考库**
由于在 Eclipse 中创建的大多数文件夹仍然是在AndroidStudio中创建的,目录结构有一些变化,因此我们将在下一节解释AndroidStudio中安卓应用的包结构。
由于在 Eclipse 中创建的大多数文件夹仍然是在 AndroidStudio 中创建的,目录结构有一些变化,因此我们将在下一节解释 AndroidStudio 中安卓应用的包结构。
* * *
## AndroidStudio中的包结构
## AndroidStudio 中的包结构
在 Android Studio 中,现代的 Android App 包结构发生了一点变化,但变化非常微妙。
以下是创建的文件夹列表,当你在AndroidStudio创建一个安卓应用项目,并在**项目**查看模式下看到它时:
以下是创建的文件夹列表,当你在 AndroidStudio 创建一个安卓应用项目,并在**项目**查看模式下看到它时:
* **app**
* 建设
......@@ -103,7 +103,7 @@
在这个文件夹中有与 **gradle** 相关的文件,这些文件可以被修改以改变项目构建过程。例如:如果您希望在构建`.apk`文件之前运行所有可用的测试用例,您可以通过在 gradle 文件中提及它来实现。
所以现在你知道了你的安卓应用项目的每个现成文件夹的细节。随着我们继续学习课程,您将会对这些文件夹及其包含的文件类型有更多的了解。即将到来的课程包含关于 [Gradle](introduction-to-gradle) (AndroidStudio构建系统)的信息。
所以现在你知道了你的安卓应用项目的每个现成文件夹的细节。随着我们继续学习课程,您将会对这些文件夹及其包含的文件类型有更多的了解。即将到来的课程包含关于 [Gradle](introduction-to-gradle) ( AndroidStudio 构建系统)的信息。
* * *
......
......@@ -2,15 +2,15 @@
> 原文:<https://www.studytonight.com/android/introduction-to-gradle>
[AndroidStudio](android-studio-for-android)中,Gradle 用于构建我们的安卓应用项目,因此扮演了构建系统的角色。在AndroidStudio之前,在 [Eclipse](using-eclipse-for-android) 中,我们使用命令行工具编译和构建应用,该工具很快被基于GUI的步骤所取代,以使用 ANT 在 Eclipse 中构建和运行安卓应用。每个 android 应用开发工具都必须编译资源、java 源代码、外部库,并将它们组合成最终的 APK。
[AndroidStudio](android-studio-for-android)中,Gradle 用于构建我们的安卓应用项目,因此扮演了构建系统的角色。在 AndroidStudio 之前,在 [Eclipse](using-eclipse-for-android) 中,我们使用命令行工具编译和构建应用,该工具很快被基于 GUI 的步骤所取代,以使用 ANT 在 Eclipse 中构建和运行安卓应用。每个 android 应用开发工具都必须编译资源、java 源代码、外部库,并将它们组合成最终的 APK。
**Gradle** 是一个构建系统,负责代码编译、测试、部署以及将代码转换成`.dex`文件,从而在设备上运行应用。
由于AndroidStudio自带预装的 Gradle 系统,所以不需要安装额外的运行时软件来构建我们的项目。每当你点击 android studio 中的 **Run** 按钮时,一个 grade le 任务会自动触发并开始构建项目,在 grade le 完成任务后,app 开始在 AVD 或连接的设备中运行。
由于 AndroidStudio 自带预装的 Gradle 系统,所以不需要安装额外的运行时软件来构建我们的项目。每当你点击 android studio 中的 **Run** 按钮时,一个 grade le 任务会自动触发并开始构建项目,在 grade le 完成任务后,app 开始在 AVD 或连接的设备中运行。
像 Gradle 这样的构建系统不是编译器、链接器等,但它控制和监督编译、文件链接、运行测试用例的操作,并最终为你的 Android 应用将代码捆绑到一个`apk`文件中。
每个AndroidStudio项目都有两个`build.gradle`文件,一个是**应用**文件,另一个是**项目级(模块级)构建文件**文件。
每个 AndroidStudio 项目都有两个`build.gradle`文件,一个是**应用**文件,另一个是**项目级(模块级)构建文件**文件。
构建过程如下图所示。
......
......@@ -38,7 +38,7 @@
![Running First Android Application](img/ab52e19c6c42d6e979d07f38618bd73e.png)
它将显示带有系统连接设备列表的窗口。在这里,我们可以选择应用部署目标,并在所需的仿真器或通用串行总线设备上运行我们的应用进行测试。如我们所见,如果我们需要的话,可以在左下角选择**创建新模拟器**。选择所需的连接设备,点击**确定**,AndroidStudio将开始构建您的项目,并在最后在选定的模拟器上安装调试`apk`。构建过程需要时间,所以我们应该有耐心,但最后我们会得到一个糖果破解如下图。
它将显示带有系统连接设备列表的窗口。在这里,我们可以选择应用部署目标,并在所需的仿真器或通用串行总线设备上运行我们的应用进行测试。如我们所见,如果我们需要的话,可以在左下角选择**创建新模拟器**。选择所需的连接设备,点击**确定**,AndroidStudio 将开始构建您的项目,并在最后在选定的模拟器上安装调试`apk`。构建过程需要时间,所以我们应该有耐心,但最后我们会得到一个糖果破解如下图。
![Running First Android Application](img/f4930f90e86ceb96b1cc0d919c5ea727.png)
......@@ -53,7 +53,7 @@
![Background processes while Running an Android Application](img/8a8b6e1f57683d5efd4cfb876c4c38c8.png)
* 你所有的 Java 源代码都会被 Java 编译器编译成`.class`文件。
* 你所有的`.class`文件被 **dx** 工具转换成一个单一的`.dex`文件,这是安卓SDK工具的一部分。
* 你所有的`.class`文件被 **dx** 工具转换成一个单一的`.dex`文件,这是安卓 SDK 工具的一部分。
* `.dex`文件是一个 Dalvik 可执行文件,在应用启动时运行在 Android Runtime(ART)内部。
*`.dex`文件由**安卓应用打包工具** (aapt)与安卓 Manifest 等应用资源文件打包,生成安卓包文件`.apk`
* 只有经过签名的应用才能在设备/仿真器上运行,以确保其真实性,因此使用 **jarsigner** 实用程序对`.apk`文件进行签名。
......
......@@ -8,7 +8,7 @@
## 步骤 1:创建新项目
1. 打开你的AndroidStudio点击“**开始一个新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
1. 打开你的 AndroidStudio 点击“**开始一个新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
2. 从项目模板窗口中选择**空活动**,点击**下一步**
......
......@@ -8,7 +8,7 @@
类似地,每个视图的位置可以相对于它的兄弟元素(例如在另一个视图的左边或下面)或者相对于父视图的位置来指定。
相对布局是GUI设计中最常用的布局。为了了解 RelativeLayout 是如何工作的,让我们来看看并理解 RelativeLayout 最常见的属性。
相对布局是 GUI 设计中最常用的布局。为了了解 RelativeLayout 是如何工作的,让我们来看看并理解 RelativeLayout 最常见的属性。
* * *
......
# 使用多个布局和视图设计GUI
# 使用多个布局和视图设计 GUI
> 原文:<https://www.studytonight.com/android/hierarchical-arrangement-in-android>
正如我们在之前的教程中学习过的不同视图[视图组](introduction-to-views)[布局](introduction-to-layouts),现在是时候研究如何在我们的安卓项目中一起使用它们来设计出色的用户界面了。在本教程中,我们将学习如何将不同的布局、视图和视图组放在另一个布局(分层排列)中,为您的安卓应用设计完美的GUI。
正如我们在之前的教程中学习过的不同视图[视图组](introduction-to-views)[布局](introduction-to-layouts),现在是时候研究如何在我们的安卓项目中一起使用它们来设计出色的用户界面了。在本教程中,我们将学习如何将不同的布局、视图和视图组放在另一个布局(分层排列)中,为您的安卓应用设计完美的 GUI。
下面我们有一个非常基本的例子来演示如何一起使用多个布局、视图和视图组。
......
......@@ -10,7 +10,7 @@
## 步骤 1:创建新项目
1. 打开你的AndroidStudio点击“**开始一个新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
1. 打开你的 AndroidStudio 点击“**开始一个新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
2. 从项目模板窗口中选择**空活动**,点击**下一步**
......
......@@ -53,7 +53,7 @@
这将设置文本的颜色。`#DD2C00`是颜色有些暗红的六进制代码。您可以从[colorshexa](http://www.colorhexa.com/)或官方材料设计网站- [材料颜色](https://material.io/color/)轻松查找各种颜色的 Hexa 代码
此外,AndroidStudio中有一些预定义的颜色存储在**值**目录中的 **color.xml** 文件下。要访问这个,可以使用`"@android:color/your_color_name"`作为上述属性中的值。
此外,AndroidStudio 中有一些预定义的颜色存储在**值**目录中的 **color.xml** 文件下。要访问这个,可以使用`"@android:color/your_color_name"`作为上述属性中的值。
您也可以在 **color.xml** 样式文件中定义您在应用中经常使用的颜色。这样做是一个非常好的做法,因为如果您决定更改颜色代码/色调,您所要做的就是在 **color.xml** 文件中更改它,它将在任何地方都被更改。
......
......@@ -179,7 +179,7 @@ setTextColor(Color.BLUE);
## 步骤 1:创建新项目
1. 打开你的AndroidStudio点击“**开始一个新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
1. 打开你的 AndroidStudio 点击“**开始一个新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
2. 从项目模板窗口中选择**空活动**,点击**下一步**
......
......@@ -6,7 +6,7 @@
## 什么是开关?
在AndroidStudio**开关**是一个双态**切换开关小部件**,可以用来在两个选项之间进行选择。它主要用于显示选项的开和关状态,对于用户来说,它看起来像一个简单的滑块控件。用户可以前后拖动“拇指”来选择所选选项,或者我们可以简单地点击来切换开关的状态。
AndroidStudio**开关**是一个双态**切换开关小部件**,可以用来在两个选项之间进行选择。它主要用于显示选项的开和关状态,对于用户来说,它看起来像一个简单的滑块控件。用户可以前后拖动“拇指”来选择所选选项,或者我们可以简单地点击来切换开关的状态。
常用于选择开/关热点、手电筒、WiFi 等。是`android.widget.CompoundButton`类的子类。
......@@ -16,7 +16,7 @@
## 步骤 1:创建新项目
1. 打开你的AndroidStudio点击“**开始一个新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
1. 打开你的 AndroidStudio 点击“**开始一个新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
2. 从项目模板窗口中选择**空活动**,点击**下一步**
......
......@@ -2,11 +2,11 @@
> 原文:<https://www.studytonight.com/android/android-recycler-view>
在本文中,我们将把 **Recycler View** 添加到我们的安卓应用中。为此,我们使用**回收商视图****回收机视图**AndroidStudio的一个**视图**,和 Listview 类似,但是控件和功能更多。那么,让我们创建一个项目。
在本文中,我们将把 **Recycler View** 添加到我们的安卓应用中。为此,我们使用**回收商视图****回收机视图** AndroidStudio 的一个**视图**,和 Listview 类似,但是控件和功能更多。那么,让我们创建一个项目。
## 步骤 1:创建新项目
1. 打开你的AndroidStudio点击“**”开始新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))。
1. 打开你的 AndroidStudio 点击“**”开始新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))。
2. 从项目模板窗口中选择“**空活动**,点击**下一步。**
......
......@@ -32,7 +32,7 @@ Adapter View,是一个`View`对象,可以像我们使用任何其他界面
当我们高效地说**时,我们指的是什么?**
**`AdapterView`能够在用户界面上显示数百万个项目,同时保持内存和 CPU 使用率非常低,并且没有任何明显的延迟。不同的适配器遵循不同的策略,但安卓SDK中提供的默认适配器遵循以下技巧:
**`AdapterView`能够在用户界面上显示数百万个项目,同时保持内存和 CPU 使用率非常低,并且没有任何明显的延迟。不同的适配器遵循不同的策略,但安卓 SDK 中提供的默认适配器遵循以下技巧:
1. 它只渲染那些当前在屏幕上或即将出现在屏幕上的`View`对象。因此,无论数据集有多大,`AdapterView`总是一次只加载 5、6 或 7 个项目,这取决于显示大小。从而节省内存。
2. 它还可以在用户滚动时重用已经创建的布局来填充数据项,从而节省了 CPU 的使用。
......
......@@ -124,7 +124,7 @@
根据用户从第一个`Spinner`中选择的选项,我们的第二个`Spinner`将与基于第一个`Spinner`选择的选项一起出现。我们将通过 Java 代码实现这一点,因为用户将在运行时从第一个下拉列表中进行选择,即动态选择。
为了处理GUI事件,我们需要在**MainActivity.java**文件中实现代码。我们将从创建两个`Spinner`的实例开始,然后在两个`Spinner`上分配`setOnItemSelectedListener()`
为了处理 GUI 事件,我们需要在**MainActivity.java**文件中实现代码。我们将从创建两个`Spinner`的实例开始,然后在两个`Spinner`上分配`setOnItemSelectedListener()`
**MainActivity.java**
......
......@@ -6,7 +6,7 @@
****每当我们点击任何[按钮](android-button-view)或提交任何表单时,后端代码都会决定下一步要执行什么操作或如何处理从用户等处接收的数据。
在我们之前的教程中,我们已经看到了不同类型的布局对于作为前端部分的GUI设计是多么有用。在本教程中,我们将关注后端部分并为其编写代码。
在我们之前的教程中,我们已经看到了不同类型的布局对于作为前端部分的 GUI 设计是多么有用。在本教程中,我们将关注后端部分并为其编写代码。
在我们的示例中,我们将通过`EditText`视图从用户处获取输入,并将其显示在`TextView`中。此外,我们还将看到一个`buttonClickListener`,用于定义在应用中点击按钮时要执行的操作。
......@@ -130,7 +130,7 @@ public class MainActivity extends AppCompatActivity {
}
```
`onCreate()`方法中使用`setContentView()`方法设置主布局后,使用如下所示的`findViewById()`方法将我们定义的全局变量附加到GUI视图中。
`onCreate()`方法中使用`setContentView()`方法设置主布局后,使用如下所示的`findViewById()`方法将我们定义的全局变量附加到 GUI 视图中。
```
/*
......
......@@ -14,7 +14,7 @@
![Science Quiz App development](img/ab5ad88b0349a49f72a97db20a9b3bdc.png)
3. 在下一步中,您将被要求选择目标设备,在该设备上将支持您的应用。这个应用还是用`Phone and Tablet`吧。在显示*最低SDK*的下拉列表中,选择`API 16: Android 4.1 (Jelly Bean)`,这意味着我们的应用将在安卓 4.1 版本到 7(最新版本)的所有手机和平板电脑上运行。点击下一步按钮。
3. 在下一步中,您将被要求选择目标设备,在该设备上将支持您的应用。这个应用还是用`Phone and Tablet`吧。在显示*最低 SDK*的下拉列表中,选择`API 16: Android 4.1 (Jelly Bean)`,这意味着我们的应用将在安卓 4.1 版本到 7(最新版本)的所有手机和平板电脑上运行。点击下一步按钮。
![Science Quiz App development](img/8b4df728494134b29d51329daf9dd435.png)
......@@ -22,11 +22,11 @@
![Science Quiz App development](img/4ace312dfc924f61fbce14889598146f.png)
7. 输入活动名称为`ScienceActivity`,AndroidStudio会自动填充布局文件名。在活动名称中添加后缀“活动”是一种标准做法,我们将遵循它。而对于布局 XML 文件,则是所有的字都是小而逆序,用下划线`_`隔开。单击“完成”创建项目。
7. 输入活动名称为`ScienceActivity`,AndroidStudio 会自动填充布局文件名。在活动名称中添加后缀“活动”是一种标准做法,我们将遵循它。而对于布局 XML 文件,则是所有的字都是小而逆序,用下划线`_`隔开。单击“完成”创建项目。
![Science Quiz App development](img/79ca8d1ca7987bbf694fb59da3587a8e.png)
9. AndroidStudio需要一些时间,来构建一切,所以要有点耐心。一旦AndroidStudio完成你的项目构建,你会看到一个新的项目被添加到左边的项目工具窗口中,文件`activity_science.xml`将被打开,在预览工具窗口中你会看到你的应用的预览。如果预览工具窗口没有打开,进入**视图→工具窗口→预览**,预览窗口会显示在右侧。
9. AndroidStudio 需要一些时间,来构建一切,所以要有点耐心。一旦 AndroidStudio 完成你的项目构建,你会看到一个新的项目被添加到左边的项目工具窗口中,文件`activity_science.xml`将被打开,在预览工具窗口中你会看到你的应用的预览。如果预览工具窗口没有打开,进入**视图→工具窗口→预览**,预览窗口会显示在右侧。
![Science Quiz App development](img/5528bd82cf36dd7d653efffdb64286b6.png)
......
......@@ -42,7 +42,7 @@ public class ScienceActivity extends AppCompatActivity {
}
```
当你将这两个新变量引入你的类时,AndroidStudio会给出错误,说*不能解析符号【按钮】*,因为类`Button`必须导入我们的类才能使用。点击文本`Button`并按**选项+返回**如果你使用的是 Macbook,按 **Alt +回车**如果你是 Windows 用户,命令 Android Studio 自动为你导入类。记住这个快捷方式以备将来使用。
当你将这两个新变量引入你的类时,AndroidStudio 会给出错误,说*不能解析符号【按钮】*,因为类`Button`必须导入我们的类才能使用。点击文本`Button`并按**选项+返回**如果你使用的是 Macbook,按 **Alt +回车**如果你是 Windows 用户,命令 Android Studio 自动为你导入类。记住这个快捷方式以备将来使用。
* * *
......@@ -131,7 +131,7 @@ mTrueButton.setOnClickListener(new View.OnClickListener() {
### 是时候运行我们的应用了
您可以使用模拟器来运行应用,但我们建议您使用真实的设备来运行应用。只需将安卓智能手机连接到电脑上,AndroidStudio就会自动检测到它,然后点击**运行**按钮(绿色播放按钮)。
您可以使用模拟器来运行应用,但我们建议您使用真实的设备来运行应用。只需将安卓智能手机连接到电脑上,AndroidStudio 就会自动检测到它,然后点击**运行**按钮(绿色播放按钮)。
啊!你的第二个安卓应用正在运行,尽情享受吧!
......
......@@ -28,7 +28,7 @@
## 创建项目
1. 打开你的AndroidStudio点击“**开始一个新的AndroidStudio项目**”(学习[如何设置AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
1. 打开你的 AndroidStudio 点击“**开始一个新的 AndroidStudio 项目**”(学习[如何设置 AndroidStudio](https://www.studytonight.com/android/setup-android-dev-env)[创建你的第一个安卓项目](https://www.studytonight.com/android/first-android-application))
2. 从项目模板窗口中选择**空活动**,点击**下一步**
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/android/stopwatch-android-app-project-part-3>
这是我们在AndroidStudio制作秒表安卓应用系列的最后一部分,也是这个项目中最重要的一部分。
这是我们在 AndroidStudio 制作秒表安卓应用系列的最后一部分,也是这个项目中最重要的一部分。
如果您还没有完成前两部分,请在继续之前完成:
......
# Kotlin基础知识
\ No newline at end of file
# Kotlin 基础知识
\ No newline at end of file
# Kotlin简介
# Kotlin 简介
> 原文:<https://www.studytonight.com/kotlin/introduction-to-kotlin>
欢迎来到Kotlin教程系列。Kotlin 是一种针对 Java 平台的相对较新的编程语言。我们几乎可以在 Java 的任何地方使用 Kotlin。Kotlin 可用于开发服务器端应用、安卓应用、数据科学领域等。Kotlin 代码也可以转换成 JavaScript 代码。有一些 Java 的背景知识是好的,但是如果你没有 Java 的任何先验知识,那就不成问题了。
欢迎来到 Kotlin 教程系列。Kotlin 是一种针对 Java 平台的相对较新的编程语言。我们几乎可以在 Java 的任何地方使用 Kotlin。Kotlin 可用于开发服务器端应用、安卓应用、数据科学领域等。Kotlin 代码也可以转换成 JavaScript 代码。有一些 Java 的背景知识是好的,但是如果你没有 Java 的任何先验知识,那就不成问题了。
Kotlin 具有代码简洁、空安全、实用等特点。它也完全可以与 Java 互操作。因此,它也支持所有现有的 Java 库和框架。
## Kotlin历史
## Kotlin 历史
Kotlin 语言是由 JetBrains(开发著名的 Java IDE IntelliJ IDEA 的同一家公司)在 2010 年创建的。自 2012 年以来,它一直是开源的。
Kotlin得名于俄罗斯一个名叫[Kotlin](http://en.wikipedia.org/wiki/Kotlin_Island)的岛屿。kotlin 的第一个版本于 2016 年发布,最新版本(2020 年)是 Kotlin v1.3。
Kotlin 得名于俄罗斯一个名叫[Kotlin ](http://en.wikipedia.org/wiki/Kotlin_Island)的岛屿。kotlin 的第一个版本于 2016 年发布,最新版本(2020 年)是 Kotlin v1.3。
Kotlin版本简史:
Kotlin 版本简史:
* Kotlin v1.0,Kotlin 的第一个版本于 2016 年 2 月发布。它正式成为 Kotlin 的第一个稳定版本。
......@@ -26,7 +26,7 @@ Kotlin版本简史:
2017 年,由于越来越受欢迎,谷歌宣布对 Kotlin 提供一流的支持。2019 年,谷歌将 Kotlin 编程语言作为安卓应用开发的首选语言。
## Kotlin的特点
## Kotlin 的特点
Kotlin 提供了比 Java 更多的特性。Kotlin 优于其他语言的主要特点是:
......@@ -38,11 +38,11 @@ Kotlin 确保每一行代码都带有某种意义。在 Java 中需要的所有
### 2.空保险箱
Kotlin 确保我们的程序在运行时不会抛出 *NullPointerException* 。Kotlin 的类型系统跟踪可以为空的值。如果对该值执行任何操作,这可能导致*空指针异常,*Kotlin禁止该操作,并给出错误以避免该错误。我们将在单独的章节中讨论更多关于 null 安全性的内容。
Kotlin 确保我们的程序在运行时不会抛出 *NullPointerException* 。Kotlin 的类型系统跟踪可以为空的值。如果对该值执行任何操作,这可能导致*空指针异常,*Kotlin 禁止该操作,并给出错误以避免该错误。我们将在单独的章节中讨论更多关于 null 安全性的内容。
### 3.彼此协作的
这是Kotlin最令人钦佩的特征之一。Kotlin 与 Java 完全互操作。这意味着你可以在你的 Kotlin 代码库中使用 Java 库,调用 Java 方法,扩展 Java 类,实现 Java 接口等等。您可以用 Java 编写项目的一个类,用 Kotlin 编写另一个类。他们都将能够使用彼此的功能。
这是 Kotlin 最令人钦佩的特征之一。Kotlin 与 Java 完全互操作。这意味着你可以在你的 Kotlin 代码库中使用 Java 库,调用 Java 方法,扩展 Java 类,实现 Java 接口等等。您可以用 Java 编写项目的一个类,用 Kotlin 编写另一个类。他们都将能够使用彼此的功能。
### 4.JavaScript 透明
......
# Kotlin环境设置
# Kotlin 环境设置
> 原文:<https://www.studytonight.com/kotlin/kotlin-environment-setup>
在本教程中,我们将讨论如何在本地机器上设置 Kotlin 环境。您可以设置命令行工具来运行 Kotlin 程序,也可以安装 IntelliJ IDEA IDE(IDE)。
对于任何编程语言,最好使用IDE,因为它比简单的文本编辑器提供了更多的功能。对于 Kotlin 来说,最流行的 IDE 是 IntelliJ IDEA。IntelliJ IDEA 是由开发 Kotlin 的同一家公司 JetBrains 建立的。
对于任何编程语言,最好使用 IDE,因为它比简单的文本编辑器提供了更多的功能。对于 Kotlin 来说,最流行的 IDE 是 IntelliJ IDEA。IntelliJ IDEA 是由开发 Kotlin 的同一家公司 JetBrains 建立的。
## 安装 IntelliJ IDEA
......@@ -28,7 +28,7 @@
![setup Kotlin environment](img/59387d1a99f5843eb96b29682985730f.png)
According to your system, select 32-bit launcher or 64-bit launcher . Select all other options and click on next.
* 点击安装,IDE将成功安装。
* 点击安装,IDE 将成功安装。
您已经在系统中成功安装了 IntelliJ IDEA。如果你在 start 中搜索它,你就能看到它。
......@@ -78,7 +78,7 @@
* 按照相同的步骤将此路径设置为环境变量。
现在我们已经成功地设置了Kotlin编译器。要检查是否一切正常,请打开命令提示符,并键入以下命令:
现在我们已经成功地设置了 Kotlin 编译器。要检查是否一切正常,请打开命令提示符,并键入以下命令:
```
kotlinc -help
......
......@@ -24,14 +24,14 @@
* 在左侧可以看到这样的项目结构:
![First program in Kotlin](img/1c98d3353e247e3ce61c8091f569f504.png)
* 右键点击 **src** 文件夹,选择**新建>Kotlin文件/类**,点击回车。你会看到:
* 右键点击 **src** 文件夹,选择**新建>Kotlin 文件/类**,点击回车。你会看到:
![First program in Kotlin](img/066085e7c038e375dd5bb940d1c84991.png)
* 输入文件名“ **HelloWorld** ,点击回车。
您已经成功创建了一个新的 Kotlin 项目,并在其中创建了一个 Kotlin 文件。现在我们将在其中创建我们的第一个 Kotlin 程序。
## Kotlin的第一个节目
## Kotlin 的第一个节目
编写以下程序的是 **HelloWorld.kt** 文件:
......@@ -43,7 +43,7 @@ fun main() {
**说明:**
* 第 1 行:每个 Kotlin 程序都以`main()`函数开始。使用Kotlin中的`fun`关键字创建函数。我们将在后面的章节中阅读更多关于函数的内容。
* 第 1 行:每个 Kotlin 程序都以`main()`函数开始。使用 Kotlin 中的`fun`关键字创建函数。我们将在后面的章节中阅读更多关于函数的内容。
* 第 2 行:`println()`功能用于在控制台上打印字符串。
......@@ -57,7 +57,7 @@ fun main() {
## 摘要
在本文中,我们创建了一个Kotlin项目,并在Kotlin运行了我们的第一个程序。在下一个教程中,我们将看到如何通过命令行运行相同的程序。
在本文中,我们创建了一个 Kotlin 项目,并在 Kotlin 运行了我们的第一个程序。在下一个教程中,我们将看到如何通过命令行运行相同的程序。
* * *
......
......@@ -4,7 +4,7 @@
在本教程中,我们将看到如何使用编译器运行 Kotlin 程序。确保您已经在前面[设置了 Kotlin 编译器](https://www.studytonight.com/kotlin/kotlin-environment-setup)
## Kotlin的第一个节目
## Kotlin 的第一个节目
打开任何文本编辑器(记事本、崇高等)。)并创建一个 **HelloWorld.kt** 文件。确保该文件的扩展名为“**”。kt** ”。编写以下程序的是 **HelloWorld.kt** 文件:
......@@ -48,7 +48,7 @@ java -jar HelloWorld.jar
## 摘要
在本教程中,我们看到了如何通过命令行运行程序。基本设置已经完成,我们将从下一个教程开始详细学习Kotlin的概念。
在本教程中,我们看到了如何通过命令行运行程序。基本设置已经完成,我们将从下一个教程开始详细学习 Kotlin 的概念。
* * *
......
# Kotlin关键字和标识符
# Kotlin 关键字和标识符
> 原文:<https://www.studytonight.com/kotlin/kotlin-keywords-and-identifiers>
......@@ -32,7 +32,7 @@ Kotlin 中有两种类型的关键字:
val fun = 5   // Error
```
Kotlin的硬关键字是:
Kotlin 的硬关键字是:
<caption>**Hard keywords**</caption>
| 为 | 断开 | 级 | 继续 |
......@@ -70,7 +70,7 @@ Kotlin 中的软关键字是:
在本教程中,我们研究了关键字和标识符。我们将使用和研究本教程系列中的大多数关键字。
接下来,我们将研究Kotlin中的变量。
接下来,我们将研究 Kotlin 中的变量。
* * *
......
# Kotlin变量和常量
# Kotlin 变量和常量
> 原文:<https://www.studytonight.com/kotlin/kotlin-variables-and-constants>
......@@ -37,7 +37,7 @@ println(name)
你好
世界!!
## Kotlin常量
## Kotlin 常量
Kotlin 常量用于定义具有常量值的变量。`const`关键字用于定义常量变量。`const` 关键字只能与`val`关键字一起使用,不能与`var`关键字一起使用。
......@@ -78,7 +78,7 @@ fun sayHello():String{
## 摘要
在本教程中,我们讨论了Kotlin中的变量类型。我们也看到了`const`关键字的使用以及`val``const`关键字的区别。在下一个教程中,我们将讨论 Kotlin 中的数据类型。
在本教程中,我们讨论了 Kotlin 中的变量类型。我们也看到了`const`关键字的使用以及`val``const`关键字的区别。在下一个教程中,我们将讨论 Kotlin 中的数据类型。
* * *
......
# Kotlin数据类型
# Kotlin 数据类型
> 原文:<https://www.studytonight.com/kotlin/kotlin-data-types>
......@@ -54,11 +54,11 @@ println("Data type of name: " + name::class.simpleName)
val variable_name: datatype = value
```
因此,我们在Kotlin中主要使用`val`关键字来声明变量,我们可以在变量名后面使用**冒号来指定数据类型。我们将在下面讨论各种数据类型时看到示例。**
因此,我们在 Kotlin 中主要使用`val`关键字来声明变量,我们可以在变量名后面使用**冒号来指定数据类型。我们将在下面讨论各种数据类型时看到示例。**
### 1.Kotlin数字
### 1.Kotlin 数字
Kotlin 提供了一些内置的数据类型来表示数字。Kotlin数可以是**整数值或浮点数值**
Kotlin 提供了一些内置的数据类型来表示数字。Kotlin 数可以是**整数值或浮点数值**
对于整数,数据类型为:
......@@ -126,7 +126,7 @@ val percentage: Double = 1.0
对于分数数据类型,编译器默认推断**双**数据类型。要明确指定**浮动**,请在值中添加后缀 **f****F** 作为后缀。
### 2.Kotlin字符
### 2.Kotlin 字符
Kotlin 中的字符使用 **Char** 关键字声明。字符应该放在单引号中,如**‘a’**。一个字符的大小是 **4 位**
......@@ -163,7 +163,7 @@ val marks: Array<Int> = arrayOf(10,9,2,7,8,6,10)
我们将在后面的章节中详细讨论数组。
### 5\. 琴弦Kotlin
### 5\. 琴弦 Kotlin
一个字符串可以使用 Kotlin 中的**字符串**类来表示。字符串基本上是字符、单词或句子的集合,可以包含字符、数字、特殊字符,但所有内容都应该用双引号括起来。比如“*嗨我是一根弦*”就是一根弦。字符串总是在双引号内声明。
......
# Kotlin运算符
# Kotlin 运算符
> 原文:<https://www.studytonight.com/kotlin/kotlin-operators>
......@@ -15,7 +15,7 @@ println(sum)
在上面的代码示例中,`num1``num2`**操作数**,而`+`**运算符**
Kotlin有各种类型的运营商。它们分为以下几类:
Kotlin 有各种类型的运营商。它们分为以下几类:
* 算术运算符
......@@ -254,7 +254,7 @@ println(message!!.length)
### 3.安全呼叫操作员(`?.`)
这个运算符是Kotlin中最重要的运算符之一。它**将我们从空指针异常**中拯救出来。顾名思义,它通过检查对象是否为空来帮助我们安全地调用对象的任何变量或方法。
这个运算符是 Kotlin 中最重要的运算符之一。它**将我们从空指针异常**中拯救出来。顾名思义,它通过检查对象是否为空来帮助我们安全地调用对象的任何变量或方法。
```
val message: String? = null
......
# Kotlin输入和输出
# Kotlin 输入和输出
> 原文:<https://www.studytonight.com/kotlin/kotlin-input-and-output>
在本教程中,我们将讨论如何将输出打印到控制台或屏幕,并在 Kotlin 中接受用户的输入。用户输入和输出是任何程序的重要部分。它们将有助于用户交互。
## 在Kotlin显示输出
## 在 Kotlin 显示输出
对于输出到控制台窗口的打印,我们可以使用`print()``println()`功能。当`print()`功能继续将输出添加到同一行时,`println()`将打印输出并将光标移动到下一行。让我们用一个例子来看看:
......@@ -54,7 +54,7 @@ println("Character is: $character")
数字为:25
字符为:a
## 在Kotlin获取用户输入
## 在 Kotlin 获取用户输入
为了获取用户的输入,我们使用`readline()`功能。默认情况下,它会将输入作为**字符串**。如果我们需要任何其他类型的输入,如数字、布尔值等。,则需要将其转换为特定的类型,这意味着显式地指定输入并将输入从字符串转换为其他数据类型,如 Integer 等。
......
# Kotlin注释
# Kotlin 注释
> 原文:<https://www.studytonight.com/kotlin/kotlin-comments>
......@@ -14,7 +14,7 @@ Kotlin 中有两种类型的注释:
现在我们将看到如何在 Kotlin 中使用它们。
## Kotlin的单行注释
## Kotlin 的单行注释
顾名思义,单行注释用于在单行中编写注释。它们是使用`//`(双斜线)创建的。单行注释应该只跨越一行,而不是多行,否则我们会得到一个错误。
......@@ -29,7 +29,7 @@ println("Input in string format is: $inputString") // Input is printed here
在上面的代码中,有三个注释(在第 1、2 和 4 行)。
## 多行注释Kotlin
## 多行注释 Kotlin
多行注释跨越多行。以`/*`开始,以`*/`结束。
......@@ -48,7 +48,7 @@ println("Input in string format is: $inputString")
## 摘要
在本教程中,我们讨论了Kotlin中的注释。注释是有用的工具,我们应该明智地使用它,使我们的代码更易读,并记录代码在程序中的作用。
在本教程中,我们讨论了 Kotlin 中的注释。注释是有用的工具,我们应该明智地使用它,使我们的代码更易读,并记录代码在程序中的作用。
* * *
......
# Kotlin控制流程
\ No newline at end of file
# Kotlin 控制流程
\ No newline at end of file
......@@ -24,7 +24,7 @@ fun main() {
在这里,因为学生的**分大于 33,所以通过了**考试。
但在Kotlin,如果-else 不是**陈述**,而是**表达**。这意味着 if-else 块可以返回一个语法略有变化的值。
但在 Kotlin,如果-else 不是**陈述**,而是**表达**。这意味着 if-else 块可以返回一个语法略有变化的值。
让我们看看下面的代码:
......@@ -192,7 +192,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了Kotlin中的`if``else`表达式。在下一个教程中,我们将讨论Kotlin中的`when`表达。
在本教程中,我们讨论了 Kotlin 中的`if``else`表达式。在下一个教程中,我们将讨论 Kotlin 中的`when`表达。
* * *
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-when-expression>
在本教程中,我们将讨论Kotlin`when`表达式。当我们使用**根据变量**的不同值来选择特定的语句时,会用到 Kotlin `when`表达式。它类似于其他编程语言中的**开关盒**
在本教程中,我们将讨论 Kotlin`when`表达式。当我们使用**根据变量**的不同值来选择特定的语句时,会用到 Kotlin `when`表达式。它类似于其他编程语言中的**开关盒**
使用`when`表达式打印字母表类型的简单程序是:
......@@ -59,7 +59,7 @@ fun main() {
## `when`表达式中的代码块
一段代码也可以放在Kotlin`when`的表达式条件里面:
一段代码也可以放在 Kotlin`when`的表达式条件里面:
```
fun main() {
......@@ -131,7 +131,7 @@ fun main() {
## 摘要
在本教程中,我们介绍了Kotlin中的`when`表达式。这在编写 Kotlin 代码时非常有用,在那里你必须创建一个类似功能的菜单。在下一个教程中,我们将介绍 Kotlin 中不同类型的循环。
在本教程中,我们介绍了 Kotlin 中的`when`表达式。这在编写 Kotlin 代码时非常有用,在那里你必须创建一个类似功能的菜单。在下一个教程中,我们将介绍 Kotlin 中不同类型的循环。
* * *
......
......@@ -4,7 +4,7 @@
在本教程中,我们将从 Kotlin 中的循环开始。我们将介绍 Kotlin 中不同类型的循环,这些循环用于一次又一次地执行一段代码,直到满足某个条件。
## Kotlin环路
## Kotlin 环路
Kotlin 中的循环用于**一次又一次地执行一段特定的代码**。我们可以通过指定某个条件来打破循环。如果达到给定的**条件,执行将结束循环**。让我们用一个例子来理解循环。
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-dowhile-loop>
在本教程中,我们将介绍Kotlin中的`do-while`循环。do-while 循环就像 [Kotlin `while`循环](https://www.studytonight.com/kotlin/kotlin-while-loop)一样,只有一个区别,那就是无论您在`do-while`循环中提供什么条件,l **oop 都将执行一次**,因为条件是在循环代码执行后检查的。
在本教程中,我们将介绍 Kotlin 中的`do-while`循环。do-while 循环就像 [Kotlin `while`循环](https://www.studytonight.com/kotlin/kotlin-while-loop)一样,只有一个区别,那就是无论您在`do-while`循环中提供什么条件,l **oop 都将执行一次**,因为条件是在循环代码执行后检查的。
## kot Lin〔t0〕回圈:
......@@ -69,7 +69,7 @@ fun main() {
## 摘要
在本教程中,我们通过代码示例介绍了 Kotlin `do-while`循环,我们还看到了它与 Kotlin `while`循环的不同之处。在下一个教程中,我们将介绍Kotlin`for`循环。
在本教程中,我们通过代码示例介绍了 Kotlin `do-while`循环,我们还看到了它与 Kotlin `while`循环的不同之处。在下一个教程中,我们将介绍 Kotlin`for`循环。
* * *
......
......@@ -2,9 +2,9 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-for-loop>
在本教程中,我们将讨论Kotlin中的`for`循环。Kotlin 不像 C、C++、Java 等,没有传统的`for`循环。,它将执行,直到条件返回**假**。Kotlin中的`for`循环类似于 Java 中的 [`forEach`循环。](https://www.studytonight.com/java-8/java-8-foreach)
在本教程中,我们将讨论 Kotlin 中的`for`循环。Kotlin 不像 C、C++、Java 等,没有传统的`for`循环。,它将执行,直到条件返回**假**。Kotlin 中的`for`循环类似于 Java 中的 [`forEach`循环。](https://www.studytonight.com/java-8/java-8-foreach)
`for`循环用于迭代任何可以迭代的Kotlin对象。我们可以迭代一个数组、集合、字符串、范围,或者任何可以借助`for`循环迭代的东西。
`for`循环用于迭代任何可以迭代的 Kotlin 对象。我们可以迭代一个数组、集合、字符串、范围,或者任何可以借助`for`循环迭代的东西。
## kot Lin〔t0〕回圈
......@@ -16,13 +16,13 @@ for (item in collection){
}
```
这里的`item`是变量,每个循环执行的值将存储在其中,而`collection`是我们正在迭代的Kotlin对象。
这里的`item`是变量,每个循环执行的值将存储在其中,而`collection`是我们正在迭代的 Kotlin 对象。
Kotlin中的`for`循环并不用于一次又一次地执行操作,而是用于迭代任何Kotlin对象,如数组、列表或任何集合对象,以使用它们的元素执行一些操作。
Kotlin 中的`for`循环并不用于一次又一次地执行操作,而是用于迭代任何 Kotlin 对象,如数组、列表或任何集合对象,以使用它们的元素执行一些操作。
## Kotlin`for`循环示例
让我们看一个例子,在这个例子中,我们将在Kotlin中迭代一个标记的**数组**:
让我们看一个例子,在这个例子中,我们将在 Kotlin 中迭代一个标记的**数组**:
```
fun main() {
......@@ -80,7 +80,7 @@ a
## 摘要
在本教程中,我们介绍了Kotlin中的`for`循环。在下一个教程中,我们将讨论Kotlin中的`range`以及如何在Kotlin循环中使用`range`
在本教程中,我们介绍了 Kotlin 中的`for`循环。在下一个教程中,我们将讨论 Kotlin 中的`range`以及如何在 Kotlin 循环中使用`range`
* * *
......
# Kotlin范围
# Kotlin 范围
> 原文:<https://www.studytonight.com/kotlin/kotlin-range>
在本教程中,我们将讨论Kotlin中的`range`。在数学意义上,一个**范围是一系列数字、字符等。在限定的边界内**。边界点为**起点** & **终点**,两者都包含在范围内。`range`也可以有一个`step`(步骤用于**跳转数字**或字符,同时定义从开始到结束边界的范围)。
在本教程中,我们将讨论 Kotlin 中的`range`。在数学意义上,一个**范围是一系列数字、字符等。在限定的边界内**。边界点为**起点** & **终点**,两者都包含在范围内。`range`也可以有一个`step`(步骤用于**跳转数字**或字符,同时定义从开始到结束边界的范围)。
我们可以借助 Kotlin 中的`rangeTo()`功能或者使用`..`运算符来创建一个范围。
......@@ -10,7 +10,7 @@
如上所述,我们可以使用`..`运算符和`rangeTo()`函数,让我们一个接一个地讨论它们。
### 使用`..`运算符的Kotlin范围:
### 使用`..`运算符的 Kotlin 范围:
让我们使用`..`操作符创建一个从 **1 到 9 的**
......@@ -22,7 +22,7 @@ val range = 1..9
唯一的缺点是,我们不能用我们跳过/跳转数字的模式创建一个范围,例如,如果您想创建一个 1、3、5、7 等数字的**范围。跳一号**,或者 **1、4、7、10 等。跳跃两个数字**
### 使用`rangeTo()`运算符的Kotlin范围:
### 使用`rangeTo()`运算符的 Kotlin 范围:
我们也可以使用`rangeTo()`功能来创建范围。这是一个基本的例子:
......@@ -60,7 +60,7 @@ var digit = 0..9 // Range for digits
这样我们就可以根据我们的要求轻松地定义不同类型的范围。
## Kotlin步幅
## Kotlin 步幅
要定义一个范围内两个连续值之间的距离,我们可以使用`step()`函数。例如,要用 2 的`step`打印 1 到 10 的数字,我们可以将范围写成:
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-continue-break-and-repeat-statement>
在本教程中,我们将讨论Kotlin中的`continue``break``repeat`语句。这些语句在 Kotlin 循环中用于管理循环的执行流程,例如,如果您想跳过一个迭代,或脱离循环或重复一个迭代,那么可以使用这些语句。
在本教程中,我们将讨论 Kotlin 中的`continue``break``repeat`语句。这些语句在 Kotlin 循环中用于管理循环的执行流程,例如,如果您想跳过一个迭代,或脱离循环或重复一个迭代,那么可以使用这些语句。
在本教程中,我们将通过示例介绍所有这三个方面。
......
# Kotlin字符串
# Kotlin 字符串
> 原文:<https://www.studytonight.com/kotlin/kotlin-string>
在本教程中,我们将向您介绍Kotlin字符串,包括Kotlin字符串类、其属性和函数以及代码示例。
在本教程中,我们将向您介绍 Kotlin 字符串,包括 Kotlin 字符串类、其属性和函数以及代码示例。
字符串是组合在一起的**字符数组**。字符串通常使用**双引号** **`""`** 创建。我们也可以使用**三重引号** **`"""`** 创建**多行字符串**。这根弦也被称为**生**弦。
......@@ -26,13 +26,13 @@ fun main() {
String 类包含许多属性和方法,用于管理 Kotlin 字符串并对其执行操作。一些重要的属性和功能是:
### Kotlin字符串属性:
### Kotlin 字符串属性:
* `length`:表示字符串的长度。
* `lastIndex`:表示字符串中最后一个字符的索引。
### Kotlin字符串方法:
### Kotlin 字符串方法:
* `get(index)`:返回字符串中**指定索引**处的**字符**或者抛出`IndexOutOfBoundsException`
......@@ -99,7 +99,7 @@ fun main() {
小写留言:你好世界!!
大写信息:你好世界!!
不要被语法`${ .. }`搞糊涂了,它是用来在Kotlin的 println [输出中追加一个变量值的。](https://www.studytonight.com/kotlin/kotlin-input-and-output)
不要被语法`${ .. }`搞糊涂了,它是用来在 Kotlin 的 println [输出中追加一个变量值的。](https://www.studytonight.com/kotlin/kotlin-input-and-output)
## 字符串模板
......@@ -127,7 +127,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了Kotlin字符串、它的属性和方法。当我们编写实际程序时,字符串非常有用,当您使用 Kotlin 开发您的安卓应用时,所有这些方法都会派上用场。在下一个教程中,我们将讨论Kotlin数组。
在本教程中,我们讨论了 Kotlin 字符串、它的属性和方法。当我们编写实际程序时,字符串非常有用,当您使用 Kotlin 开发您的安卓应用时,所有这些方法都会派上用场。在下一个教程中,我们将讨论 Kotlin 数组。
* * *
......
# Kotlin数组
# Kotlin 数组
> 原文:<https://www.studytonight.com/kotlin/kotlin-array>
在本教程中,我们将讨论Kotlin数组。**数组是数据类型**的集合。在大多数语言中,数组元素应该是相同的数据类型,但是在Kotlin中,我们可以有包含不同数据类型的数据的**数组。意思是,我们可以存储**整数、字符串、字符等。在同一个数组中**。**
在本教程中,我们将讨论 Kotlin 数组。**数组是数据类型**的集合。在大多数语言中,数组元素应该是相同的数据类型,但是在 Kotlin 中,我们可以有包含不同数据类型的数据的**数组。意思是,我们可以存储**整数、字符串、字符等。在同一个数组中**。**
数组的属性有:
......@@ -12,7 +12,7 @@
* 数组是**可变的**,因为数组元素在声明后可以改变。
Kotlin中,可以使用`Array<T>`类和一些Kotlin函数来创建数组。我们将首先看到如何使用函数创建**数组,然后我们将看到如何使用`Array`类创建。**
Kotlin 中,可以使用`Array<T>`类和一些 Kotlin 函数来创建数组。我们将首先看到如何使用函数创建**数组,然后我们将看到如何使用`Array`类创建。**
## 使用函数创建数组
......@@ -77,7 +77,7 @@ var booleanArray = booleanArrayOf(true, false, true)
## 使用数组类创建数组
可以使用`Array`类的构造器创建Kotlin数组。构造器需要两个参数:第一个是数组的`size`,第二个是`init`函数。`init`功能用于初始化数组:
可以使用`Array`类的构造器创建 Kotlin 数组。构造器需要两个参数:第一个是数组的`size`,第二个是`init`函数。`init`功能用于初始化数组:
```
var numbers = Array(3, init = {
......@@ -131,7 +131,7 @@ fun main() {
### 获取数组的大小
Kotlin数组的大小可以通过其`size`属性找到:
Kotlin 数组的大小可以通过其`size`属性找到:
```
fun main() {
......
# Kotlin函数
\ No newline at end of file
# Kotlin 函数
\ No newline at end of file
# Kotlin用户定义函数
# Kotlin 用户定义函数
> 原文:<https://www.studytonight.com/kotlin/kotlin-userdefined-functions>
在本教程中,我们将讨论Kotlin函数,包括Kotlin库函数和用户定义函数。函数用于将巨大的单片代码分解成可重用的更小的代码块。理想情况下,我们应该**为单个任务**创建一个函数。函数也**增加了代码的可重用性**因为一旦被编写,函数可以在需要的时候被多次调用。
在本教程中,我们将讨论 Kotlin 函数,包括 Kotlin 库函数和用户定义函数。函数用于将巨大的单片代码分解成可重用的更小的代码块。理想情况下,我们应该**为单个任务**创建一个函数。函数也**增加了代码的可重用性**因为一旦被编写,函数可以在需要的时候被多次调用。
功能可以有两种类型:
......@@ -10,9 +10,9 @@
2. 用户定义的函数
标准库函数由 Kotlin 标准库提供,可以直接使用。我们已经使用了许多标准库函数,如:`print()``println()``main()``arrayOf()`等。您可以在这里探索更多关于Kotlin标准库[的信息。现在,我们将看到如何创建用户定义的函数。](https://kotlinlang.org/api/latest/jvm/stdlib/)
标准库函数由 Kotlin 标准库提供,可以直接使用。我们已经使用了许多标准库函数,如:`print()``println()``main()``arrayOf()`等。您可以在这里探索更多关于 Kotlin 标准库[的信息。现在,我们将看到如何创建用户定义的函数。](https://kotlinlang.org/api/latest/jvm/stdlib/)
## Kotlin用户定义函数
## Kotlin 用户定义函数
顾名思义,用户定义的功能是由**用户**创建的。Kotlin 中的函数是使用`fun`关键字创建的。函数的语法是:
......@@ -66,11 +66,11 @@ fun getSquare(number: Int): Int {
* 我们还可以定义不返回任何内容的函数,这将在本教程的下一节中介绍。
## 不返回任何内容的Kotlin函数
## 不返回任何内容的 Kotlin 函数
我们可以定义在Kotlin中返回任何东西的函数。有三种不同的方法。
我们可以定义在 Kotlin 中返回任何东西的函数。有三种不同的方法。
### 无返回类型的Kotlin函数:
### 无返回类型的 Kotlin 函数:
如果函数没有返回任何东西,那么就不需要提到返回类型:
......@@ -88,7 +88,7 @@ fun getSquare(number: Int) {
}
```
### 带有`Unit`返回类型的Kotlin函数:
### 带有`Unit`返回类型的 Kotlin 函数:
如果我们想指定返回类型,我们可以添加`Unit`作为不返回任何有意义的函数的返回类型。类似于 Java 中的**虚空。如果没有提到任何返回类型,也没有从函数中返回任何值,那么默认情况下,返回类型被认为是`Unit`。**
......@@ -100,7 +100,7 @@ fun sayHello(): Unit{
}
```
### 带有`Nothing`返回类型的Kotlin函数:
### 带有`Nothing`返回类型的 Kotlin 函数:
在 Kotlin 中,Nothing 是一种特殊类型,它也可以用作用户定义函数的返回类型,用于不返回任何内容的函数。或者,我们可以说,以`Nothing`为返回类型的函数,**从不返回任何东西**,甚至不是默认的`Unit`类型。
......@@ -143,7 +143,7 @@ fun setReturnTypeVoid() : Void {
错误:Kotlin: Null 不能是非 Null 类型的值 Void
看这也行不通。为什么呢?因为Kotlin没有将`Void`视为**空类型**,所以提供`return null`语句会产生编译错误。\
看这也行不通。为什么呢?因为 Kotlin 没有将`Void`视为**空类型**,所以提供`return null`语句会产生编译错误。\
但是在 Kotlin 中,我们可以通过使用`?`运算符使函数返回类型为可空的。
......
# Kotlin递归函数
# Kotlin 递归函数
> 原文:<https://www.studytonight.com/kotlin/kotlin-recursive-functions>
在本教程中,我们将讨论Kotlin递归函数。Kotlin中的一个[函数**不断地调用自己**被称为**递归函数**。这个概念并不是Kotlin的母语,而是存在于所有语言中。递归函数可以看作一个循环,但两者并不完全相同。](https://www.studytonight.com/kotlin/kotlin-userdefined-functions)
在本教程中,我们将讨论 Kotlin 递归函数。Kotlin 中的一个[函数**不断地调用自己**被称为**递归函数**。这个概念并不是 Kotlin 的母语,而是存在于所有语言中。递归函数可以看作一个循环,但两者并不完全相同。](https://www.studytonight.com/kotlin/kotlin-userdefined-functions)
递归函数必须有**中断条件**才能停止递归;**否则它将无限期运行**。中断条件主要基于传递给函数的参数。
......@@ -70,7 +70,7 @@ fun factorial(n: Int): Int{
## 摘要
在本教程中,我们讨论了递归函数以及如何在 Kotlin 中实现同样的功能。您可以搜索更多关于递归函数及其用法的信息。在下一个教程中,我们将讨论Kotlin中的参数类型。
在本教程中,我们讨论了递归函数以及如何在 Kotlin 中实现同样的功能。您可以搜索更多关于递归函数及其用法的信息。在下一个教程中,我们将讨论 Kotlin 中的参数类型。
* * *
......
......@@ -2,9 +2,9 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-positional-default-and-named-function-arguments>
在本教程中,我们将讨论Kotlin函数中不同类型的参数。参数是调用函数时传递给函数的值。
在本教程中,我们将讨论 Kotlin 函数中不同类型的参数。参数是调用函数时传递给函数的值。
Kotlin中,有多种类型的参数可以在声明和调用[Kotlin用户定义函数](https://www.studytonight.com/kotlin/kotlin-userdefined-functions)时使用。它们是:
Kotlin 中,有多种类型的参数可以在声明和调用[Kotlin 用户定义函数](https://www.studytonight.com/kotlin/kotlin-userdefined-functions)时使用。它们是:
1. 位置参数
......@@ -14,7 +14,7 @@
最后我们还会看到什么是`vararg`
## Kotlin位置论点
## Kotlin 位置论点
这些是任何语言中存在的基本类型的参数。这些是基于位置的参数。第一个参数对应函数定义中的第一个参数,第二个参数对应第二个参数,依此类推。
......@@ -31,7 +31,7 @@ fun printInfo(name: String, age: Int) {
在上面的代码中,`"Groot"``2``name``age`功能参数的位置参数。如果我们先试着颠倒他们的位置,即`2`后试着颠倒`"Groot"`,这在位置论证中是行不通的。我们可以通过使用命名参数来实现这一点。
## Kotlin默认参数
## Kotlin 默认参数
默认参数用于为函数参数提供**默认值。考虑这样一种情况:如果用户在调用函数时没有传递任何值,我们希望为函数参数指定一个默认值,那么将使用默认值。我们可以使用默认参数来实现这一点。**
......@@ -84,7 +84,7 @@ printInfo(10) // ERROR
这是因为编译器会尝试将第一个参数即`10`**第一个参数** `name`进行映射。为了实现这种功能,我们将使用命名参数。
## Kotlin命名论证
## Kotlin 命名论证
在调用函数时,我们可以使用参数的名称来指定特定参数的特定参数。这些类型的参数被称为**命名参数**
......@@ -143,7 +143,7 @@ fun findSum(vararg numbers: Int): Int {
## 摘要
在本教程中,我们讨论了各种类型的参数及其用法。我们还讨论了Kotlin中的 **varargs。在下一个教程中,我们将讨论 Kotlin 中的 Lambda 函数/表达式。**
在本教程中,我们讨论了各种类型的参数及其用法。我们还讨论了 Kotlin 中的 **varargs。在下一个教程中,我们将讨论 Kotlin 中的 Lambda 函数/表达式。**
* * *
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-lambda-expression>
在本教程中,我们将讨论Kotlin中的**λ表达式**。Lambda 函数或表达式在 Kotlin 中并不新鲜,在 Python、Java 和 Javascript 等许多其他语言中都存在。
在本教程中,我们将讨论 Kotlin 中的**λ表达式**。Lambda 函数或表达式在 Kotlin 中并不新鲜,在 Python、Java 和 Javascript 等许多其他语言中都存在。
Lambda 函数类似于匿名函数。一个**匿名函数**是一个没有名字的函数。基本上,Lambda 表达式是一种简洁地创建函数并将它们作为参数传递、返回等的方式。我们可以称它们为简单函数。
......@@ -73,9 +73,9 @@ fun main() {
这里返回类型自动推断为`Int`
## *它在Kotlinλ表达式中*
## *它在 Kotlinλ表达式中*
如果 lambda 表达式中只有一个参数,则可以用`it`关键字替换它。这是Kotlin使用的速记,非常有用。`it`关键字将代表传递给 lambda 函数的单个参数。
如果 lambda 表达式中只有一个参数,则可以用`it`关键字替换它。这是 Kotlin 使用的速记,非常有用。`it`关键字将代表传递给 lambda 函数的单个参数。
让我们创建一个数组,并使用`forEach`循环打印其中元素的方块:
......
# Kotlin高阶函数
# Kotlin 高阶函数
> 原文:<https://www.studytonight.com/kotlin/kotlin-higher-order-function>
在上一个教程中,我们讨论了 Kotlin lambda 函数。在本教程中,我们将前进一步,讨论Kotlin中的**高阶函数。**
在上一个教程中,我们讨论了 Kotlin lambda 函数。在本教程中,我们将前进一步,讨论 Kotlin 中的**高阶函数。**
Kotlin认为它的功能是作为一级公民。它允许一个函数被**用作变量**。因此,一个函数可以作为参数传递给另一个函数,从一个函数返回,存储在变量或数据结构中,等等。
Kotlin 认为它的功能是作为一级公民。它允许一个函数被**用作变量**。因此,一个函数可以作为参数传递给另一个函数,从一个函数返回,存储在变量或数据结构中,等等。
## Kotlin高阶函数
## Kotlin 高阶函数
将另一个函数作为自变量或返回一个函数的函数称为**高阶函数**。lambda 表达式通常作为参数传递给高阶函数,或者从高阶函数返回。匿名函数也可以用于同样的目的。
我们将看到一些例子,其中我们将传递函数和 lambdas 作为参数,或者从另一个函数返回它们。
## Kotlin函数作为参数
## Kotlin 函数作为参数
在本例中,函数`sayHello()`作为参数传递给`higherOrderFunction()`,并从`main()`函数调用:
......@@ -54,7 +54,7 @@ fun main() {
* T **o 传递一个函数作为参数**我们使用`::`运算符。我们从`main()`调用`higherOrderFunction()`函数,并通过`sayHello()`作为参数。
## 作为返回值的Kotlin函数
## 作为返回值的 Kotlin 函数
在本例中,我们将从`higherOrderFunction()`函数返回`sayHello()`函数。
......@@ -139,7 +139,7 @@ fun main() {
## 摘要
在本教程中,我们用多个例子讨论了Kotlin高阶函数。在下一个教程中,我们将讨论Kotlin中的内联函数。
在本教程中,我们用多个例子讨论了 Kotlin 高阶函数。在下一个教程中,我们将讨论 Kotlin 中的内联函数。
* * *
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-inline-keyword>
在本教程中,我们将使用`inline`关键字讨论Kotlin中的内联函数。内联函数帮助我们在运行时节省内存,从而提高应用的性能。
在本教程中,我们将使用`inline`关键字讨论 Kotlin 中的内联函数。内联函数帮助我们在运行时节省内存,从而提高应用的性能。
在之前的教程中,我们讨论了 lambda 表达式和高阶函数。让我们举同一个例子:
......@@ -20,13 +20,13 @@ fun main() {
}
```
在 IntelliJ 中,我们可以生成我们的 Kotlin 程序的字节码。为此,请转到**工具>Kotlin>显示Kotlin字节码**。我们可以反编译这个字节码,生成等价的 Java 代码。
在 IntelliJ 中,我们可以生成我们的 Kotlin 程序的字节码。为此,请转到**工具>Kotlin>显示 Kotlin 字节码**。我们可以反编译这个字节码,生成等价的 Java 代码。
我们将观察到,对于λ表达式,创建了一个新的函数对象。但这不是我们想要的。
每个高阶函数将**创建一个新对象,并为其分配内存**。这会**增加运行时间开销**。为了克服这个问题,我们**使用内联函数**
## Kotlin内联函数
## Kotlin 内联函数
为了避免为每个高阶函数创建新对象,我们可以使用`inline`关键字。它将帮助我们提高代码的性能。`inline`关键字不是为高阶函数创建新对象,而是将内联函数内部的代码复制到调用它的地方。
......
# Kotlin类和对象
# Kotlin 类和对象
> 原文:<https://www.studytonight.com/kotlin/kotlin-class-and-object>
......@@ -24,7 +24,7 @@
该类用于创建对象的**蓝图。让我们继续这个例子,下面我们将定义一个名为**移动**的类,在其中我们将定义它的所有属性和方法,然后我们将创建该类的对象,这些属性有不同的值。把对象看成不同公司提供的手机,或者不同型号的手机,像 **iPhone 11 Pro** 可以是一个对象,**三星 Galaxy S 20** 可以是另一个有自己配置的对象,然后**一加 7** 等等。**
## Kotlin班
## Kotlin
使用`class`关键字定义一个类。创建类的语法是:
......@@ -35,7 +35,7 @@ class <class-name> // class header
}
```
Kotlin课程有两个主要部分:
Kotlin 课程有两个主要部分:
* **类头**:包含类名、主构造器、父构造器等。(我们将在后续教程中了解构造器)
......@@ -87,13 +87,13 @@ class Mobile {
我们已经创建了一个包含属性和方法的基本类。
关于Kotlin课程的要点是:
关于 Kotlin 课程的要点是:
* 属性必须在创建对象时**初始化。我们已经将`brand` & `model`初始化为空字符串,并将`mrp` & `discount`初始化为 **0** 作为默认值。**
* 默认情况下,Kotlin中的类是**公共的**
* 默认情况下,Kotlin 中的类是**公共的**
## Kotlin类对象
## Kotlin 类对象
对象是真实世界的实体。它拥有类中声明的所有属性和方法。声明类的对象的语法是:
......
# Kotlin构造器——主构造器和辅助构造器
# Kotlin 构造器——主构造器和辅助构造器
> 原文:<https://www.studytonight.com/kotlin/kotlin-constructor-primary-and-secondary-constructor>
......@@ -12,9 +12,9 @@ Kotlin 中有两种类型的构造器:
只能有**一个一级建造师****多个二级建造师**
## Kotlin主构造器
## Kotlin 主构造器
Kotlin最重要的特点之一是简洁。从主构造器的声明可以看出。主构造器是类头的一部分。类的所有属性也成为了主构造器的一部分。
Kotlin 最重要的特点之一是简洁。从主构造器的声明可以看出。主构造器是类头的一部分。类的所有属性也成为了主构造器的一部分。
通过在类名末尾添加`constructor()`来创建主构造器:
......@@ -141,7 +141,7 @@ MRP: 100000.0
* 一个类可以有多个`init`块。
## Kotlin二级建造师
## Kotlin 二级建造师
辅助构造器用于初始化一组值。使用`constructor`关键字创建辅助构造器。一个类可以有**一个或多个二级构造器**
......
# Kotlin伴随对象
# Kotlin 伴随对象
> 原文:<https://www.studytonight.com/kotlin/kotlin-companion-object>
......@@ -60,7 +60,7 @@ I 值:2
## 摘要
在本教程中,我们讨论了 Kotlin 中的伴随对象。它们可以被认为是 Java `static`关键字的替换。它们在创建类时会派上用场。在下一个教程中,我们将讨论Kotlin中的获取者和设置者。
在本教程中,我们讨论了 Kotlin 中的伴随对象。它们可以被认为是 Java `static`关键字的替换。它们在创建类时会派上用场。在下一个教程中,我们将讨论 Kotlin 中的获取者和设置者。
* * *
......
......@@ -32,7 +32,7 @@ Getter 和 Setter 是由 Kotlin 为每个类属性默认生成的函数**。它
最好不要将类的变量暴露在它之外。如果您来自 Java,那么您必须已经将类属性声明为私有,并为其创建了获取器和设置器方法。默认情况下,Kotlin 提供此功能。
## Kotlin的吸气剂和设置剂
## Kotlin 的吸气剂和设置剂
默认`get()``set()`功能如下:
......@@ -50,7 +50,7 @@ class Person{
`var`声明的属性同时具有`get()``set()`功能。但是用`val`声明的属性只有`get()`功能。这是因为`val`的值不能重新分配。
`field`关键字用于表示变量。`value`用于表示要分配给变量的值。它也可以改变。这些`get()``set()`功能是多余的,因为Kotlin默认提供它们。
`field`关键字用于表示变量。`value`用于表示要分配给变量的值。它也可以改变。这些`get()``set()`功能是多余的,因为 Kotlin 默认提供它们。
## 定义自定义获取器和设置器
......
# Kotlin访问修饰符
# Kotlin 访问修饰符
> 原文:<https://www.studytonight.com/kotlin/kotlin-access-modifiers>
在本教程中,我们将介绍Kotlin中的可见性修改器或访问修改器。访问修饰符或可见性修饰符用于定义类、函数、字段、接口等的范围。可见性修饰符关键字限制类、函数、属性等的使用,并声明它们是否在它们的子类、其他文件、类、其他包中可用。
在本教程中,我们将介绍 Kotlin 中的可见性修改器或访问修改器。访问修饰符或可见性修饰符用于定义类、函数、字段、接口等的范围。可见性修饰符关键字限制类、函数、属性等的使用,并声明它们是否在它们的子类、其他文件、类、其他包中可用。
在 Kotlin 中,可见性修饰符可以应用于类、构造器、对象、接口、函数、属性及其设置器。Getters 与属性具有相同的可见性。
......@@ -22,7 +22,7 @@ Kotlin 中有四个可见性修饰符:
## 顶级字段的可见性修饰符
顶级字段是放置在类或接口之外的字段。它们直接存在于任何Kotlin文件中。
顶级字段是放置在类或接口之外的字段。它们直接存在于任何 Kotlin 文件中。
对于顶级字段,不同的可见性修饰符意味着:
......
# Kotlin继承
# Kotlin 继承
> 原文:<https://www.studytonight.com/kotlin/kotlin-inheritance>
......@@ -14,9 +14,9 @@
继承允许新类继承现有类的属性和方法。现有类或继承新类的类称为**基类****父类****超类**。继承已有类特征的新类称为**派生类****子类****子类**
## Kotlin的继承
## Kotlin 的继承
Kotlin的所有职业默认都是**`final`。这意味着这些**职业是不可继承的**。为了使类可继承,我们在类头中添加`open`关键字。**
Kotlin 的所有职业默认都是**`final`。这意味着这些**职业是不可继承的**。为了使类可继承,我们在类头中添加`open`关键字。**
**子类使用`:`运算符继承父类。继承类的**语法是:**
......@@ -134,11 +134,11 @@ fun main() {
在本例中,`Truck`类的二级构造器使用`super`关键字调用`Vehicle`类的二级构造器。通过`super`调用时,会提供父类所需的所有参数。
## Kotlin函数覆盖
## Kotlin 函数覆盖
在继承中,我们可以在派生类中提供基类函数的具体实现。这意味着如果一个函数存在于父类中,那么我们可以**在子类**中提供相同函数的不同实现。被称为**功能超越**
Kotlin中,默认情况下功能也是`final`**。要覆盖一个函数,它必须在父类中标记为`open`(就像类一样),在子类中,我们必须使用关键字`override`而不是`open`来指定我们已经覆盖了该函数。**
Kotlin 中,默认情况下功能也是`final`**。要覆盖一个函数,它必须在父类中标记为`open`(就像类一样),在子类中,我们必须使用关键字`override`而不是`open`来指定我们已经覆盖了该函数。**
****功能名称和参数应相同**
......@@ -184,7 +184,7 @@ fun main() {
我们也可以使用`super`关键字在子类内部调用父类函数。
## Kotlin覆盖属性
## Kotlin 覆盖属性
同样,我们也可以覆盖属性并**在子类**中更改它们的值。属性应该标记为`open`以便覆盖它们,并且当我们覆盖属性时,在子类中使用`override`关键字,就像我们覆盖类函数一样。
......@@ -216,7 +216,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了 Kotlin 中的继承、如何在类中创建父子关系、构造器在 inheritance 期间的行为以及方法和属性重写。在下一个教程中,我们将讨论Kotlin中的抽象类。
在本教程中,我们讨论了 Kotlin 中的继承、如何在类中创建父子关系、构造器在 inheritance 期间的行为以及方法和属性重写。在下一个教程中,我们将讨论 Kotlin 中的抽象类。
* * *
......
# Kotlin抽象类
# Kotlin 抽象类
> 原文:<https://www.studytonight.com/kotlin/kotlin-abstract-class>
......@@ -14,7 +14,7 @@
然后如果类像`Square``Rectangle``Circle`等。继承`Shape`类,这些类必须覆盖`area()`函数,否则编译器会抛出错误。
## Kotlin抽象类
## Kotlin 抽象类
如果一个类的任何功能都标有`abstract`关键字,那么这个类也应该标有`abstract`关键字。让我们首先看一个抽象类的基本例子:
......
# Kotlin接口
# Kotlin 接口
> 原文:<https://www.studytonight.com/kotlin/kotlin-interface>
......@@ -12,7 +12,7 @@
这使得接口和抽象类非常相似。抽象类和接口的关键区别是:**一个类只能继承一个抽象类**,但是它**可以继承很多接口**。如果需要继承多个类,那么我们可以选择接口。
## Kotlin接口
## Kotlin 接口
在 Kotlin 中定义接口的语法是:
......
# Kotlin嵌套类和内部类
# Kotlin 嵌套类和内部类
> 原文:<https://www.studytonight.com/kotlin/kotlin-nested-and-inner-class>
在本教程中,我们将讨论在Kotlin的另一个类中**创建类的两种方法,第一种是Kotlin**嵌套类**,另一种是Kotlin**内部类**。**
在本教程中,我们将讨论在 Kotlin 的另一个类中**创建类的两种方法,第一种是 Kotlin**嵌套类**,另一种是 Kotlin**内部类**。**
## Kotlin嵌套类
## Kotlin 嵌套类
我们可以直接在另一个类中创建一个嵌套类。默认情况下,嵌套类本质上是**静态的**。这意味着我们可以使用嵌套类的属性和函数,而无需创建外部类的对象。可以使用`.`运算符直接访问它们。
......@@ -33,7 +33,7 @@ val obj = Outer.Nested()
我们可以使用外部类名创建嵌套类的对象。
### Kotlin嵌套类示例:
### Kotlin 嵌套类示例:
让我们举个例子,
......@@ -63,7 +63,7 @@ fun main() {
狗有尾巴:真
狗说:汪汪
## Kotlin内班
## Kotlin 内班
Kotlin 内部类是使用`inner`关键字创建的。可以认为是**特殊嵌套类**
......@@ -96,7 +96,7 @@ val innerObj = outerObj.Inner()
正如您在上面的语法中看到的,我们首先创建外部类的对象,然后使用它来创建内部类的对象。
### Kotlin内部类示例:
### Kotlin 内部类示例:
让我们举个例子,
......@@ -136,7 +136,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了 Kotlin 嵌套类和内部类。我们还介绍了如何从`main()`功能访问他们的成员。在下一个教程中,我们将介绍Kotlin的数据类。
在本教程中,我们讨论了 Kotlin 嵌套类和内部类。我们还介绍了如何从`main()`功能访问他们的成员。在下一个教程中,我们将介绍 Kotlin 的数据类。
* * *
......
# Kotlin数据类
# Kotlin 数据类
> 原文:<https://www.studytonight.com/kotlin/kotlin-data-class>
在本教程中,我们将介绍Kotlin**数据类**的概念。在每个项目中,我们需要一些类,它们的**唯一目的是存储数据**。这些类被称为**数据类****数据访问对象****数据传输对象**等。
在本教程中,我们将介绍 Kotlin **数据类**的概念。在每个项目中,我们需要一些类,它们的**唯一目的是存储数据**。这些类被称为**数据类****数据访问对象****数据传输对象**等。
数据类主要包含:
......@@ -63,7 +63,7 @@ public class Person {
写这段代码真的很烦人,因为它只是保存数据并提供管理数据的实用功能。Kotlin 通过引入**数据类**解决了这个问题。
## Kotlin数据类
## Kotlin 数据类
使用`data`关键字创建数据类。默认情况下,Kotlin 数据类提供:
......@@ -83,7 +83,7 @@ public class Person {
data class Person(var name: String, var gender: String, var age: Int)
```
仅此而已。这是Kotlin简洁的一个很好的例子。
仅此而已。这是 Kotlin 简洁的一个很好的例子。
让我们**创建一个这个类的对象**并打印出来:
......@@ -126,7 +126,7 @@ fun main() {
当我们使用`copy()`函数从任何对象复制单个属性值时,我们应该使用[命名参数](https://www.studytonight.com/kotlin/kotlin-positional-default-and-named-function-arguments),否则该值可能会被分配给其他变量。
## Kotlin数据类:`hashCode`和`equals`函数
## Kotlin 数据类:`hashCode`和`equals`函数
`equals()``hashCode()`功能用于检查**两个物体是否相等**`hashCode()`生成一个对象的哈希值。如果两个对象的所有对应值相等,则两个对象的哈希值相同。`equals()`功能也用于检查两个物体是否相等。
......@@ -153,7 +153,7 @@ fun main() {
## 析构数据类对象- `componentN()`函数
如果我们想把一个对象的属性映射成独立变量,那么这是一个乏味的任务。在Kotlin中,我们可以使用 ***销毁声明*** 来销毁一个对象并获取其在自变量中的属性。让我们把`man`物体破坏成独立的变量:
如果我们想把一个对象的属性映射成独立变量,那么这是一个乏味的任务。在 Kotlin 中,我们可以使用 ***销毁声明*** 来销毁一个对象并获取其在自变量中的属性。让我们把`man`物体破坏成独立的变量:
```
fun main() {
......@@ -179,7 +179,7 @@ man.component3() // 18
## 摘要
至此,本教程结束。在本教程中,我们了解了 Kotlin 数据类及其提供的功能。Kotlin 数据类减少了样板代码,并提供了获取器、设置器、toString、equals 等。自动通用功能。在下一个教程中,我们将讨论Kotlin中的枚举。
至此,本教程结束。在本教程中,我们了解了 Kotlin 数据类及其提供的功能。Kotlin 数据类减少了样板代码,并提供了获取器、设置器、toString、equals 等。自动通用功能。在下一个教程中,我们将讨论 Kotlin 中的枚举。
* * *
......
# Kotlin枚举
# Kotlin 枚举
> 原文:<https://www.studytonight.com/kotlin/kotlin-enum>
在本教程中,我们将了解 Kotlin Enum。在开发应用时,可能会出现这样一种情况,即我们希望一个变量只具有一组给定的允许值,例如,如果我们有一个变量`pizzaSize`,那么它应该具有以下值:小、中、大。
Kotlin和 Java 中,枚举帮助我们实现了这一点。
Kotlin 和 Java 中,枚举帮助我们实现了这一点。
在 Kotlin 中,我们可以借助`enum`关键字创建一个**枚举类**。Kotlin 枚举可以有**属性****功能**,可以**实现接口**等。
## Kotlin枚举类
## Kotlin 枚举类
让我们创建一个包含比萨饼大小的简单枚举类:
......@@ -31,7 +31,7 @@ fun main() {
每个枚举常量充当一个单独的对象。它们用逗号隔开。在上例中,`SMALL``MEDIUM``LARGE`为对象。
## Kotlin枚举:初始化常量
## Kotlin 枚举:初始化常量
在 Kotlin 枚举中可以有**主构造器**。因为枚举中的常量是实例,所以可以通过向构造器传递值来初始化它们:
......@@ -58,7 +58,7 @@ fun main() {
正如您在上面的示例中所看到的,我们在枚举类中包含了更多的数据,并将其与枚举实例相关联。同样,如果我们愿意,我们可以添加更多的信息。
## Kotlin枚举:实现接口
## Kotlin 枚举:实现接口
在 Kotlin 中,我们甚至可以在枚举类中实现一个接口。**常量分别覆盖**接口功能**:**
......
# Kotlin密封类
# Kotlin 密封类
> 原文:<https://www.studytonight.com/kotlin/kotlin-sealed-class>
在本教程中,我们将学习**Kotlin密封类**。密封类在 Kotlin 中是新的,在 Java 中不存在。
在本教程中,我们将学习**Kotlin 密封类**。密封类在 Kotlin 中是新的,在 Java 中不存在。
密封类用于**表示受限类层次结构**。这意味着密封类的对象只能有一个定义的类型。让我们借助一个例子来理解它。
......@@ -20,7 +20,7 @@
* 密封类的子类可以是不同的类型,如:数据类、对象类或普通类。
## 创建Kotlin密封类
## 创建 Kotlin 密封类
使用`sealed`关键字创建密封类。需要注意的是,密封类的所有子类都必须在同一个 Kotlin 文件中声明。如果我们试图在其他 Kotlin 文件中创建一个密封类的子类,我们会得到一个错误。**封存类默认为`abstract`**。意思是**我们不能实例化密封类**
......@@ -45,7 +45,7 @@ fun main() {
正如您在上面的示例中看到的,我们可以将密封类用于这样的用例,在这些用例中,我们知道所有子类都需要什么,并且创建的类严格地服务于一个目的,就像在上面的代码示例中,我们有一个由 3 个子类继承的 Question 类,就是这样。
## Kotlin密封类:`when`表达式
## Kotlin 密封类:`when`表达式
我们经常使用带有`when`表达式的密封类。因为`when`表达式保证了**密封类的所有子类都被**处理。如果我们忘记处理密封类的一个特定子类,它会给出一个错误。现在没有必要有一个`else`街区。但是只有当你把`when`作为一个表达而不是一个陈述时,它才会起作用。
......
......@@ -50,7 +50,7 @@ fun main(){
忍者等级为 12
新忍者等级为第一
## Kotlin参数化函数
## Kotlin 参数化函数
同样,我们也可以创建通用函数:
......@@ -74,7 +74,7 @@ fun main(){
## 摘要
在本教程中,我们学习了 Kotlin 中泛型的基础知识。在下一个教程中,我们将学习Kotlin中的扩展函数。
在本教程中,我们学习了 Kotlin 中泛型的基础知识。在下一个教程中,我们将学习 Kotlin 中的扩展函数。
* * *
......
# Kotlin扩展函数
# Kotlin 扩展函数
> 原文:<https://www.studytonight.com/kotlin/kotlin-extension-function>
在本教程中,我们将讨论Kotlin中的扩展函数。Kotlin 提供了向现有类添加新功能的功能。为此,没有必要继承它们。可以通过名为**扩展**的特殊声明来实现。
在本教程中,我们将讨论 Kotlin 中的扩展函数。Kotlin 提供了向现有类添加新功能的功能。为此,没有必要继承它们。可以通过名为**扩展**的特殊声明来实现。
## Kotlin扩展函数
## Kotlin 扩展函数
Kotlin Extensions 提供了向现有类添加新函数的功能。该功能称为**扩展功能**。我们可以向**用户定义类**以及**库类**添加扩展函数。
......
# Kotlin异常处理
\ No newline at end of file
# Kotlin 异常处理
\ No newline at end of file
# Kotlin异常处理
# Kotlin 异常处理
> 原文:<https://www.studytonight.com/kotlin/kotlin-exception-handling>
在本教程中,我们将学习Kotlin中的**异常处理。几乎所有的编程语言都提供了处理异常的机制。在开始异常处理之前,让我们先讨论什么是异常。**
在本教程中,我们将学习 Kotlin 中的**异常处理。几乎所有的编程语言都提供了处理异常的机制。在开始异常处理之前,让我们先讨论什么是异常。**
## **什么是例外?**
......@@ -38,11 +38,11 @@ Kotlin 中的所有异常类都是类**可投掷**的后代。
* **未检查的异常:**编译时不检查这些异常。即使我们不处理这些异常,程序也会编译成功。
Kotlin,我们只有**未检查的异常**,即**检查的异常在Kotlin**中不存在。消除检查异常背后的原因之一是,很大一部分开发人员认为检查异常会增加不必要的代码。
Kotlin,我们只有**未检查的异常**,即**检查的异常在 Kotlin**中不存在。消除检查异常背后的原因之一是,很大一部分开发人员认为检查异常会增加不必要的代码。
如果我们想让调用者知道函数可能抛出的异常,我们可以在 Kotlin 中添加`@Throws`注释。
## Kotlin中的异常处理
## Kotlin 中的异常处理
Kotlin 中的异常处理可以用四个关键字来理解。它们是:
......
# Kotlin多重`catch`块
# Kotlin 多重`catch`块
> 原文:<https://www.studytonight.com/kotlin/kotlin-multiple-catch-blocks>
......@@ -20,7 +20,7 @@ try {
如上所述,我们为每个`catch`块指定了不同的异常类型。多个`catch`块用于不同地处理不同类型的异常,例如,在不同的异常情况下为用户打印不同的消息。
### Kotlin多重`catch`块-示例
### Kotlin 多重`catch`块-示例
让我们首先看一个例子,在这个例子中,我们将捕捉多个异常。我们将从用户那里获得两个数字作为输入,并对它们进行划分:
......@@ -66,7 +66,7 @@ fun main() {
## 摘要
在本教程中,我们学习了如何在 Kotlin 中使用多个`catch`块来处理多个不同的异常类型。在下一个教程中,我们将讨论Kotlin中嵌套的`catch`块。
在本教程中,我们学习了如何在 Kotlin 中使用多个`catch`块来处理多个不同的异常类型。在下一个教程中,我们将讨论 Kotlin 中嵌套的`catch`块。
* * *
......
# Kotlin嵌套`try-catch`
# Kotlin 嵌套`try-catch`
> 原文:<https://www.studytonight.com/kotlin/kotlin-nested-try-catch>
......@@ -21,7 +21,7 @@ try {
如果内部`try`块出现异常,则首先用内部`catch`块进行检查。如果没有在那里处理,那么将使用外部`catch`块进行检查,以此类推。
## Kotlin嵌套`try-catch`-示例:
## Kotlin 嵌套`try-catch`-示例:
让我们使用嵌套的`try-catch`块编写一个程序:
......
# Kotlin集合
\ No newline at end of file
# Kotlin 集合
\ No newline at end of file
# Kotlin集合
# Kotlin 集合
> 原文:<https://www.studytonight.com/kotlin/kotlin-collections>
在本节中,我们将向您简要介绍Kotlin的集合。集合的概念对Kotlin来说并不陌生。它已经存在于许多其他编程语言中。Kotlin 标准库提供了一套创建和管理集合的工具。
在本节中,我们将向您简要介绍 Kotlin 的集合。集合的概念对 Kotlin 来说并不陌生。它已经存在于许多其他编程语言中。Kotlin 标准库提供了一套创建和管理集合的工具。
## 什么是集合?
......@@ -14,7 +14,7 @@
## 集合类型
Kotlin有三种类型的集合:
Kotlin 有三种类型的集合:
1. 目录
......
# Kotlin列表
# Kotlin 列表
> 原文:<https://www.studytonight.com/kotlin/kotlin-list>
在本教程中,我们将讨论Kotlin列表。列表包括:
在本教程中,我们将讨论 Kotlin 列表。列表包括:
* 元素的有序集合。
......@@ -12,9 +12,9 @@
* 可变列表可以被认为是一个动态数组,其大小可以改变。
在Kotlin,我们可以有一个**可变**列表和一个**不可变**列表。
Kotlin,我们可以有一个**可变**列表和一个**不可变**列表。
## Kotlin不可变列表
## Kotlin 不可变列表
使用`List`接口创建不可变列表。`List`接口继承了`Collection`接口。它包含许多有用的功能,如`contains()``indexOf()``isEmpty()`等。我们将借助一个例子来看它们。
......@@ -53,7 +53,7 @@ fun main() {
忍者
Kotlin
## Kotlin列表函数和属性
## Kotlin 列表函数和属性
`List`接口提供的一些重要功能和属性有:
......@@ -128,7 +128,7 @@ fun main() {
列表是否为空:假
从索引 1 到 3 的子列表【今晚学习】
## Kotlin可变列表
## Kotlin 可变列表
使用`MutableList`接口创建可变列表。`MutableList`接口也继承了`Collection`接口。可变列表本质上是动态的。在可变列表声明之后,我们可以在可变列表**中添加或删除元素。因此可变列表的大小不是固定的。**
......@@ -192,7 +192,7 @@ fun main() {
## 摘要
在本教程中,我们学习了不可变和可变列表,它们的创建使用了`listOf()``mutableListOf()`函数以及提供的一些重要函数。在下一个教程中,我们将讨论Kotlin的映射。
在本教程中,我们学习了不可变和可变列表,它们的创建使用了`listOf()``mutableListOf()`函数以及提供的一些重要函数。在下一个教程中,我们将讨论 Kotlin 的映射。
* * *
......
......@@ -2,7 +2,7 @@
> 原文:<https://www.studytonight.com/kotlin/kotlin-map>
在本教程中,我们将讨论Kotlin映射。映射用于存储**键和值对**。键和值都是用户定义的。在映射中:
在本教程中,我们将讨论 Kotlin 映射。映射用于存储**键和值对**。键和值都是用户定义的。在映射中:
* 密钥应该是唯一的,并且每个唯一的密钥只能存储一个值。
......@@ -14,13 +14,13 @@
* 键值对也称为条目。
在Kotlin,我们既可以有一张**可变**映射,也可以有一张**不可变**映射。
Kotlin,我们既可以有一张**可变**映射,也可以有一张**不可变**映射。
## Kotlin不可变映射
## Kotlin 不可变映射
使用`Map<K, V>`接口创建不可变映射。我们只能从不可变的映射中阅读。
Kotlin中,不可变映射是使用`mapOf()``mapOf<K, V>()`函数创建的。与列表类似,`mapOf()`函数用于创建一个通用映射,其中键和值可以是任何数据类型。`mapOf<K, V>()`用于创建一个特定的映射,分别具有 K 和 V 数据类型的键和值。
Kotlin 中,不可变映射是使用`mapOf()``mapOf<K, V>()`函数创建的。与列表类似,`mapOf()`函数用于创建一个通用映射,其中键和值可以是任何数据类型。`mapOf<K, V>()`用于创建一个特定的映射,分别具有 K 和 V 数据类型的键和值。
让我们使用这两个函数创建不可变的映射:
......@@ -58,7 +58,7 @@ fun main() {
键为:数学和值为 97
键为:C++和值为 89
## Kotlin映射的性质和函数
## Kotlin 映射的性质和函数
`Map`接口提供的一些重要功能和属性有:
......@@ -126,7 +126,7 @@ fun main() {
映射是否包含 C++:真
映射是否包含
## Kotlin可变映射
## Kotlin 可变映射
可变映射使用`MutableMap` 接口创建。可变映射支持动态特性。在可变映射声明之后,我们可以在其中添加、删除或更新条目。因此可变映射的大小不是固定的。
......@@ -198,7 +198,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了不可变和可变映射,它们的创建使用了`mapOf()``mutableMapOf()`函数以及提供的一些重要函数。在下一个教程中,我们将讨论Kotlin中的集合。
在本教程中,我们讨论了不可变和可变映射,它们的创建使用了`mapOf()``mutableMapOf()`函数以及提供的一些重要函数。在下一个教程中,我们将讨论 Kotlin 中的集合。
* * *
......
# Kotlin集合
# Kotlin 集合
> 原文:<https://www.studytonight.com/kotlin/kotlin-set>
在本教程中,我们将讨论Kotlin集。集合有:
在本教程中,我们将讨论 Kotlin 集。集合有:
* 元素的无序集合。
* 集合中不允许有重复的元素。
在Kotlin,我们既可以有一个**可变**集,也可以有一个**不可变**集。
Kotlin,我们既可以有一个**可变**集,也可以有一个**不可变**集。
## Kotlin不变集
## Kotlin 不变集
使用`Set`接口创建不可变集。`Set`接口继承了`Collection`接口。
......@@ -47,7 +47,7 @@ fun main() {
再见
A
## Kotlin集的性质和函数
## Kotlin 集的性质和函数
`Set`接口提供的一些重要功能和属性有:
......@@ -128,7 +128,7 @@ Kotlin 的最后一个索引为:0
集合中的元素个数:4
集合中的 Max 元素:
## Kotlin可变集
## Kotlin 可变集
使用`MutableSet`接口创建可变集。`MutableSet`接口也继承了`Collection`接口。可变集合本质上是动态的。我们可以在可变集合声明之后,在可变集合**中添加或移除元素。因此可变集合的大小不是固定的。**
......
# Kotlin杂项
\ No newline at end of file
# Kotlin 杂项
\ No newline at end of file
# Kotlin文件处理
# Kotlin 文件处理
> 原文:<https://www.studytonight.com/kotlin/kotlin-file-handling>
......@@ -39,7 +39,7 @@ fun main() {
我们也可以使用`file.exists()`方法检查文件的存在
## Kotlin写文件
## Kotlin 写文件
我们可以使用`writeText()`方法将数据写入文件。
......@@ -65,7 +65,7 @@ fun main() {
如果我们查看 **Demo.txt** 文件,我们将只能在其中看到*再见世界*。因为`writeText()`会替换文件中存在的所有内容。如果想防止现在的数据丢失,可以用`appendText()`功能代替`writeText()`功能。
## Kotlin从文件中读取
## Kotlin 从文件中读取
对于逐行阅读内容,我们可以使用`forEachLine()`方法。它将从文件中逐行读取数据。
......
# Kotlin空安全
# Kotlin 空安全
> 原文:<https://www.studytonight.com/kotlin/kotlin-null-safety>
在本教程中,我们将讨论Kotlin最重要的特性之一:**空安全。**在编程世界中,当一个变量不引用任何东西时,它被认为是`null`。如果我们尝试使用这个变量,那么我们将得到`NullPointerException`或 NPE。
在本教程中,我们将讨论 Kotlin 最重要的特性之一:**空安全。**在编程世界中,当一个变量不引用任何东西时,它被认为是`null`。如果我们尝试使用这个变量,那么我们将得到`NullPointerException`或 NPE。
让我们看一个 Java 中发生`NullPointerException`的小例子:
......@@ -21,11 +21,11 @@ public class Student {
`NullPointerException` 被认为是一个[十亿美元的错误](https://en.wikipedia.org/wiki/Tony_Hoare#Apologies_and_retractions),因为它导致程序突然终止。由于疏忽,`NullPointerException`可以出现在代码中的任何地方。
Kotlin通过提供一种机制来处理`NullPointerException`来解决这个问题。Kotlin的目标是从我们的整个代码中删除 NPE。让我们讨论一下它的功能。
Kotlin 通过提供一种机制来处理`NullPointerException`来解决这个问题。Kotlin 的目标是从我们的整个代码中删除 NPE。让我们讨论一下它的功能。
## 可空和非空引用
Kotlin中,类型系统区分两种类型的引用:
Kotlin 中,类型系统区分两种类型的引用:
1. **可空引用:**这些引用可以保存空值。
......@@ -177,7 +177,7 @@ fun main() {
## 摘要
在本教程中,我们讨论了 Kotlin 中的 Null 安全性。空安全是 Kotlin 的一个重要特性,它将我们从空指针异常中拯救出来。在下一个教程中,我们将讨论Kotlin中的正则表达式。
在本教程中,我们讨论了 Kotlin 中的 Null 安全性。空安全是 Kotlin 的一个重要特性,它将我们从空指针异常中拯救出来。在下一个教程中,我们将讨论 Kotlin 中的正则表达式。
* * *
......
# Kotlin正则表达式
# Kotlin 正则表达式
> 原文:<https://www.studytonight.com/kotlin/kotlin-regular-expression>
在本教程中,我们将讨论Kotlin中的正则表达式。正则表达式是用来定义模式的字符序列。这种模式也被称为正则表达式。
在本教程中,我们将讨论 Kotlin 中的正则表达式。正则表达式是用来定义模式的字符序列。这种模式也被称为正则表达式。
正则表达式可以用于很多事情,比如字符串中的模式匹配,字符串中的查找和替换等等。在 Kotlin 中,`Regex`类用于创建和管理正则表达式。
......
# Kotlin运算符重载
# Kotlin 运算符重载
> 原文:<https://www.studytonight.com/kotlin/kotlin-operator-overloading>
在本教程中,我们将学习Kotlin**运算符重载**。我们使用的每个操作符,如`+``-``++`等,都转化为一个功能。例如,以下算术函数转换为:
在本教程中,我们将学习 Kotlin **运算符重载**。我们使用的每个操作符,如`+``-``++`等,都转化为一个功能。例如,以下算术函数转换为:
| 操作员 | 表示 | 基础函数 |
| --- | --- | --- |
......@@ -13,7 +13,7 @@
此外,对于不同的数据类型,所有这些函数也可能被重载。例如,`plus()`函数为`Int`类型添加两个数字,为`String`类型连接两个字符串。
## Kotlin运算符重载
## Kotlin 运算符重载
运算符重载可以通过重载该运算符的基础函数来实现。意思是过载`+`操作符,我们要过载`plus()`功能。
......@@ -48,7 +48,7 @@ fun main() {
* [釜底医生](https://kotlinlang.org/docs/reference/)
* [科顿医生 PDF](https://kotlinlang.org/docs/kotlin-docs.pdf)
* [Kotlin手控](https://play.kotlinlang.org/koans/overview)
* [Kotlin 手控](https://play.kotlinlang.org/koans/overview)
* * *
......
# Cordova:什么是Apache Cordova?
# Cordova:什么是 Apache Cordova?
> 原文:<https://www.studytonight.com/apache-cordova/overview-of-apache-cordova>
......@@ -9,7 +9,7 @@
![Introduction to Cordova](img/b11f618a26a75e82055c2eb182d0a48d.png)
以下是可以使用Cordova开发应用的平台:
以下是可以使用 Cordova 开发应用的平台:
* 机器人
* ios
......@@ -23,7 +23,7 @@
* * *
## Cordova建筑
## Cordova 建筑
Cordova 为我们提供了可用于访问和激发原生移动操作系统功能的 API,如**地理定位****加速度计****摄像头****存储****通知**等。
......@@ -33,11 +33,11 @@ Cordova 为我们提供了可用于访问和激发原生移动操作系统功能
Cordova,让我们创建一个应用,其中我们的网络应用在**网络视图(HTML 渲染引擎)**中初始化。
**Cordova插件**是可用于利用本机操作系统功能的组件。
**Cordova 插件**是可用于利用本机操作系统功能的组件。
* * *
### ApacheCordova的优势
### ApacheCordova 的优势
以下是使用 Apache Cordova 开发应用的一些主要优势:
......
......@@ -11,11 +11,11 @@
* * *
## CLI 在Cordova扮演什么角色?
## CLI 在 Cordova 扮演什么角色?
* Cordova 完全依赖于 CLI,因此没有它,我们无法执行单个进程。
* 它被使用,
1. 创建一个Cordova项目。
1. 创建一个 Cordova 项目。
2. 添加我们想要开发应用的平台。
3. 添加插件。
4. 去创造 APK。
......
......@@ -6,7 +6,7 @@
1. NodeJS(节点名称)
2. Cordova CLI
3. Apache人 Ant
3. Apache 人 Ant
4. 安卓 SDK
5. Java JDK
......@@ -24,7 +24,7 @@ cordova 命令行界面用于*创建*、*构建*、*部署*、*管理基于 cord
* * *
### Apache人 Ant
### Apache 人 Ant
它的主要目标是构建一个 Java 应用。这是一个 JavaScript 库,也是使用命令行运行的。或者你可以说它是一个构建工具。使用 Ant,我们可以创建 **Ant 构建文件**,其中包含如何编译、组装、测试和运行特定 Java 应用的所有细节。
......@@ -40,7 +40,7 @@ cordova 命令行界面用于*创建*、*构建*、*部署*、*管理基于 cord
用于开发 Java 应用的是 **Java 开发工具包(JDK)** 。再次非常重要。
在这个快速教程中,我们将使用Cordova开发一个安卓应用,因此,上面提到的工具。在下一个教程中,我们将学习如何在您的计算机/笔记本电脑上设置所有这些工具。
在这个快速教程中,我们将使用 Cordova 开发一个安卓应用,因此,上面提到的工具。在下一个教程中,我们将学习如何在您的计算机/笔记本电脑上设置所有这些工具。
* * *
......
......@@ -28,7 +28,7 @@
* * *
## 安装Cordova
## 安装 Cordova
**cmd****节点 cmd** 中键入`npm install -g cordova`。安装完成后,通过输入`cordova -v`进行检查。
......@@ -128,11 +128,11 @@ bin 的位置将是 user/[system _ name]/Apache _ ant _ x . y . z/bin(x . y . z
* * *
## 安卓SDK安装
## 安卓 SDK 安装
跟随这个链接:[https://dl.google.com/android/installer_r24.4.1-windows.exe](https://dl.google.com/android/installer_r24.4.1-windows.exe)
安装后,查找安装安卓SDK和平台工具的目录。在我的电脑中,它安装在, **C:\Users\[system_name]\**
安装后,查找安装安卓 SDK 和平台工具的目录。在我的电脑中,它安装在, **C:\Users\[system_name]\**
![Tools Installation](img/8503260cb4251fc8823171ba0bf79249.png)
......@@ -156,7 +156,7 @@ bin 的位置将是 user/[system _ name]/Apache _ ant _ x . y . z/bin(x . y . z
![Tools Installation](img/d15cc3b1ad0536802103fbe64e6de8cc.png)
在新窗口中,勾选(勾选)`CheckBox`,仅下载安卓SDK工具、安卓SDK平台工具、工具面板中的SDK构建工具以及下载SDK平台等。
在新窗口中,勾选(勾选)`CheckBox`,仅下载安卓 SDK 工具、安卓 SDK 平台工具、工具面板中的 SDK 构建工具以及下载 SDK 平台等。
从下一课开始,我们将从应用的开发开始。
......
# 在你的应用中使用Cordova插件
# 在你的应用中使用 Cordova 插件
> 原文:<https://www.studytonight.com/apache-cordova/plugin-integration>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册