开启Android学习之旅-1

最近在学习《第一行代码 Android》,两天看书把所有代码都敲了一遍。由于之前没有接触过 Kotlin,导致了囫囵吞枣,跟着书会敲,离开就忘了。Android 大佬开发的各种框架、控件好像大部分都用了 Kotlin。看他们的源码,理解起来很困难。所以好记性不如烂笔头,还是得整理笔记,形成全局思维,才能解决开发项目中出的各种问题。

Android 开发思维导图

Kotlin

Android 开发最麻烦的一件事就是版本问题,基本上打开第三方项目,很难一键运行起来,在此记录下配置,方便后续迷糊的时候翻看。

开发环境

  • IDE: Android Studio Flamingo | 2022.2.1 Patch 1
  • Android Gradle Plugin Version 8.0.1
  • Gradle Version 8.0
  • JDK 17
  • compileSdk 33
  • targetSdk 33
  • minSdk 24

第一章总结

1. Android 四大组件

+ Activity, Service, BroadcastReceiver, ContentProvider

2. 开发环境搭建

这里由于某些原因,需要配置国内源
settings.gradle(project)中添加:

pluginManagement {repositories {google()mavenCentral()gradlePluginPortal()}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/jcenter' }maven {url "https://maven.aliyun.com/repository/public"}maven {url 'https://developer.huawei.com/repo/'}maven { url "https://jitpack.io" }google()mavenCentral()}
}
rootProject.name = "LoginDemo"
include ':app'

3. 创建项目

在 Android Studio 2022(Flamingo),创建项目时,如果使用“Empty Activity”,会给你加 compose 类的东西,没怎么用过,只能使用“No Activity”,之后再手动添加 Activity。
HelloWorld项目目录

项目结构

  1. .gradle 和 .idea

.gradle 和 .idea 是 Android Studio 创建的项目中的两个隐藏文件夹,它们的作用如下:
.gradle 文件夹:这个文件夹是 Gradle 构建系统的一部分,用于存储与 Gradle 构建相关的临时文件。这包括构建脚本的缓存、下载的依赖项的缓存、构建的临时文件等。这个文件夹的内容通常不需要手动管理,Gradle 会自动处理。
.idea 文件夹:这个文件夹是 IntelliJ IDEA(Android Studio 的基础)的项目配置文件夹。它包含了许多与项目设置、模块、代码样式、版本控制等相关的配置文件。这个文件夹的内容通常也不需要手动管理,Android Studio 会自动处理。
这两个文件夹通常不会被包含在版本控制系统中,因为它们包含的是特定于本地环境的信息.

  1. app

app:这是项目的主模块目录,它包含了应用程序的源代码、资源文件、构建脚本等。

  1. gradle

gradle:这个目录包含了 Gradle Wrapper 的 JAR 文件和属性文件。

Gradle Wrapper 是一个独立的小型程序,它可以自动下载和安装正确版本的 Gradle。

  1. .gitignore

.gitignore:这个文件是 Git 版本控制系统的配置文件,它定义了哪些文件或目录不应被添加到 Git 仓库中。

  1. build.gradle

这个文件定义了对所有模块都有效的构建配置,例如 Gradle 插件版本、仓库地址等。此外,它还可以定义一些在所有模块中共享的变量。

  1. gradle.properties

gradle.properties:这个文件是 Gradle 的配置文件,它可以包含一些用于配置 Gradle 构建环境的属性。

  1. gradlew 和 gradlew.bat

gradlew 和 gradlew.bat:这两个文件是 Gradle Wrapper 的脚本,分别用于 Unix/Linux 和 Windows 系统。通过这些脚本,你可以在没有安装 Gradle 的情况下运行 Gradle 构建。

  1. local.properties

local.properties:这个文件包含了本地环境特定的设置,如 Android SDK 的路径。这个文件通常不应被添加到版本控制系统中。

  1. settings.gradle

settings.gradle:这个文件定义了哪些模块应该被包含在构建中。在一个多模块的项目中,每个模块都应该在这个文件中被声明

app 模块结构

在这里插入图片描述

  1. build
    app 模块编译时自动生成的文件
  2. libs
    第三方jar包,放在这个目录下的jar包会被自动添加到项目的构建路径里
  3. src/androidTest
    编写测试用例
  4. src/java
    主战场,都是在这写代码
  5. res
    资源目录包括布局、主题、图片、字符串等。
  6. AndroidManifest.xml
    整个Android项目的配置文件。在这可以添加权限声明、四大组件注册等。
  7. test
    用来编写 Unit Test测试用例。
  8. gitignore
    git 版本控制忽略的文件配置
  9. build.gradle
    app 模块的gradle构建脚本
  10. proguard-rules.pro
    配置项目代码的混淆规则

res目录结构

在 Android 项目中,res 目录是用于存放所有的资源文件,包括图片、布局文件、字符串、样式等。以下是 res 目录下的一些常见子目录及其作用:

  • drawable:这个目录用于存放图片资源,如 PNG、JPG、SVG 或 XML 定义的形状等。
  • layout:这个目录用于存放 XML 布局文件,这些文件定义了应用程序的用户界面。
  • values:这个目录用于存放 XML 文件,这些文件包含了一些简单的值,如字符串、颜色、尺寸、样式等。
  • mipmap:这个目录用于存放应用程序的启动图标。这些图标会在不同的设备上显示不同的分辨率。
  • menu:这个目录用于存放 XML 文件,这些文件定义了应用程序的菜单,如顶部工具栏的菜单或者上下文菜单。
  • raw:这个目录用于存放一些原始文件,如音频或视频文件。
  • xml:这个目录用于存放一些其他的 XML 配置文件,如网络安全配置文件。
  • anim:这个目录用于存放定义动画效果的 XML 文件。

日志工具

const val TAG:String = "MainActivity"
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 日志工具Log.v(TAG,"MainActivity 执行 onCreate 方法")Log.i(TAG,"MainActivity 执行 onCreate 方法")Log.d(TAG,"MainActivity 执行 onCreate 方法")Log.w(TAG,"MainActivity 执行 onCreate 方法")Log.e(TAG,"MainActivity 执行 onCreate 方法")}
}

ai 辅助解惑

android 项目 app/src/androidTest 与test区别?

app/src/androidTest 和 app/src/test 是 Android 项目中的两个目录,它们分别用于存放 Android Instrumented 测试和单元测试的代码。

app/src/androidTest:这个目录用于存放 Android Instrumented 测试的代码。这些测试运行在 Android 设备或模拟器上,它们可以访问 Android 系统服务,可以测试 Android 的用户界面交互,也可以测试与 Android 系统交互的代码。由于这些测试需要 Android 环境,所以运行它们需要启动 Android 设备或模拟器。

app/src/test:这个目录用于存放单元测试的代码。这些测试运行在 JVM 上,不需要 Android 环境。它们通常用于测试不依赖 Android 系统的代码,例如你的业务逻辑、数据处理等。由于这些测试不需要 Android 环境,所以运行它们不需要启动 Android 设备或模拟器,速度通常会比 Android Instrumented 测试快。
这就是 app/src/androidTest 和 app/src/test 的主要区别。

gradle 8.0 中 pluginManagement 中的 repositories 与 dependencyResolutionManagement 中的 repositories 有什么区别?

pluginManagement 和 dependencyResolutionManagement 都是 Gradle 的配置块,它们的 repositories 配置块用于指定仓库源,但是它们的作用范围和用途有所不同。
pluginManagement 中的 repositories 是用来配置 Gradle 插件的仓库源。当你在 plugins 块中使用插件时,Gradle 会从这些仓库中查找和下载插件。这个配置对所有的项目(包括子项目)都有效。
dependencyResolutionManagement 中的 repositories 是用来配置项目依赖的仓库源。当你在 dependencies 块中声明依赖时,Gradle 会从这些仓库中查找和下载依赖。这个配置在 Gradle 7.0 中引入,用于统一管理多项目构建中的仓库配置,避免在每个子项目中重复配置仓库。
总的来说,pluginManagement 中的 repositories 用于管理插件的仓库,而 dependencyResolutionManagement 中的 repositories 用于管理依赖的仓库。

Gradle 8.0 相比于 Gradle 7.0 在 settings.gradle 文件中的主要变化主要体现在以下几个方面:

  1. 引入了 dependencyResolutionManagement 配置块:这是一个新的配置块,用于统一管理多项目构建中的仓库配置,避免在每个子项目中重复配置仓库。在这个配置块中,你可以设置 repositories 来指定项目依赖的仓库源,Gradle 会从这些仓库中查找和下载依赖。
  2. 引入了 repositoriesMode 配置:这是一个新的配置项,用于控制项目仓库的行为。它有两个可选值:RepositoriesMode.FAIL_ON_PROJECT_REPOS 和 RepositoriesMode.PREFER_PROJECT. 前者表示如果在项目中发现了仓库配置,那么构建将会失败;后者表示如果在项目中发现了仓库配置,那么这些仓库将会被添加到解析依赖时使用的仓库列表中。
  3. pluginManagement 配置块的行为没有变化:这个配置块用于配置 Gradle 插件的仓库源。当你在 plugins 块中使用插件时,Gradle 会从这些仓库中查找和下载插件。这个配置对所有的项目(包括子项目)都有效。
    以上就是 Gradle 8.0 相比于 Gradle 7.0 在 settings.gradle 文件中的主要变化。

build.gradle(project)

  • com.android.application: 这是 Android 应用程序的主要插件,它提供了用于构建 Android 应用程序的所有必要功能:编译代码、打包资源、签名 APK 等。
  • com.android.library:这个插件用于构建 Android 库。与 com.android.application 插件不同,他不会生成 APK,而是生成 AAR 文件,这是一个包含编译的代码和资源的库文件,可以在其他 Android 项目中使用。
  • org.jetbrains.kotlin.android:用于支持 Kotlin 语言在 Android 项目中使用。它提供了 Kotlin 语言特性的支持,包括编译 Kotlin 代码、Kotlin语言的特性支持等。

gradle 8.0 与 gradle 5.4.1 build.gradle(project) 区别

Gradle 8.0 和 5.4.1 版本的 build.gradle 文件之间的主要区别在于插件和依赖项的管理方式,以及一些新的配置选项。
在 Gradle 5.4.1 的 build.gradle 文件中,插件和依赖项是在 buildscript 和 allprojects 块中定义的。buildscript 块用于配置构建脚本自身需要的类路径,allprojects 块用于配置所有项目的仓库和依赖项。
在 Gradle 8.0 的 build.gradle 文件中,插件是在 plugins 块中定义的,这是一种更简洁的方式,可以直接指定插件的 ID 和版本。此外,Gradle 8.0 还引入了 dependencyResolutionManagement 块,用于统一管理所有项目的仓库和依赖项解析。
以下是两者的主要区别:

  1. 插件管理:在 Gradle 8.0 中,插件是在 plugins 块中定义的,而在 Gradle 5.4.1 中,插件是在 buildscript 块中定义的。
  2. 仓库管理:在 Gradle 8.0 中,仓库是在 dependencyResolutionManagement 块中定义的,而在 Gradle 5.4.1 中,仓库是在 allprojects 块中定义的。
  3. 依赖项解析:Gradle 8.0 引入了 dependencyResolutionManagement 块,用于统一管理所有项目的依赖项解析。
  4. Kotlin 插件版本:在 Gradle 5.4.1 的 build.gradle 文件中,Kotlin 插件的版本是在 buildscript 块中定义的,而在 Gradle 8.0 的 build.gradle 文件中,Kotlin 插件的版本是在 plugins 块中定义的。
  5. 清理任务:在 Gradle 5.4.1 的 build.gradle 文件中,定义了一个 clean 任务,用于删除项目的构建目录。在 Gradle 8.0 的 build.gradle 文件中,没有定义这个任务,因为 Gradle 默认提供了这个任务。

Android Studio、Gradle、JDK、Andrroid Gradle Plugin版本问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】7.LeetCode——合并两个有序链表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…

【issue-YOLO】自定义数据集训练YOLO-v7 Segmentation

1. 拉取代码创建环境 执行nvidia-smi验证cuda环境是否可用;拉取官方代码; clone官方代码仓库 git clone https://github.com/WongKinYiu/yolov7;从main分支切换到u7分支 cd yolov7 && git checkout 44f30af0daccb1a3baecc5d80eae229…

C++——日期类

前言:哈喽小伙伴们,在上一篇文章中我们对C类与对象的前半段知识进行了简单的分享,其中比较重要的莫过于C类的六个默认成员函数。 所以这篇文章,我们通过实现一个完整的日期的操作,来对这些成员函数有一个更加深入的理…

RabbitMQ-高级篇

服务异步通信-高级篇 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送…

Android 高德地图切换图层

一、默认样式 Android 地图 SDK 提供了几种预置的地图图层&#xff0c;包括卫星图、白昼地图&#xff08;即最常见的黄白色地图&#xff09;、夜景地图、导航地图、路况图层。 findViewById<TextView>(R.id.normal).setOnClickListener {updateSelectedStatus(TYPE_NORMA…

Glide完全解读

一&#xff0c;概述 glide作为android流行的图片加载框架&#xff0c;笔者认为有必要对此完全解读。glide提供了三级缓存、生命周期Destroy后自动移除缓存、自动适配ImageView&#xff0c;以及提供了各种对图片修饰的操作&#xff0c;如剪裁等。本文通过最简单的使用&#xff…

Vue(二十):ElementUI 扩展实现表格组件的拖拽行

效果 源码 注意&#xff1a; 表格组件必须添加 row-key 属性&#xff0c;用来优化表格的渲染 <template><el-row :gutter"10"><el-col :span"12"><el-card class"card"><el-scrollbar><span>注意: 表格组件…

自动化测试再升级,大模型与软件测试相结合

近年来&#xff0c;软件行业一直在迅速发展&#xff0c;为了保证软件质量和提高效率&#xff0c;软件测试领域也在不断演进。如今&#xff0c;大模型技术的崛起为软件测试带来了前所未有的智能化浪潮。 软件测试一直是确保软件质量的关键环节&#xff0c;但传统的手动测试方法存…

编写交互式 Shell 脚本

在日常的系统管理和自动化任务中&#xff0c;使用 Shell 脚本可以为我们节省大量时间和精力。 文章将以输入 IP 为例&#xff0c;通过几个版本逐步完善一个案例。 原始需求 编写一个交互式的 Shell 脚本&#xff0c;运行时让用户可以输入IP地址&#xff0c;并且脚本会将输入…

国辰智企TMS定制化模块,实现智慧园区的全面管理

智慧园区综合管理系统是一种针对园区业务场景的高度定制化解决方案&#xff0c;通过选择性部署相应的模块&#xff0c;实现对园区各方面业务的全面管理。通常情况下&#xff0c;园区都需要有效地管理资产、确保安全&#xff0c;以及进行访客预约。这一全面性的系统通过各个模块…

windows 谷歌浏览器Chrome 怎么禁止更新

1.首先把任务管理器里的谷歌浏览器程序结束&#xff1a; &#xff08;鼠标在任务栏右击&#xff0c;出现任务管理器&#xff09; 2.windowr&#xff0c;输入services.msc 带有Google Update的服务&#xff0c;选择禁用。 3.windowr&#xff0c;输入taskschd.msc 任务计划程序…

二叉搜索树,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码补充说明&#xff1a; 代码实现(中序遍历)&#xff1a; 题目地址&#xff1a; 98. 验证二叉搜索树 - 力扣&#xff08;LeetCod…

delete、truncate和drop区别

一、从执行速度上来说 drop > truncate >> DELETE 二、从原理上讲 1、DELETE DELETE from TABLE_NAME where xxx1.1、DELETE属于数据库DML操作语言&#xff0c;只删除数据不删除表的结构&#xff0c;会走事务&#xff0c;执行时会触发trigger&#xff08; 触发器…

8. 字符串转换整数 (atoi)-LeetCode(Java)

8. 字符串转换整数 (atoi) 题目&#xff1a;8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入…

AI大语言模型学习笔记之三:协同深度学习的黑魔法 - GPU与Transformer模型

Transformer模型的崛起标志着人类在自然语言处理&#xff08;NLP&#xff09;和其他序列建模任务中取得了显著的突破性进展&#xff0c;而这一成就离不开GPU&#xff08;图形处理单元&#xff09;在深度学习中的高效率协同计算和处理。 Transformer模型是由Vaswani等人在2017年…

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测

2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 2024美赛预测算法 | 回归预测 | Matlab基于WOA-LSSVM鲸鱼算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果…

Git 指令

Git 安装 操作 命令行 简介&#xff1a; Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion …

2024PMP考试新考纲-【业务环境领域】典型真题和很详细解析(2)

华研荟继续分享【业务环境Business Environment领域】在新考纲下的真题&#xff0c;帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识&#xff08;经验&#xff09;来解题&#xff0c;并且举一反三&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新…

准确率90%+!大模型会话洞察平台来了

随着客户行为和需求加速改变&#xff0c;企业与客户在数字渠道沟通并交易的比重大幅提升。企业通过在线客服、社交媒体、短信、语音助手等数字化渠道与客户建立联系的方式&#xff0c;不仅拓宽了沟通途径&#xff0c;更显著提高了服务效率和质量。 与此同时&#xff0c;数字化…

POSIX(包含程序的可移植性) -- 详解

1. 什么是 POSIX 参考链接–知乎 POSIX 标准包含了进程管理、文件管理、网络通信、线程和同步、信号处理等方面的功能。 这些接口定义了函数、数据类型和常量等&#xff0c;为开发者提供了一个可移植的方法来与操作系统进行交互。 2. 谁遵守这个标准 遵守 POSIX 标准的主要是…