激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

kotlin 游戲開發(fā)(用Kotlin進(jìn)行跨平臺(tái)開發(fā),看這一篇就夠了)

發(fā)布時(shí)間:2023-11-27 06:25:13 瀏覽量:156次

?用Kotlin進(jìn)行跨平臺(tái)開發(fā),看這一篇就夠了

kotlin 游戲開發(fā)(用Kotlin進(jìn)行跨平臺(tái)開發(fā),看這一篇就夠了)

/ 前言 /

過(guò)完情人節(jié)后,大家是否為未來(lái)開始奮斗了呢?今天小編更新兩個(gè)安卓開發(fā)崗位,話說(shuō)現(xiàn)在Kotlin這么火了嗎?安卓開發(fā)都在使用Kotlin開發(fā)。

近些年,不管是最初的RN還是到現(xiàn)在的Flutter、Compose,他們都在做著一件事——跨平臺(tái)。

他們的成就主要都是在UI上跨平臺(tái),當(dāng)然Flutter雖然可以處理一些公共的業(yè)務(wù)邏輯,但目前在業(yè)務(wù)較重的情況下仍然需要各自處理。

而KMM卻與之相反,接下來(lái)讓我們來(lái)一起了解一下吧~


/ 什么是KMM /


KMM 即 Kotlin Multiplatform Mobile是一個(gè)SDK,旨在簡(jiǎn)化跨平臺(tái)移動(dòng)應(yīng)用程序的開發(fā)。通過(guò)KMM開發(fā)者可以在iOS和Android應(yīng)用程序之間共享通用代碼,并僅在必要時(shí)編寫特定于平臺(tái)的代碼。

上面官方的描述說(shuō)了這么多,簡(jiǎn)單的來(lái)說(shuō)就是KMM注重業(yè)務(wù)邏輯跨平臺(tái),和Flutter、Compose完全相反。即使如此,在這個(gè)都想著跨別人的年代,KMM也稱自己并沒有說(shuō)過(guò)不會(huì)做UI的跨平臺(tái)...

/ KMM的HelloWorld /

環(huán)境配置

這里假設(shè),你已經(jīng)有了一臺(tái)Mac、安裝了高版本的AndroidStudio(這里不會(huì)介紹Xcode的配置),在AndroidStudio中搜索插件Kotlin Multiplatform Mobile并安裝,如下圖所示。

由于KMM還不是特別的成熟,所以建議開發(fā)者將Kotlin插件也升級(jí)到最新版本,避免出現(xiàn)一些兼容性問題。


創(chuàng)建項(xiàng)目

安裝好插件并重啟后,我們可以創(chuàng)建一個(gè)Kotlin Multiplatform App,如下圖所示。

輸入項(xiàng)目名稱,選擇對(duì)應(yīng)的配置。

在iOS框架分發(fā)列表中,選擇常規(guī)框架選項(xiàng) (這里為了簡(jiǎn)單演示,實(shí)際項(xiàng)目根據(jù)所需選擇即可)。點(diǎn)擊Finish就創(chuàng)建了一個(gè)KMM的項(xiàng)目。


項(xiàng)目結(jié)構(gòu)

創(chuàng)建完的KMM項(xiàng)目結(jié)構(gòu)如下圖所示。

androidApp、iOSApp就是對(duì)應(yīng)的Android、iOS代碼庫(kù),這里主要說(shuō)一下shared共享模塊,即存放Android、iOS公共業(yè)務(wù)邏輯的部分。

共享模塊由三個(gè)源集組成:androidMain、commonMain和iosMain。源集是一個(gè)Gradle概念,用于邏輯上組合在一起的多個(gè)文件,其中每個(gè)組都有自己的依賴項(xiàng)。在Kotlin Multiplatform中,共享模塊中的不同源集可以針對(duì)不同的平臺(tái)。如下圖所示。

支持多個(gè)目標(biāo)的多平臺(tái)庫(kù),可以在公共源集commonMain中使用。例如Koin、Apollo和Okio。

android和iOSMain,這些是來(lái)自相關(guān)生態(tài)系統(tǒng)的常規(guī)庫(kù)??梢允褂肅ocoaPods或其他依賴項(xiàng)管理器的原生iOS項(xiàng)目和使用Gradle的Android項(xiàng)目中使用。


運(yùn)行程序

安裝過(guò)KMM的插件,可以在AndroidStudio中選擇iOS的虛擬機(jī),前提必須是已經(jīng)在Xcode或其他地方配置了iOS的虛擬機(jī),如圖所示。

我們這里僅運(yùn)行Android程序,運(yùn)行結(jié)果如下圖所示。

這個(gè)結(jié)果來(lái)自shared模塊中commonMain下的Greeting文件,代碼如下所示。

class Greeting {
    private val platform: Platform = getPlatform()

    fun greeting(): String {
        return "Hello, ${platform.name}!"
    }
}

在iOS的手機(jī)上運(yùn)行則會(huì)顯示iOS版本號(hào),這里交給讀者自己去嘗試了。因?yàn)槲业碾娔X配置不允許我安裝Xcode...


/ 實(shí)現(xiàn)元旦倒計(jì)時(shí) /


接著我們看如何實(shí)現(xiàn)元旦倒計(jì)時(shí)的功能,其實(shí)就是計(jì)算現(xiàn)在距離元旦還有多少天。是不是有點(diǎn)似曾相識(shí)~

這一部分是公共邏輯,在shared目錄中的build.gradle.kts文件中添加配置如下:

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


shared/src/commonMain/kotlin
目錄下,創(chuàng)建新的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()}天"
}

運(yùn)行程序,結(jié)果如下圖所示。

在iOS手機(jī)中運(yùn)行的效果也是一致的。

好吧,這個(gè)例子太簡(jiǎn)單了,稍微來(lái)個(gè)實(shí)用點(diǎn)的例子~


/ 實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求功能 /


添加依賴

不管什么業(yè)務(wù)肯定要用到網(wǎng)絡(luò)請(qǐng)求的功能,我們來(lái)看這部分的公共邏輯該怎么處理。

首先我們將用到依賴添加進(jìn)來(lái),這里主要有Kotlin協(xié)程、序列化(Ktor使用要求)、和Ktor,Ktor是一個(gè)可以用于HTTP請(qǐng)求的網(wǎng)絡(luò)框架,如果讀者不熟悉的話可自行查看。代碼如下所示。


 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")
            }
        }

同時(shí)我們需要再androidMain和iOSMain目錄下添加對(duì)應(yīng)Ktor庫(kù),代碼如下所示

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。


添加接口

這里我們?nèi)匀皇褂谩竪android」中的每日一問接口:

與在Compose中使用Paging分頁(yè)庫(kù)使用的接口和實(shí)體類是一樣的,這里就不重復(fù)展示了。

kotlin 游戲開發(fā)(用Kotlin進(jìn)行跨平臺(tái)開發(fā),看這一篇就夠了)

創(chuàng)建接口地址類,代碼如下所示。

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

創(chuàng)建HttpUtil類,用于創(chuàng)建HttpClient對(duì)象和獲取數(shù)據(jù)的方法,代碼如下所示

class HttpUtil {
    private val httpClient = HttpClient {
        install(ContentNegotiation) {
            json(Json {
                prettyPrint = true
                isLenient = true
                ignoreUnknownKeys = true
            })
        }
    }

    /**
     * 獲取數(shù)據(jù)
     */
    suspend fun getData(): String {
        val rockets: DemoReqData =
            httpClient.get(Api.dataApi).body()
        return "${rockets.data} "
    }
}

這里的代碼我們應(yīng)該都是比較熟悉的,僅僅是換了一個(gè)網(wǎng)絡(luò)請(qǐng)求框架而已。現(xiàn)在公共的業(yè)務(wù)邏輯已經(jīng)處理好了,只需要頁(yè)面端調(diào)用方法然后解析數(shù)據(jù)并展示即可。這里我們?nèi)匀灰訟ndroid實(shí)現(xiàn)為例。



實(shí)現(xiàn)頁(yè)面層

在androidApp下編寫Compose代碼,代碼比較簡(jiǎn)單,就是點(diǎn)擊按鈕請(qǐng)求數(shù)據(jù),展示展示在文本中,代碼如下所示。

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 = "請(qǐng)求數(shù)據(jù)")
                        }
                        Greeting(text)
                    }
                }
            }
        }

這里我們并沒有解析數(shù)據(jù),僅僅是將請(qǐng)求的數(shù)據(jù)轉(zhuǎn)化為Json串顯示在文本中。運(yùn)行程序,默認(rèn)顯示正在加載,點(diǎn)擊按鈕顯示請(qǐng)求接口的數(shù)據(jù)。

這樣我們就實(shí)現(xiàn)了網(wǎng)絡(luò)請(qǐng)求的功能。


/ 寫在最后 /

到這里,恭喜你,已經(jīng)入門了KMM的使用,更多的使用方法需要在實(shí)際項(xiàng)目中不斷地去總結(jié),去嘗試,Jetpack目前也在開發(fā)KMM版本,這對(duì)KMM發(fā)展將會(huì)是一個(gè)推進(jìn)~

本文轉(zhuǎn)載自公眾號(hào)郭霖

作者:黃林晴

今日推薦:

安卓開發(fā)工程師

要求

1. 全日制統(tǒng)招本科畢業(yè),1年左右安卓開發(fā)經(jīng)驗(yàn),可接受優(yōu)秀23屆應(yīng)屆生

2. 精通Android高級(jí)特性和SDK的使用,熟練掌握品牌手機(jī)和Android版本之間的區(qū)別;

7.需熟悉Kotlin開發(fā)

4. 熟練掌握Android各種調(diào)優(yōu)工具,可以精確定位bug,熟練掌握IO,內(nèi)存和CPU的優(yōu)化;

5. 掌握Android端電量和流量?jī)?yōu)化技巧;

6. 掌握安卓中繪圖機(jī)制;

7.有JNI編程優(yōu)先的考慮。

薪資:15k-30k

工作地點(diǎn):杭州

投遞方式:Freemen App中定位杭州搜索安卓開發(fā)工程師

安卓開發(fā)實(shí)習(xí)生
要求

1、2023屆本科及以上學(xué)歷,計(jì)算機(jī)相關(guān)專業(yè);

2、計(jì)算機(jī)基礎(chǔ)扎實(shí),熟悉數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò);

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

4、對(duì)技術(shù)有熱情,能夠在指導(dǎo)后獨(dú)立進(jìn)行開發(fā)工作,對(duì)代碼規(guī)范有要求;

薪資:4k-6k

工作地點(diǎn):杭州

投遞方式:Freemen App中定位杭州搜索安卓開發(fā)實(shí)習(xí)生


高級(jí)安卓開發(fā)工程師

1.計(jì)算機(jī)科學(xué)、軟件工程或相關(guān)專業(yè)本科或以上學(xué)歷。至少5年Android原生開發(fā)工作經(jīng)驗(yàn)。

2.精通Java和Kotlin語(yǔ)言。

3.良好的自動(dòng)化測(cè)試經(jīng)驗(yàn),包括單元測(cè)試和UI測(cè)試。

4.具有在Android和通用軟件開發(fā)中使用常見設(shè)計(jì)模式的工作知識(shí),如Reactive Patterns,MVVM。

5.高標(biāo)準(zhǔn)的代碼質(zhì)量、可維護(hù)性和性能。

6.有創(chuàng)建、維護(hù)和發(fā)布商業(yè)移動(dòng)應(yīng)用程序的經(jīng)驗(yàn)。

7.有創(chuàng)建、維護(hù)和運(yùn)輸車輛配套應(yīng)用程序經(jīng)驗(yàn)者優(yōu)先。

薪資范圍:25k-28k

工作地點(diǎn):上海

投遞方式:如需投遞可私信小編

以上就是今日最新推薦,時(shí)間不等人,最近找工作的不要錯(cuò)過(guò),身邊需要找工作的小伙伴也可以互相推薦~

kotlin 游戲開發(fā)(用Kotlin進(jìn)行跨平臺(tái)開發(fā),看這一篇就夠了)

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定