/ 媒介 /

过完恋人节后,各人能否为将来起头斗争了呢?今天小编更新两个安卓开发岗位,话说如今Kotlin那么火了吗?安卓开发都在利用Kotlin开发。

用Kotlin停止跨平台开发,看那一篇就够了  第1张

近些年,不论是最后的RN仍是到如今的Flutter、Compose,他们都在做着一件事——跨平台。

他们的成就次要都是在UI上跨平台,当然Flutter固然能够处置一些公共的营业逻辑,但目前在营业较重的情况下仍然需要各自处置。

而KMM却与之相反,接下来让我们来一路领会一下吧~

/ 什么是KMM /

KMM 即 Kotlin Multiplatform Mobile是一个SDK,旨在简化跨平台挪动应用法式的开发。通过KMM开发者能够在iOS和Android应用法式之间共享通用代码,并仅在需要时编写特定于平台的代码。

上面官方的描述说了那么多,简单的来说就是KMM重视营业逻辑跨平台,和Flutter、Compose完全相反。即便如斯,在那个都想着跨他人的年代,KMM也称本身并没有说过不会做UI的跨平台...

用Kotlin停止跨平台开发,看那一篇就够了  第2张

/ KMM的HelloWorld /

情况设置装备摆设

那里假设,你已经有了一台Mac、安拆了高版本的AndroidStudio(那里不会介绍Xcode的设置装备摆设),在AndroidStudio中搜刮插件Kotlin Multiplatform Mobile并安拆,如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第3张

因为KMM还不是出格的成熟,所以建议开发者将Kotlin插件也晋级到最新版本,制止呈现一些兼容性问题。

创建项目

安拆好插件并重启后,我们能够创建一个Kotlin Multiplatform App,如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第4张

输入项目名称,选择对应的设置装备摆设。

用Kotlin停止跨平台开发,看那一篇就够了  第5张

在iOS框架分发列表中,选择常规框架选项 (那里为了简单演示,现实项目按照所需选择即可)。点击Finish就创建了一个KMM的项目。

项目构造

创建完的KMM项目构造如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第6张

androidApp、iOSApp就是对应的Android、iOS代码库,那里次要说一下shared共享模块,即存放Android、iOS公共营业逻辑的部门。

共享模块由三个源集构成:androIDMain、commonMain和iosMain。源集是一个Gradle概念,用于逻辑上组合在一路的多个文件,此中每个组都有本身的依赖项。在Kotlin Multiplatform中,共享模块中的差别源集能够针对差别的平台。如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第7张

撑持多个目的的多平台库,能够在公共源集commonMain中利用。例如Koin、Apollo和Okio。

android和iOSMain,那些是来自相关生态系统的常规库。能够利用CocoaPods或其他依赖项办理器的原生iOS项目和利用Gradle的Android项目中利用。

运行法式

安拆过KMM的插件,能够在AndroidStudio中选择iOS的虚拟机,前提必需是已经在Xcode或其他处所设置装备摆设了iOS的虚拟机,如图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第8张

我们那里仅运行Android法式,运行成果如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第9张

那个成果来自shared模块中commonMain下的Greeting文件,代码如下所示。

class Greeting { PRivate val platform: Platform = getPlatform() fun greeting(): String { return "Hello, ${platform.name}!" }}

在iOS的手机上运行则会显示iOS版本号,那里交给读者本身去测验考试了。因为我的电脑设置装备摆设不允许我安拆Xcode...

用Kotlin停止跨平台开发,看那一篇就够了  第10张

/ 实现元旦倒计时 /

接着我们看若何实现元旦倒计时的功用,其实就是计算如今间隔元旦还有几天。是不是有点似曾了解~

用Kotlin停止跨平台开发,看那一篇就够了  第11张

那一部门是公共逻辑,在shared目次中的build.gradle.kts文件中添加设置装备摆设如下:

val commonMain by getting{ dePEndencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") }}

在shared/src/commonMain/kotlin目次下,创建新的Kotlin文件,代码如下所示:

import kotlinx.datetime.*fun daysUntilNewYear(): Int { val today = Clock.System.todayIn(TimeZone.currentSystemDefault()) val closestNewYear = LocalDate(today.year + 1, 1, 1) return today.daysUntil(closestNewYear)}

修改Greeting的greet办法如下所示。

fun greeting(): String { return "间隔元旦还有${daysUntilNewYear()}天"}

运行法式,成果如下图所示。

用Kotlin停止跨平台开发,看那一篇就够了  第12张

在iOS手机中运行的效果也是一致的。

好吧,那个例子太简单了,略微来个适用点的例子~

/ 实现收集恳求功用 /

添加依赖

不管什么营业必定要用到收集恳求的功用,我们来看那部门的公共逻辑该怎么处置。

起首我们将用到依赖添加进来,那里次要有Kotlin协程、序列化(Ktor利用要求)、和Ktor,Ktor是一个能够用于HTTP恳求的收集框架,若是读者不熟悉的话可自行查看。代码如下所示。

val commonMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion") implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion") } }

同时我们需要再androidMain和iOSMain目次下添加对应Ktor库,代码如下所示

val androidMain by getting { dependencies { implementation("io.ktor:ktor-client-android:$ktorVersion") } } val iosMain by creating { dependencies { implementation("io.ktor:ktor-client-darwin:$ktorVersion") } }

那里ktorVersion的版本是2.1.2。

添加接口

那里我们仍然利用「wandroid」中的每日一问接口:

https://wanandroid.com/wenda/list/1/jso

与在Compose中利用Paging分页库利用的接口和实体类是一样的,那里就不反复展现了。

创建接口地址类,代码如下所示。

object Api { val dataApi = "https://wanandroid.com/wenda/list/1/json"}

创建HttpUtil类,用于创建HttpClient对象和获取数据的办法,代码如下所示

class HttpUtil { private val httpClient = HttpClient { install(ContentNegotiation) { json(Json { prettyPrint = true isLenient = true ignoreUnknownKeys = true }) } } /** * 获取数据 */ suspend fun getData(): String { val rockets: DemoReqData = httpClient.get(Api.dataApi).body() return "${rockets.data} " }}

那里的代码我们应该都是比力熟悉的,仅仅是换了一个收集恳求框架罢了。如今公共的营业逻辑已经处置好了,只需要页面端挪用办法然后解析数据并展现即可。那里我们仍然以Android实现为例。

用Kotlin停止跨平台开发,看那一篇就够了  第13张

实现页面层

在androidApp下编写Compose代码,代码比力简单,就是点击按钮恳求数据,展现展现在文本中,代码如下所示。

setContent { MyApplicationTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background ) { Column() { val scope = rememberCoroutineScope() var text by remember { mutableStateOf("正在加载") } Button(onClick = { scope.launch { text = try { Gson().toJson(HttpUtil().getData()) } catch (e: Exception) { e.localizedMessage ?: "error" } } }) { Text(text = "恳求数据") } Greeting(text) } } } }

那里我们并没有解析数据,仅仅是将恳求的数据转化为Json串显示在文本中。运行法式,默认显示正在加载,点击按钮显示恳求接口的数据。

用Kotlin停止跨平台开发,看那一篇就够了  第14张

如许我们就实现了收集恳求的功用。

/ 写在最初 /

到那里,恭喜你,已经入门了KMM的利用,更多的利用办法需要在现实项目中不竭地去总结,去测验考试,Jetpack目前也在开发KMM版本,那对KMM开展将会是一个推进~

用Kotlin停止跨平台开发,看那一篇就够了  第15张

本文转载自公家号郭霖

做者:黄林晴

今日保举:

安卓开发工程师

要求

1. 全日造统招本科结业,1年摆布安卓开发经历,可承受优良23届应届生

2. 精通Android高级特征和SDK的利用,纯熟掌握品牌手机和Android版本之间的区别;

7.需熟悉Kotlin开发

4. 纯熟掌握Android各类调优东西,能够切确定位bug,纯熟掌握IO,内存和CPU的优化;

5. 掌握Android端电量和流量优化技巧

6. 掌握安卓中绘图机造;

7.有JNI编程优先的考虑。

薪资:15k-30k

工做地点:杭州

送达体例:Freemen App中定位杭州搜刮安卓开发工程师

安卓开发练习生要求

1、2023届本科及以上学历,计算机相关专业;

2、计算机根底扎实,熟悉数据构造、操做系统、计算机收集;

3、熟悉java或c/c++/objective-c;

4、对手艺有热情,可以在指点后独立停止开发工做,对代码标准有要求;

薪资:4k-6k

工做地点:杭州

送达体例:Freemen App中定位杭州搜刮安卓开发练习生

高级安卓开发工程师

1.计算机科学、软件工程或相关专业本科或以上学历。至少5年Android原生开发工做经历。

2.精通Java和Kotlin语言。

3.优良的主动化测试经历,包罗单位测试和UI测试。

4.具有在Android和通用软件开发中利用常见设想形式的工做常识,如Reactive Patterns,MVVM。

5.高尺度的代码量量、可维护性和性能。

6.有创建、维护和发布贸易挪动应用法式的经历。

7.有创建、维护和运输车辆配套应用法式经历者优先。

薪资范畴:25k-28k

工做地点:上海

送达体例:如需送达可私信小编

以上就是今日最新保举,时间不等人,比来找工做的不要错过,身边需要找工做的小伙伴也能够互相保举~