Donut多端框架小程序打包適配ios和安卓app詳解
一、框架簡(jiǎn)介與適配概述
騰訊新推出的Donut多端框架,使得微信小程序能夠轉(zhuǎn)化為iOS和安卓應(yīng)用。開(kāi)發(fā)者通過(guò)使用該框架的工具,可以方便地進(jìn)行小程序代碼的升級(jí)、調(diào)試以及打包工作。適配過(guò)程中,小程序中的展示組件和樣式在微信平臺(tái)上表現(xiàn)良好,但在部分低版本手機(jī)上可能會(huì)出現(xiàn)CSS網(wǎng)格布局顯示異常的問(wèn)題。二、登錄方式與授權(quán)機(jī)制

三、安卓開(kāi)發(fā)中的常見(jiàn)問(wèn)題及解決方案
在安卓開(kāi)發(fā)中,開(kāi)發(fā)者可能會(huì)遇到以下問(wèn)題:1. 開(kāi)發(fā)者證書的生成:可以選擇在線生成工具,或者本地安裝Java環(huán)境進(jìn)行生成。
2. 打包的包名設(shè)置:包名應(yīng)在微信開(kāi)放平臺(tái)進(jìn)行設(shè)定,而非在證書生成時(shí)。
3. 安裝apk文件時(shí):接收到的apk文件名默認(rèn)會(huì)添加.1后綴,用戶安裝時(shí)只需刪除該后綴即可。

4. 關(guān)于小米應(yīng)用商店的適配:需要確保targetSdkVersion至少為30,而官方默認(rèn)值為29。需要更新開(kāi)發(fā)工具至特定版本號(hào)以上。
四、iOS開(kāi)發(fā)中的挑戰(zhàn)與應(yīng)對(duì)策略
iOS開(kāi)發(fā)中遇到的問(wèn)題相對(duì)復(fù)雜,以下是一些常見(jiàn)問(wèn)題及其解決方案:1. 證書信任問(wèn)題:下載的證書在mac上可能顯示不受信任,需要下載中間證書并安裝。
2. wx.weixinAppLogin報(bào)錯(cuò):需要使用自申請(qǐng)證書,并在Donut后臺(tái)綁定Bundle ID和Universal Links。
3. .mobileprovision文件與應(yīng)用的對(duì)應(yīng)關(guān)系:需要正確設(shè)置Bundle ID和Universal Links,否則打包過(guò)程會(huì)出錯(cuò)。

其他如Run the app失敗、Build ipa失敗、ipa文件上傳時(shí)報(bào)錯(cuò)等問(wèn)題,都需要開(kāi)發(fā)者根據(jù)具體情況進(jìn)行針對(duì)性的解決。
五、審核與發(fā)布過(guò)程中的注意事項(xiàng)
在審核與發(fā)布階段,開(kāi)發(fā)者需要注意以下事項(xiàng):1. 版本號(hào)的累加規(guī)則:每次構(gòu)建上傳時(shí)版本號(hào)必須累加,不能低于上次提交版本。
2. 第三方登錄問(wèn)題:必須接入蘋果登錄,否則應(yīng)用無(wú)法通過(guò)審核。
3. 功能使用限制:如視頻播放、canvas繪圖等功能需要在配置文件中開(kāi)啟相關(guān)SDK。

4. 登錄時(shí)的特殊處理:適配登錄時(shí)需新建登錄頁(yè)面,即使未使用小程序登錄,首次安裝也會(huì)顯示授權(quán)頁(yè)面。
5. 其他注意事項(xiàng):如wx.login可能隱式觸發(fā)wx.getMiniProgramCode,跳轉(zhuǎn)至小程序時(shí)部分功能不可用等。 通過(guò)Donut框架,微慕小程序已經(jīng)成功適配iOS和安卓應(yīng)用并等待審核。相對(duì)于web或小程序開(kāi)發(fā),app開(kāi)發(fā)涉及更多的規(guī)范和流程,工作量較大。開(kāi)發(fā)過(guò)程中遇到的問(wèn)題已經(jīng)進(jìn)行了詳細(xì)記錄,供感興趣的開(kāi)發(fā)者參考和學(xué)習(xí)。
深度測(cè)評(píng):五大主流多端開(kāi)發(fā)框架全面對(duì)比=======================
一、引言

-
在數(shù)字化時(shí)代,跨平臺(tái)開(kāi)發(fā)成為主流,開(kāi)發(fā)者面臨眾多開(kāi)發(fā)框架的選擇。本文將對(duì)比分析五大主流多端開(kāi)發(fā)框架的特性,幫助開(kāi)發(fā)者做出明智的選擇。這五大框架分別是React Native(RN)、Flutter、Ionic、NativeScript以及APICloud團(tuán)隊(duì)開(kāi)發(fā)的AVM。
二、安裝環(huán)境與開(kāi)發(fā)工具對(duì)比
2.1 React Native (RN)

安裝環(huán)境:
RN由Facebook于2015年4月開(kāi)源,至今已發(fā)展6年。安裝環(huán)境方面,僅需本地安裝Node.js版本12.0以上,借助官網(wǎng)推薦的Expo工具可快速搭建本地開(kāi)發(fā)環(huán)境。對(duì)于MacOS用戶而言,整個(gè)過(guò)程相對(duì)流暢。
開(kāi)發(fā)工具:
推薦使用VScode。使用腳手架生成的目錄與正常的React項(xiàng)目相似,入口文件在App.tsx,支持修改后的HMR(熱模塊替換)。對(duì)前端開(kāi)發(fā)來(lái)說(shuō),門檻不高。
2.2 Flutter

安裝環(huán)境:
Flutter自2018年發(fā)布v1.0以來(lái)發(fā)展迅猛,是Google力推的跨端開(kāi)發(fā)框架。開(kāi)發(fā)前需要下載并安裝完整的Xcode和Xcode開(kāi)發(fā)者工具,然后下載Flutter SDK。解壓SDK后設(shè)置對(duì)應(yīng)的SDK環(huán)境變量地址。
開(kāi)發(fā)體驗(yàn):
涉及Dart語(yǔ)法、Flutter的狀態(tài)管理機(jī)制、widget概念及material相關(guān)庫(kù)功能。近年來(lái),各大公司已將Flutter用于主端業(yè)務(wù)的UI部分開(kāi)發(fā)。
2.3 Ionic

Ionic在2013年由Drifty Co.推出,被認(rèn)為是混合式開(kāi)發(fā)的先驅(qū)。安裝環(huán)境和開(kāi)發(fā)工具部分,首先需要安裝全局的CLI命令行工具,Node.js版本12.14以上。生態(tài)豐富,以Web技術(shù)為主,但Webview性能與編譯后轉(zhuǎn)Native Code的框架有所差距。
2.4 NativeScript
NativeScript是Progress公司開(kāi)發(fā)的專為iOS和Android開(kāi)發(fā)的框架,但使用JavaScript編寫。安裝環(huán)境和工具的設(shè)置相對(duì)獨(dú)特,需要開(kāi)發(fā)者額外了解和適應(yīng)。
三、條件編譯與類似uniapp的語(yǔ)法
--

某些框架提供條件編譯和類似uniapp的語(yǔ)法功能,以兼容小程序和app。這大大簡(jiǎn)化了開(kāi)發(fā)者的任務(wù),提高了開(kāi)發(fā)效率和代碼復(fù)用性。具體實(shí)現(xiàn)方式和配置在json文件中進(jìn)行。
四、其他框架特性對(duì)比
-
除了安裝環(huán)境和開(kāi)發(fā)工具,這五大框架在性能、社區(qū)支持、學(xué)習(xí)曲線、生態(tài)系統(tǒng)等方面也有各自的特色和優(yōu)勢(shì)。開(kāi)發(fā)者需要根據(jù)自身需求和項(xiàng)目特點(diǎn)進(jìn)行選擇。
五、總結(jié)與建議

-
選擇跨平臺(tái)開(kāi)發(fā)框架時(shí),開(kāi)發(fā)者需要根據(jù)項(xiàng)目需求、團(tuán)隊(duì)技術(shù)棧、應(yīng)用場(chǎng)景和領(lǐng)域等因素進(jìn)行綜合考慮。本文提供的對(duì)比分析只是一個(gè)參考,實(shí)際選擇還需結(jié)合開(kāi)發(fā)者自身經(jīng)驗(yàn)和實(shí)際項(xiàng)目情況。
注:關(guān)于AVM框架的部分,由于信息有限,未進(jìn)行詳細(xì)的對(duì)比和分析。建議開(kāi)發(fā)者參考官方文檔和社區(qū)反饋,進(jìn)行深入了解。 一、跨端框架介紹與對(duì)比
1. NativeScript與Ionic
NativeScript與Ionic都是在JavaScript和Native之間架設(shè)橋梁的跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)框架。它們均能實(shí)現(xiàn)真正的Native渲染,展現(xiàn)出高性能特點(diǎn)。但NativeScript在性能上可能略有優(yōu)勢(shì)。

安裝環(huán)境與開(kāi)發(fā)工具體驗(yàn):
對(duì)于NativeScript,開(kāi)發(fā)者需要在MacOS系統(tǒng)上首先安裝其CLI工具。過(guò)程中可能會(huì)遇到下載依賴的代理設(shè)置問(wèn)題。選擇Vue模板創(chuàng)建空項(xiàng)目后,使用VScode進(jìn)行編輯。目錄結(jié)構(gòu)類似于普通Vue項(xiàng)目,入口文件位于app.js。在Android平臺(tái)下的運(yùn)行效果與Ionic相似,并且支持熱更新。
2. AVM框架
AVM是APICloud研發(fā)的跨端JavaScript框架,支持Vue和React JSX。它具備雙向綁定、組件化和狀態(tài)管理功能,并配備了系統(tǒng)級(jí)API。AVM支持云端編譯和發(fā)布到不同平臺(tái),提高了開(kāi)發(fā)效率和性能。
安裝環(huán)境與開(kāi)發(fā)工具:

使用AVM前,需要先注冊(cè)APICloud賬號(hào),并下載安裝APICloud Studio 3。開(kāi)發(fā)者需要在Mac與手機(jī)處于同一網(wǎng)絡(luò)環(huán)境下,使用AppLoader掃描IDE中的二維碼,以實(shí)時(shí)查看真機(jī)效果。
總結(jié)
通過(guò)對(duì)比,不同框架的開(kāi)發(fā)流程大致分為兩類:一類是通過(guò)debug直接裝包到手機(jī)上進(jìn)行開(kāi)發(fā)和調(diào)試;另一類則需要通過(guò)AppLoader等輔助工具進(jìn)行調(diào)試。在開(kāi)發(fā)工具方面,大部分框架都支持VScode進(jìn)行開(kāi)發(fā)和Hot Reload功能。部分框架提供了自己的IDE,集成度較高。
在性能方面,AVM、Flutter和RN表現(xiàn)較好,其中AVM在編譯速度和性能上尤為突出。在生態(tài)方面,RN下載量領(lǐng)先,而Ionic和NativeScript的市場(chǎng)份額相對(duì)較低。Flutter在2021年逐漸成為主流選擇。對(duì)于國(guó)內(nèi)市場(chǎng),AVM因其本土化、云端集成以及debug體驗(yàn)而受到國(guó)內(nèi)開(kāi)發(fā)者的青睞。
對(duì)于大廠而言,F(xiàn)lutter是一個(gè)不錯(cuò)的選擇。而對(duì)于中小企業(yè)和個(gè)人開(kāi)發(fā)者,在考慮國(guó)內(nèi)市場(chǎng)時(shí),AVM和RN都是值得考慮的選項(xiàng)。如果需要適配桌面端,F(xiàn)lutter則顯得更為合適。

二、關(guān)于uni-app的討論
為啥開(kāi)發(fā)app不建議使用uni-app
雖然uni-app為開(kāi)發(fā)者提供了便捷的開(kāi)發(fā)方式,但它也存在一些潛在的問(wèn)題。對(duì)于JS的要求較高,部分開(kāi)發(fā)者可能并不熟悉JS的復(fù)雜性和深度要求。在使用uni-app開(kāi)發(fā)時(shí)需要注意調(diào)用原生能力的問(wèn)題,特別是在小程序和H5平臺(tái)上需要注意使用條件編譯以避免調(diào)用HTML5+擴(kuò)展規(guī)范的風(fēng)險(xiǎn)。組件的原生調(diào)用能力與第三方vue庫(kù)之間的兼容性也需要考慮。雖然uni-app具有多方面的優(yōu)勢(shì)如vue的寫法上手快等,但在實(shí)際開(kāi)發(fā)中還需綜合考慮各種因素和潛在挑戰(zhàn)。對(duì)于是否選擇uni-app進(jìn)行開(kāi)發(fā)還需要根據(jù)團(tuán)隊(duì)的技術(shù)背景、項(xiàng)目需求以及長(zhǎng)遠(yuǎn)規(guī)劃來(lái)決策。 1. uni-app的特性與場(chǎng)景適用性
1.1 uni-app簡(jiǎn)介及其在特定場(chǎng)景的優(yōu)勢(shì)
uni-app作為一種跨平臺(tái)應(yīng)用開(kāi)發(fā)框架,融合了Vue.js、Weex、小程序等技術(shù)精髓。初次體驗(yàn)者可能會(huì)覺(jué)得它在特定場(chǎng)景下表現(xiàn)得相當(dāng)出色。在開(kāi)發(fā)移動(dòng)端應(yīng)用時(shí),它能夠?qū)崿F(xiàn)一套代碼多端運(yùn)行,顯著提高了開(kāi)發(fā)效率和便捷性。尤其在需要快速迭代和跨平臺(tái)支持的場(chǎng)景中,uni-app的優(yōu)勢(shì)得以充分體現(xiàn)。

1.2 uni-app的技術(shù)選型考量
在某些技術(shù)選型的關(guān)鍵時(shí)刻,uni-app確實(shí)值得考慮。它憑借穩(wěn)定的性能表現(xiàn)和廣泛的平臺(tái)支持,給開(kāi)發(fā)者帶來(lái)了極大的便利。特別是在需要快速構(gòu)建多平臺(tái)應(yīng)用時(shí),uni-app能夠顯著降低開(kāi)發(fā)成本,提高開(kāi)發(fā)效率。初次體驗(yàn)者往往會(huì)被其流暢性和穩(wěn)定性所吸引。
2. uni-AD廣告聯(lián)盟與廣告變現(xiàn)
2.1 廣告聯(lián)盟及收益狀況
uni-AD廣告聯(lián)盟為開(kāi)發(fā)者提供了一個(gè)集中的廣告管理平臺(tái)。通過(guò)一次開(kāi)發(fā),即可實(shí)現(xiàn)多端變現(xiàn)。聚合廣告、廣告SDK、穿山甲等工具的應(yīng)用,使得廣告展示更加精準(zhǔn)、高效。由于屬于小型廣告聯(lián)盟,當(dāng)前的收益可能偏低,但隨著用戶基數(shù)的增加和廣告效果的優(yōu)化,收益有望逐步提高。

2.2 廣告形式與激勵(lì)策略
除了傳統(tǒng)的廣告展示形式,uni-AD還引入了激勵(lì)視頻等新型廣告形式,以吸引用戶并提升廣告效果。這些創(chuàng)新策略對(duì)于提高用戶參與度和廣告收益具有積極意義。
3. uniapp開(kāi)發(fā)體驗(yàn)與跨平臺(tái)優(yōu)勢(shì)
3.1 uniapp開(kāi)發(fā)APP的體驗(yàn)升級(jí)
使用uniapp開(kāi)發(fā)APP端,整體體驗(yàn)相較于傳統(tǒng)的mui有了顯著提升。其流暢性和與小程序類似的體驗(yàn),特別是在iOS端,讓用戶感覺(jué)接近原生應(yīng)用的體驗(yàn)。開(kāi)發(fā)者在享受高效開(kāi)發(fā)的也能為用戶帶來(lái)卓越的使用體驗(yàn)。

3.2 跨平臺(tái)開(kāi)發(fā)的便捷性
uniapp的跨平臺(tái)特性是其一大亮點(diǎn)。DCloud公司對(duì)各家小程序的深入了解,使得uni-app能夠輕松實(shí)現(xiàn)跨端開(kāi)發(fā),并已成為業(yè)內(nèi)最風(fēng)靡的應(yīng)用框架。它支撐著6億手機(jī)用戶的龐大生態(tài),為開(kāi)發(fā)者提供了廣闊的市場(chǎng)空間。
4. mpvue與vue的區(qū)別及對(duì)uni-app的影響
4.1 mpvue與vue的技術(shù)差異
mpvue是基于vue的,優(yōu)化了vue的runtime和compiler實(shí)現(xiàn)。雖然曾廣泛用于小程序開(kāi)發(fā),但現(xiàn)在已停止維護(hù)。相比之下,uni-app作為全新的跨平臺(tái)開(kāi)發(fā)框架,繼承了vue的核心技術(shù)精髓,并進(jìn)行了更多優(yōu)化和創(chuàng)新。

4.2 對(duì)開(kāi)發(fā)者的影響
對(duì)于熟悉vue的開(kāi)發(fā)者而言,轉(zhuǎn)向uni-app將更加容易。但兩者在運(yùn)行時(shí)效率、頁(yè)面加載速度等方面存在差異。這些差異對(duì)開(kāi)發(fā)者來(lái)說(shuō)是需要關(guān)注的重點(diǎn),尤其是在從mpvue遷移到uni-app時(shí)。
5. uniapp的用戶關(guān)聯(lián)與賬號(hào)機(jī)制問(wèn)題
5.1 微信小程序與APP用戶的關(guān)聯(lián)問(wèn)題
由于微信開(kāi)放平臺(tái)的賬號(hào)機(jī)制是通過(guò)unionid來(lái)確定兩個(gè)平臺(tái)賬號(hào)是否屬于同一用戶,之前的微信小程序用戶和APP用戶可能無(wú)法直接關(guān)聯(lián)。這是因?yàn)檫@批用戶是在開(kāi)通微信開(kāi)放平臺(tái)賬號(hào)之前注冊(cè)的,只有openid而沒(méi)有unionid。這對(duì)于跨平臺(tái)用戶管理帶來(lái)了一定的挑戰(zhàn)。

5.2 HBuilderX與uniapp的關(guān)系及解決方案
HBuilderX和uniapp同屬DCloud出品,HBuilderX團(tuán)隊(duì)為uniapp做了大量的優(yōu)化和定制。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),熟悉HBuilderX將有助于更好地開(kāi)發(fā)和優(yōu)化uniapp應(yīng)用。針對(duì)用戶關(guān)聯(lián)問(wèn)題,開(kāi)發(fā)者需要深入了解微信開(kāi)放平臺(tái)的賬號(hào)機(jī)制,并采取適當(dāng)?shù)牟呗詠?lái)解決用戶數(shù)據(jù)同步和識(shí)別的問(wèn)題。