Jetpack Compose系列(1)-初识Jetpck

Jetpack Compose是什么

2019年的I/O大会上,Google宣布Kotlin成为Android开发首选语言(这次不是第一次说了),且后续会有新的Jetpack API和功能将在Kotlin中提供,并同时开源Jetpack Compose。

简介

Jetpack是一套库、工具和指南,目的是为了帮助开发者更轻松的编写优质应用,与Kotlin一起提高开发者工作效率。Jetpack Compose是用于构建原生Android UI的现代工具包。使用更少的代码,强大的工具和直观的Kotlin API,简化并加速了Android上的UI开发。这是Android Developers 官网对它的描述。 值得一提的是,Jetpack Compose和苹果的SwiftIUI一样是一个声明式的UI框架。

为什么

Android中的原生UI工具包的使用历史可追溯到至少10年前。自那时以来,我们使用的设备,用户的期望,以及开发人员对他们所使用的开发工具、开发语言的期望等客观环境都发生了很大变化。另外一个重要原因是view.java这个类实在过大,包含3000+行代码,致使你甚至无法在Github上查看该文件,更可怕的是,我们所使用的几个每一个UI组件都需要继承自View。

Google的Android团队的Anna-Chiara表示,他们对已经实现的一些API感到遗憾,因为他们也无法在不破坏功能的情况下收回、修复或者扩展这些API,因此现在是一个全新起点的好时机。

分类

Architecture(架构组件)可帮助您设计稳健、可测试且易维护的应用:

  1. Data Binding: 是一种支持库,借助该库,可以以声明方式将可观察数据绑定到界面元素。

  2. Lifecycles: 管理Activity 和 Fragment的生命周期,能够帮助开发者轻松的应对Activity/Fragment的生命周期变化问题,帮助开发者生成更易于维护的轻量级代码。

  3. LiveData: 在底层数据库更改时通知视图,是可观察的数据持有者类。与常规的可观察对象不同,LiveData具有生命周期感知功能(例如Activity,Fragment或Service的生命周期)。

4.Navigation: 处理应用内导航所需的一切。

  1. Paging: 逐步从您的数据源按需加载信息,帮助开发者一次加载和显示小块数据。按需加载部分数据可减少网络带宽和系统资源的使用。

  2. Room: 流畅地访问 SQLite 数据库。在SQLite上提供了一个抽象层,以在利用SQLite的全部功能的同时允许更健壮的数据库访问。

  3. ViewModel: 以注重生命周期的方式管理界面相关的数据。ViewModel类允许数据幸免于配置更改(例如屏幕旋转)。通常和DataBinding配合使用,为开发者实现MVVM架构提供了强有力的支持。

  4. WorkManager: 管理 Android 的后台作业,即使应用程序退出或设备重新启动,也可以轻松地调度预期将要运行的可延迟异步任务。

Foundation(基础组件)可提供横向功能,例如向后兼容性、测试和 Kotlin 语言支持:

  1. Android KTX: 编写更简洁、惯用的 Kotlin 代码,是一组Kotlin扩展程序。优化了供Kotlin使用的Jetpack和Android平台API。旨在让开发者利用 Kotlin 语言功能(例如扩展函数/属性、lambda、命名参数和参数默认值),以更简洁、更愉悦、更惯用的方式使用 Kotlin 进行 Android 开发。Android KTX 不会向现有的 Android API 添加任何新功能。

  2. AppCompat: 帮助较低版本的Android系统进行兼容。

  3. Auto: 有助于开发 Android Auto 应用的组件。是 Google推出的专为汽车所设计之 Android 功能,旨在取代汽车制造商之原生车载系统来执行 Android应用与服务并访问与存取Android手机内容。

  4. Benchmark: 从 Android Studio 中快速检测基于 Kotlin 或 Java 的代码。

  5. Multidex: 为具有多个 DEX 文件的应用提供支持。

  6. Security: 按照安全最佳做法读写加密文件和共享偏好设置。

  7. Test: 用于单元和运行时界面测试的 Android 测试框架。

  8. TV: 有助于开发 Android TV 应用的组件。

  9. Wear OS by Google: 有助于开发 Wear 应用的组件。

Behavior(行为组件)可帮助您的应用与标准 Android 服务(如通知、权限、分享和 Google 助理)相集成:

  1. CameraX: 简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。

  2. DownloadManager: 是一项系统服务,可处理长时间运行的HTTP下载。客户端可以请求将URI下载到特定的目标文件。下载管理器将在后台进行下载,处理HTTP交互,并在出现故障或在连接更改和系统重新启动后重试下载。

  3. Media & playback: 用于媒体播放和路由(包括 Google Cast)的向后兼容 API。

  4. Notifications: 提供向后兼容的通知 API,支持 Wear 和 Auto。

  5. Permissions: 用于检查和请求应用权限的兼容性 API。

  6. Preferences: 创建交互式设置屏幕,建议使用 AndroidX Preference Library 将用户可配置设置集成至应用中。

  7. Sharing: 提供适合应用操作栏的共享操作。

  8. Slices: 是UI模板,可以通过启用全屏应用程序之外的互动来帮助用户更快地执行任务,即可以创建在应用外部显示应用数据的灵活界面。

UI(界面组件)可提供微件和辅助程序,让您的应用不仅简单易用,还能带来愉悦体验。了解有助于简化界面开发的Jetpack Compose。

  1. Animation & transitions: 使开发者可以轻松地为两个视图层次结构之间的变化设置动画。该框架通过随时间更改其某些属性值在运行时为视图设置动画。该框架包括用于常见效果的内置动画,并允许开发者创建自定义动画和过渡生命周期回调。

  2. Emoji: 使Android设备保持最新的最新emoji表情,开发者的应用程序用户无需等待Android OS更新即可获取最新的表情符号。

  3. Fragment: Activity的模块化组成部分。

  4. Layout: 定义应用中的界面结构。可以在xml中声明界面元素,也可以在运行时实例化布局元素。

  5. Palette: 是一个支持库,可从图像中提取突出的颜色,以帮助开发者创建视觉上引人入胜的应用程序。开发者可以使用调色板库设计布局主题,并将自定义颜色应用于应用程序中的视觉元素。

应用架构

image.gif

环境准备和 Hello Android

要想获得Jetpack Compose 的最佳体验,我们最好下载最新版本的Android Studio 最少也要Android Studio 4.0以上(最好是用Bumblebee及以上版本),这个版本开始添加了对Jetpack Compose 的支持,如新的Compose 模版和Compose 及时预览)。

image.gif

创建一个支持Jetpack Compose的新应用

创建一个支持Jetpack Compose 的新项目十分简单,跟常规的创建羡慕步骤一致,需要注意的是在Select a Project Template 窗口时,选择Empty Compose Activity。

image.gif
然后Next -> Finish即可,需要注意的是Minimum API level 中最低只能是21(最低版本只兼容到21),语言只能选定Kotlin。

image.gif
Jetpack Compose 只能用Kotlin来写的代码才能运行起来,这点没得选。

最后点击Finish后,经过短时间的初始化,我们就进入到创建好的工程中,看到系统自动生成的代码:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApplicationTheme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {Greeting("Android")}}}}
}@Composable
fun Greeting(name: String) {Text(text = "Hello $name!")
}@Preview(showBackground = true)
@Composable
fun DefaultPreview() {MyApplicationTheme {Greeting("Android")}
}

onCreate()中的方法明显和Java版本默认生成的不大一样,这些放到后面讲。

image.gif
运行后即可看到,Hello Android!

让现有项目支持 Jetpack Compose

当然,要用到Jetpack Compose不一定需要重新另起工程,想要在现有项目中支持Jetpack Compose的话,只需要配置一些必备的设置和依赖:

1、修改gradle

2、将app目录下的build.gradle文件中的app支持的最低API 版本设置为21或更高,同时设置Jetpack Compose enable开启,添加工具包依赖。

android {defaultConfig {...minSdkVersion 21}buildFeatures {// 设置compose开关为truecompose true}...// 设置java编译版本为8.0(这点是必须不可更改).compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = "1.8"}dependencies {// You also need to include the following Compose toolkit dependencies.implementation 'androidx.ui:ui-tooling:0.1.0-dev02'implementation 'androidx.ui:ui-layout:0.1.0-dev02'implementation 'androidx.ui:ui-material:0.1.0-dev02'...
}}

3、引入Kotlin-Gradle 插件

Jetpack Compose 需要Kotlin-Gradle插件,使用需要在根目录下的build.gradle添加如下:

buildscript {repositories {google()jcenter()maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }  //add thisdependencies {classpath 'com.android.tools.build:gradle:4.0.0-alpha01'classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.60-eap-25'}... ...}allprojects {repositories {google()jcenter()maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }    //add this}}
}

这时将整个工程rebuild下,我们就可以开始进行Jetpack Compose的学习了。

一些可能会碰到的坑

1、Mac上更新最新版本AS后打开模拟器,无反应,再次点击会提示如此错误:

image.gif
按提示来,找到对应目录文件删掉然后重启就行。如果你就这样去Mac上找这个目录可能找不到,因为部分是隐藏目录,对应的你只需要去用户目录下按Command + Shift +句点(CMD + Shift +。)快捷键即可看到隐藏目录和文件。

image.gif
后续你删掉对应文件并重启AS成功打开模拟器后,程序发布时可能会提示以下报错:

An exception occurred applying plugin request [id: 'com.android.application']> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.

这是因为AGP 7.0.0-alpha02起需要使用Java 11(https://developers-jp.googleblog.com/2020/12/announcing-android-gradle-plugin.html)
当Java版本不正确时,Gradle的sync阶段就会爆出上述错误,这里需要注意gradle的Java版本并非AS上这个工程依赖的Java版本。

对应解决策略是打开AS中对应的选项,AndroidStudio -> Preferences -> Gradle中进行设置Java版本Version为11。

image.gif
然后依次Download -> Apply -> OK 。等程序重新build结束,即可顺利发布。

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

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

相关文章

AJAX-URL查询参数

定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据 http://xxxx.com/xxx/xxx?参数名1值1&参数名2值2 axios语法 使用axios提供的params选项 注意:axios在运行时把参数名和值,会拼接到url?参数名值 axios(…

C++学习Day01之C++对C语言增强和扩展

目录 一、程序及输出1.1 全局变量检测增强1.2 函数检测增强1.3 类型转换检测增强1.4 struct增强1.5 bool类型扩展1.6 三目运算符增强1.7 const增强1.7.1 全局Const对比1.7.2 局部Const对比1.7.3 Const变量初始化数组1.7.3 Const修饰变量的链接性 二、分析总结 一、程序及输出 …

【Java开发岗面试】八股文—微服务、消息中间件

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

【自然语言处理】P2 PyTorch 基础 - 张量

目录 安装 PyTorch张量创建张量操作张量索引、切片、联合操作 CUDA张量 本系列博文我们将使用 PyTorch 来实现深度学习模型等。PyTorch 是一个开源的、社区驱动的深度学习框架。拥有强大的工具和库生态系统,包含 TorchVision(用于图像处理)、…

面试经典150题 -- 哈希表(总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 383 . 赎金信 用哈希表模拟 ; 用两个长为26的整数数组模拟哈希表,分别统计r和m中的频次,如果在m中字符出现的都比r中的小,那么m一…

日志记录——单片机可执行文件合并

一:需求场景 现在有一片单片机,执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产是有以下问题,由于要通过jlink烧录boot,然后上电启动boot,通过boot烧录初始化程序,过程过于复杂&#xff0…

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …

消息总线在微服务中的应用

直连式配置中心 上一篇文章介绍了 Spring Cloud 中的分布式配置组件 Config,每个服务节点可以从Config Server 拉取外部配置信息。但是似乎还有一个悬而未决的问题,那就是当服务节点数量非常庞大的时候,我们不可能一台一台服务器挨个去手工触…

Linux系统编程:进程

目录 相关指令 ps指令 top指令 相关函数及其示例 getpid() getpid()示例: fork() 示例: 示例2:fork()返回值 Fathers pid is 14532.This is FartherProcess, pid is 14532.This is SonProcess, pid is 14533. vfork() 示例&am…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 上传到虚拟机中后,使用命令加载镜像即可: docker load -i mq.ta…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps:如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是,紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中,很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心,每个簇一个,并将…

webstorm、vscode、HBuilder配置eslint检查

你们好,我是金金金。 场景 每个人写的代码都有自己所属的风格,所以项目中统一代码风格特别重要,新开的项目中如何快速配置ESLint呢? 安装 npm install --save-dev eslint ----安装eslintnpm install --save-dev eslint-plugin-vu…

事件分发机制:从OnTouchListener开始,按钮变色的Demo

要彻底弄清楚事件分发机制,先要明白OnTouchListener的作用。 我们看下Android 1.6上,OnTouchListener的代码定义,源码在线地址:Android 1.6 sdk4 View.java 可以看到,OnTouchListener就是View类中的一个public接口&am…

django+flask警务案件信息管理系统python-5dg53-vue

1)用户在后台页面各种操作可及时得到反馈。 (2)该平台是提供给多个用户使用的平台,警员使用之前需要注册登录。登录验证后,警员才可进行各种操作[10]。 (3)管理员用户拥有信息新增,修…

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 4. git merge合并查看差异 前言 主要总结工作中的疑惑点,如果你也有相应的场景&am…

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 Sp…

部署实战--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive ( Java 档案文件),它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能,不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注:在虚拟环境里面,通过在一台虚拟服务器上面安装FR…