今天想和大家分享的內(nèi)容是和我們手機上APP相關的,它們都是用什么編程語言寫的呢?
創(chuàng)新互聯(lián)公司專業(yè)IDC數(shù)據(jù)服務器托管提供商,專業(yè)提供成都服務器托管,服務器租用,成都聯(lián)通服務器托管,成都聯(lián)通服務器托管,成都多線服務器托管等服務器托管服務。
主要針對兩大移動端:Android和IOS,我們就不多說了,下面我們從另一個角度進行分類。
01
第一類:針對單一APP開發(fā)的語言,即開發(fā)一套代碼只能運行在一個平臺上。
1、開發(fā)Android的:Java和Kotlin
Kotlin是一種在Java虛擬機上運行的靜態(tài)類型編程語言,被稱之為Android世界的Swift。Kotlin可以編譯成Java字節(jié)碼,也可以編譯成JavaScript,方便在沒有 JVM 的設備上運行。運行效率提高很多,并且語法更加簡潔好用。
如果是與系統(tǒng)底層進行交互則需要使用JNI技術,通過和C或者C++結(jié)合實現(xiàn)相應的業(yè)務邏輯,比如美顏或者直播類型的APP。直播類型的APP采用的ffmpeg技術,其中ffmpeg就是用C語言實現(xiàn)的。
2、開發(fā)IOS的:Swift和Object-C
Swift 結(jié)合了 C 和 Objective-C 的優(yōu)點并且不受 C 兼容性的限制。
02
(二)第二類:可以針對多個APP端的編程語言,即只需開發(fā)出一套代碼,就可在多個平臺上運行。
1、第一種是Flutter技術
基于Dart語言,比如現(xiàn)在閑魚APP就是基于flutter開發(fā)的。并且有著多年經(jīng)驗,而且閑魚免費開源了框架。
Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面。Flutter可以與現(xiàn)有的代碼一起工作。在全世界,F(xiàn)lutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費、開源的。
Flutter的熱重載可幫助您快速地進行測試、構(gòu)建UI、添加功能并更快地修復錯誤。在iOS和Android模擬器或真機上可以在亞秒內(nèi)重載,并且不會丟失狀態(tài)。
尤其是在UI上使用Flutter的現(xiàn)代、響應式框架,和一系列基礎widget,輕松構(gòu)建您的用戶界面。使用功能強大且靈活的API(針對2D、動畫、手勢、效果等)解決艱難的UI挑戰(zhàn)。
2、第二種是Uni-app框架
基于Vue.js。俗稱一套代碼編到8個平臺上。
uni-app是一個使用Vue.js開發(fā)所有前端應用的框架,開發(fā)者編寫一套代碼,可發(fā)布到iOS、Android、H5、以及各種小程序:微信/支付寶/百度/頭條/QQ/釘釘?shù)榷鄠€平臺。
小結(jié):
第二類開發(fā)起來更顯效率,節(jié)約很多時間成本。當然,如果加上大型APP這個限定條件的話,就不能用單一的某一種編程語言來說了,一般情況下大型APP必然會用到的編程語言有三種:
第一種:平臺原生推薦語言,如:Android平臺的Java和Kotlin,ios平臺的object-c和Swift(swift版本之間的差異比較大,要學習的話還是要注意版本選擇)。這部分一般用于處理核心業(yè)務、權限請求以及高性能要求頁面。
第二種:web語言,這里主要指的是h5相關的技術棧。這部分主要處理非核心業(yè)務邏輯,以及需要動態(tài)更新的頁面。
第三種:NDK相關,這里一般用到的就是C、C++。大部分寫業(yè)務邏輯的同學用的比較少,不過大型APP一般還是會用到一些。主要應用于安全性要求高,高性能算法以及跨平臺算法實現(xiàn)。
1.芯片都去哪了?美國SIA年度報告揭秘~
2.樹莓派偷偷換上新SoC!
3.MCU從入門到躺平
4.車規(guī)級MCU國產(chǎn)替代下的選擇題:車廠策略激進,直供能成為未來主流?
5.編程語言成功的幾大要素
6.碳中和,不確定世界里的確定性
像美團外賣這樣的APP用一種開發(fā)語言,能開發(fā)得出來嗎?答案是不能。
美團發(fā)展到現(xiàn)在可以說已經(jīng)是一個【巨無霸】了,里面集成了很多很多功能,除了核心的外賣,還有 旅游 、 娛樂 、購物、出行,金融等等業(yè)務線,那么這么多復雜的業(yè)務根本不可能用同一種開發(fā)語言實現(xiàn)。
那么美團都用到哪些開發(fā)語言和技術了呢?下面就根據(jù)我的理解詳細說一下。
前端是把產(chǎn)品的核心服務交給用戶的呈現(xiàn)者,它的表述方式、展示形式以及交互邏輯都跟用戶息息相關,都影響著用戶使用產(chǎn)品的體驗,也就是說直接影響產(chǎn)品的用戶留存。
前端開發(fā)主要分為三大類型:Andriod、IOS和PC(H5) ,Android開發(fā)語言是Kotlin和Java,IOS開發(fā)語言是Object-c和Swift,PC(H5)開發(fā)語言就比較雜了,有JS、CSS、HTML,還有很多第三方的前端框架,比如Angular.js、vue.js、Bootstrap、JQuery等等。
關于后端的功能,這一點可以說是眾說紛紜,主要需要考慮的是如何實現(xiàn)功能、數(shù)據(jù)的交互流程和存取、平臺的穩(wěn)定性與性能等。
那么后端都用到哪些開發(fā)語言和技術呢?
根據(jù)后端技術選型的標準,后端可選的開發(fā)語言和技術是非常多的。
比如Java體系的話,可以選用SpringMVC、Spring cloud、Hibernate,Mybatis、Mysql、Redis、Memcache、zookeeper、Kafka......;
比如Python體系的話,可以選用Django、Flask、Tarnado、Web2py等,中間件都是通用的,Redis,MQ、MySQL、Kafka等都可以用在python體系中;
當然還有PHP、C、Perl等開發(fā)語言。
綜上所述,美團這個巨無霸公司,隨著業(yè)務線的擴展用到的技術肯定會越來越多,而且越來越復雜,技術快速變革的時代,適者生存的競爭性也會越來越激烈。
俗話說:羅馬不是一日建成的,任何事都不可能一蹴而就,包含技術。在以后的發(fā)展中美團也會逐步更新自己的技術和開發(fā)語言的。
至少三種語言。后端一種語言(比如Java丶Go丶Python丶PHP等),后端語言及生態(tài)比較成熟。下面重點聊前端App開發(fā)。
前臺兩種語言(Android和iOS是不同的開發(fā)環(huán)境。比如Android用Java或者Kotlin,iOS采用Object C++或Swift),稱之為Native開發(fā)。
當然創(chuàng)業(yè)公司可以用一種前端語言寫App前端,這樣就不需要Android和蘋果分兩種語言寫,寫一次代碼可以編譯成Android和iOS的App,現(xiàn)在通行的方案有Vue之類的DOM渲染模式,以及ReactNative方案(RN)。性能上RN優(yōu)于DOM渲染但低于用Native開發(fā)的App。所以美團這種公司,一定是Native方式寫App,但RN是初創(chuàng)項目不錯的選擇。
與RN競爭的還有一種新貴flutter,是google推出來的,但設計原理與RN不同,性能方面優(yōu)于RN,只是目前生態(tài)不夠健全,國內(nèi)有閑魚app是采用此技術。未來可能會占一席之地。
最后,其實App開發(fā)已經(jīng)是強努之末,我覺得主流應該是朝PWA和小程序方向發(fā)展。
你好,開發(fā)譬如美團這種APP,用一種語言是實現(xiàn)不了的,一個APP有安卓和蘋果兩個操作系統(tǒng),開發(fā)能在安卓iOS端應用的APP主流的開發(fā)語言和技術是很多的,如后臺有JAVA、C++、PHP、Python等多種開發(fā)語言,前端有kotlin、HTML、css、jquery、ajax、bootstrap、angular.js、react、vue.js、node.js、swift、object-c等多種語言和框架。
一個APP的開發(fā)是需要前端技術和后臺技術共同配合完成,這樣的APP不論是功能還是性能都給用戶很好的體驗,單一開發(fā)語言畢竟技術支持有限,所以即使能開發(fā)出來,APP的用戶體驗也是不理想的。
一般APP有這幾種開發(fā)組合模式:1、原生安卓iOS開發(fā),前端:JAVA、kotlin、swift、object-c后臺:JAVA、PHP、C++等后臺技術,這種模式開發(fā)周期長,成本高,性能好;2、混合APP開發(fā)即hybrid app,前端以網(wǎng)頁技術為主,穿插原生開發(fā)功能,兼具原生APP和web app的優(yōu)點,如淘寶、微信等應用都是走的這個技術;3、web app,前端純網(wǎng)頁技術,后臺為主流開發(fā)語言,這種模式開發(fā)速度快,成本低,界面體驗可能弱一些。
可見開發(fā)一款APP大多數(shù)都是多種語言配合完成,謝謝閱讀。
看完之前的評論,依然好奇為什么一個語言不能完全勝任。
前端跨平臺的方案有react native,cordova,flutter等,如果需要兼容開發(fā)小程序,h5頁面,可以采用taro來開發(fā),一套代碼,所有平臺通吃。
后端的方案有服務端運行時nodejs,大數(shù)據(jù)背景下運用而生的數(shù)據(jù)庫mobgodb,緩存解決方案redis,搜索工具elasticsearch,負載均衡ngix,基本上是需要什么就有什么
所以總結(jié)下來,一句話,一種語言可以實現(xiàn)類似美團這樣的app和小程序。為什么美團使用的語言那么多,一大原因估計是美團app開發(fā)的早,當時前端技術不成熟,工具沒現(xiàn)在這么多。
使用混合開發(fā)與C++ 進行跨平臺開發(fā),有好有壞。
C++ 進行跨平臺開發(fā)
編寫一次,隨處運行。早在 2013 年,Dropbox 就采用上述策略進行移動開發(fā),這背后的想法很簡單:用 C++ 編寫一次代碼,而不是用 Java 和 Objective-C 編寫兩次。那時,整個移動工程團隊相對還比較小,但需要支持快速增長的移動路線圖。因此,公司希望找到一種方法,使這個小團隊可以快速交付大量 Android 和 iOS 代碼。
如今,Dropbox 完全放棄了這個策略,轉(zhuǎn)而使用各個平臺的原生語言(主要是 Swift 和 Kotlin ,這兩種語言在剛開始制定移動策略時還不存在)。
Hybrid App混合開發(fā)
Hybrid App主要以JS+Native兩者相互調(diào)用為主,從開發(fā)層面實現(xiàn)“一次開發(fā),多處運行”的機制,成為真正適合跨平臺的開發(fā)。Hybrid App兼具了Native App良好用戶體驗的優(yōu)勢,也兼具了Web App使用HTML5跨平臺開發(fā)低成本的優(yōu)勢。
目前已經(jīng)有眾多Hybrid App開發(fā)成功應用,比如美團、愛奇藝、支付寶等知名移動應用,都是采用Hybrid App開發(fā)模式。
移動應用開發(fā)的方式,目前主要有三種:
幾種模似都可以開發(fā)出應用,小應用無所謂,但是大流量應用,對圖形要求高的如 游戲 等原生開發(fā)的效果還是最好
支付寶打開很慢,就是因為采用混合開發(fā),使用人多了不如原生開發(fā)
不行的哦。任何你看到的應用和網(wǎng)頁,都需要多個語言開發(fā)的,大的分比如前端和后端,用的語言都是不一樣的
不可以。
專利申請是要個人自己的成果,另外,專利法有規(guī)定:“對智力活動的規(guī)則和方法不授予專利權。
你好,你可以通過手機端的操作方法來搜索用戶。
按照系統(tǒng)提示點擊即可:
其他方法:
通過查看閑魚首頁代碼
1.發(fā)現(xiàn)原來搜索框的代碼被注注釋了。
2..只要把注釋的代碼去掉,即可恢復搜索框。
前端的發(fā)展太快了,前端框架和技術的發(fā)展也層出不窮,還包括不同智能設備的出現(xiàn),對前端開發(fā)同學來說是個很大的跳轉(zhuǎn),簡單列舉下:
這樣就滋生了一些問題,比如我要開發(fā)一個通用的頁面,兼容不同的端側(cè)和 小程序 ,顯然目前是做不到的,我們只能開發(fā)多套頁面去適配不同的場景,這樣的話成本就太高了。
很多同學都在嘗試解決這個問題,也催生了類似taro這樣的多端統(tǒng)一開發(fā)框架,這是一個好的解決方案,但是比較被動,缺乏一定的擴展性。
這篇文章我們要探討的是,看能不能換個角度去解決這個問題,提升開發(fā)效率。
ViewModel
當我們在開發(fā)一個頁面的時候,不管用的是哪一種框架,通常都會抽象出一層viewmodel層,它主要有2個作用
從上圖中我們可以看出,viewmodel是一段獨立的通用代碼邏輯,起到了承前啟后的作用。它和view層關系更加緊密,因此通常會放在前端測。
既然viewmodel是獨立的,那我們能不能把它放在后端呢?這樣一個最大的好處就是viewmodel可以進行復用,不需要在重復編寫,而且只需要改動一個viewmodel,就可以全量生效。
似乎是一個很美好的想法,但是這部分代碼由誰去開發(fā)呢,總不可能寄希望于后端同學吧,當然只能是我們自己,也感謝于serverless架構(gòu)的出現(xiàn),讓這件事情變成了可能。
有些同學可能會問,既然viewmodel后移了,那view呢?后續(xù)會考慮結(jié)合我們的ui2code技術,那真的就比較完美了。
什么是serverless
架構(gòu)上,我們可以把serverless分為FaaS和BaaS。
FaaS是用于創(chuàng)建、運行、管理函數(shù)服務的計算平臺,它支持多種開發(fā)語言,比如java、nodejs、dart等,這有利于不同端側(cè)的開發(fā)同學介入開發(fā)。FaaS是基于事件驅(qū)動的思想,只有當一個函數(shù)被事件觸發(fā)時才會占用服務器資源執(zhí)行,不然都是無需占用服務器資源的。
BaaS提供了用于函數(shù)調(diào)用的第三方基礎服務,比如身份校驗、日志、數(shù)據(jù)庫等,它是由服務商直接提供,開發(fā)者無需關系實現(xiàn),直接調(diào)用即可。
業(yè)務落地
我們是通過gaia平臺開發(fā)后端接口,gaia可以理解為上文提到的FaaS平臺。
日常開發(fā)中有這樣一個需求,下面是這個需求的一個頁面。
因為這個頁面上的數(shù)據(jù)比較多,先把它切分成一個個小的模塊,后臺返回數(shù)據(jù)的時候也根據(jù)模塊來返回數(shù)據(jù)。
我們是根據(jù)viewmodel來設計接口,首先肯定有一個首屏數(shù)據(jù)接口;然后是頁面上的交互,比如切換卡片、切換芝麻信用按鈕,切換會引起頁面數(shù)據(jù)變化,我們可以統(tǒng)一封裝一個頁面更新的接口;最后是一個開通的接口。
后端接口
前后端交互最重要的數(shù)據(jù)結(jié)構(gòu)的設計,我們省略了中間的業(yè)務邏輯處理,看下接口的數(shù)據(jù)結(jié)構(gòu)。
首屏接口返回的數(shù)據(jù)主要有幾個特征:
更新接口的返回數(shù)據(jù)結(jié)構(gòu)和首屏接口類似,但是入?yún)⒂兴煌饕?個字段:
前端處理
從后端返回的數(shù)據(jù)可以看到,數(shù)據(jù)是及其詳細的,無需我們做任何的業(yè)務邏輯處理,直接映射到頁面即可。這樣,前端已經(jīng)變成了很薄的一層數(shù)據(jù),沒有任務的業(yè)務邏輯處理,變的很簡單,當需要遷移到其他端時,只需要遷移視圖層即可。當有任何的業(yè)務變動時,只需要修改后端的接口,就能生效。
收益與總結(jié)
通過具體的實踐,我們發(fā)現(xiàn),對于前端開發(fā)同學來說,變的簡單了,開發(fā)效率有很大的提升,前端同學甚至都不需要去理解具體的業(yè)務邏輯,就能完成頁面的開發(fā)。而且,提取的viewmodel可以復用到不同的端側(cè),設置還包括native端。我們還可以將viewmodel拆分成更小粒度的viewmodel,方便在不同的頁面接口中進行復用。我們有同學還在FaaS側(cè)基于redux的思想封裝了一個通用的狀態(tài)管理框架,規(guī)范了前后端的交互。
后面, 還有一些問題待我們?nèi)ソ鉀Q,比如開發(fā)成本、viewmodel的邏輯拆分、具體接口問題定位等。
閑魚團隊是Flutter+Dart FaaS前后端一體化新技術的行業(yè)領軍者,就是現(xiàn)在! 客戶端/服務端java/架構(gòu)/前端/質(zhì)量工程師 面向 社會 招聘,base杭州阿里巴巴西溪園區(qū),一起做有創(chuàng)想空間的社區(qū)產(chǎn)品、做深度頂級的開源項目,一起拓展技術邊界成就極致!
*投喂簡歷給小閑魚→ guicai.gxy@alibaba-inc .com
開源項目、峰會直擊、關鍵洞察、深度解讀
請認準 閑魚技術
閑魚上給你發(fā)消息是代碼的不是真人。根據(jù)相關公開資料查詢了解到,閑魚上可以設置由機器人自動回復消息代碼,所以閑魚上給你發(fā)消息是代碼的不是真人。閑魚是一個社區(qū)化的二手閑置交易市場,不僅支持各種同城及線上的擔保交易,更安全,同時還有最專業(yè)的放心購二手商家。