發(fā)布時(shí)間:2023-11-27 06:25:13 瀏覽量:156次
/ 前言 /
過(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ù)展示了。
創(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ò),身邊需要找工作的小伙伴也可以互相推薦~
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說(shuō)明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵?lái)試試!
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)漫建模全過(guò)程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
7. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
9. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
10. Unity3D入門:手把手帶你開發(fā)一款坦克大戰(zhàn)的游戲
Unity工程創(chuàng)建完成后如圖所示: 接下來(lái)應(yīng)該導(dǎo)入此項(xiàng)目所需的Unity Package文件,要用到的Unity package文件大家可以去Unity3D的官方網(wǎng)站下載(地址:ht...
最新文章
同學(xué)您好!