鴻蒙剝離 AOSP 不兼容 Android 熱門問題匯總,不吹不黑不吵

上周發了一篇 《鴻蒙終于不套殼了?純血 HarmonyOS NEXT 即將到來》的相關資訊,沒想到大家「討(fa)論(xie)」的熱情很高,莫名蹭了一波流量,雖然流量對我來說也沒什么用,但幾百條評論也收獲了一些比較有意思的問題,這里統一挑出來匯總下。

??PS,不賣課不推廣不站隊,只考慮技術角度

首先討論的前提是基于 「HarmonyOS NEXT 版本,去掉了傳統的 AOSP 代碼,僅支持鴻蒙內核和鴻蒙系統的應用」的場景,既然是剝離,那就不是「不支持 apk 后綴安裝」的場景了,那么適配的工作量也就隨之而來。

目前已經有一些企業在進行適配或者已經適配的,適配的方式基本都是基于 skia 的場景去實現,因為 HarmonyOS NEXT 的渲染底層還是 skia ,所以做一些兼容轉化,游戲不用說,基于 OpenGL 和 unity 兼容難度相對不高,主要還是集中于 App 如何兼容的適配等問題上。

那么接下來就是一些有趣的熱門問題匯總

鴻蒙應用能安裝在 Android 系統上嗎?

鴻蒙現在用的是 ArkTs 和 ArkUI ,它們成了唯一指定語言和框架,按照目前的情況看,ArkUI 是無法直接用到 Android 系統,但是華為開源了另外一個項目 ArkUI-X ,ArkUI-X 擴展ArkUI 開發框架到多個 OS 平臺,所以從這個角度看,鴻蒙應用又可以運行到其他平臺

不負責任的說,有點類似于 compose 和 compose-multiplatform 的關系

當然,ArkUI-X 項目并不是從 0 開始,它和 Flutter 還是有一些緣分

ArkUI-X 項目屬于 OpenHarmony 管理,而在 OpenHarmony 下存有 third_party_flutter 等項目依賴,ArkUI-X 里 Flutter 應該只是用于窗口管理和渲染管道到 skia ,沒用到 Dart 部分的 UI 框架,類似于之前提到的微信小程序 skyline 底層利用 Flutter 渲染輸出場景類似。

雖然 ArkUI-X 讓鴻蒙 App 可以運行到其他平臺,但是大家目前更多訴求是現有 App 可以繼續「兼容」到鴻蒙 Next。

鴻蒙 Next 升級會造成斷代嗎?會和WinPhone 一樣滑鐵盧嗎?

確實,一旦鴻蒙開始正式不支持 Android ,那么對開發者生態和用戶肯定會有直接的「沖擊」,這也是鴻蒙 Next 需要面對的最大門檻。

目前我個人理解,鴻蒙的策略就是先穩住大廠,盡量讓大廠能跟進「首發適配」,已知的小紅書、百度、美團、京東等企業都有一定鴻蒙基礎,一些團隊也許是基于 KPI ,也許是基于領導要求,都提前開始了 鴻蒙 Next 的支持,所以鴻蒙 Next 在初步生態基礎上還是比當年的 WinPhone 好一些。

例如美圖曾經就有在 skia 層適配鴻蒙的 《讓 Flutter 在鴻蒙系統上跑起來》

當然,鴻蒙肯定不會一上來就強制升級,到時候正式推送更新的時候,應該會有提示框告知用戶,我猜測會雙線「鴻蒙 4」 和「鴻蒙 Next」 共存維護一段時間,就是你不更新,可以繼續用打補丁的鴻蒙 4 過度較長的一段時間,過渡期和用戶維護還是需要的。

接下來是「個人屁話」時間,用于解釋另外一部分評論問題:

從目前來看,鴻蒙 Next 是個博弈,就是華為有存量用戶,也有新增用戶,就是博弈企業的產品愿不愿意放棄這部分市場份額:

之前的評論區說到的,如果網易音樂適配了,那 QQ 音樂是否會跟進?這是一個看誰愿意卷的問題。

目前華為市場份額大概 9.2%,鴻蒙現階段還只在國內,Counterpoint 披露的數據顯示,2023 年 Q1,在中國市場,鴻蒙操作系統的市占率為 8% 。。。。。而 2023 年第一季度,在中國市場,安卓系統占據 72% 市場份額,iOS為 20%,所以這是一個存量市場和新增市場的博弈

華為手機銷量從 2.4 億臺(2019年)達到高峰后,跌至3,000萬臺(2022年),而 2023 Q1 開始對比 2022 逆勢增長41%,所以 2023 年給的目標手機出貨量是 4000 萬部。

這部分問題在于,它說多不多,但是你說它少,又不能完全忽視,畢竟有存量有新增。

扯遠了,這個話題最后說一下兩個擔心的問題:

  • 升級到 Next 之后,應用數據是否支持升級兼容,在整個系統框架都剝離重組的情況下,原先應用的本地數據是否支持兼容或者遷移,這是一個非常影響升級指標的因素,或者說升級后丟失率多高
  • App 后續支持也是一個風向標,應用廠商在鴻蒙上「首發」App 之后,是否能和 Android/iOS 平臺一樣及時迭代跟進,還是「又不是不能用」的維護躺平?

鴻蒙為什么可以通過 OTA 升級剝離 AOSP?如何兼容高通芯片的機器?

這是評論區一個熱門討論點之一,首先大家可能會覺得,自己如何更新自己的內核?看評論區有人的提到的就是「一個人如何舉起自己來」。

這里我也不知道鴻蒙更新的具體路線,根據我的理解和評論區的內容,這里做一些總結:

  • 首先 AOSP 是基于 Linux 內核開發,也就是 AOSP 雖然有 Linux 內核,但是它是以特殊形式存在 AOSP 里,因為一些歷史 GPL 傳染性協議問題,AOSP 不是一個 GUN Linux發行版,所以 AOSP 和 Linux 內核可以分開處理。
  • 類似于 OpenHarmony 使用 LiteOS 內核,HarmonyOS 這層殼可以在 LiteOS 與 AOSP 直接切換,「十分不嚴謹」的比喻:「Flutter 可以通過升級把底層渲染從 skia 更新到 Impeller」,這次 Harmony Next 提到的應該是替換為 “鴻蒙內核”與“華為方舟圖形引擎”。
  • 類似 Android 的 bootloader 是支持 A/B 更新,可用于引導和傳遞需要加載對應內核:https://source.android.com/devices/tech/ota/ab/ab_implement?hl=zh-cn

以上這個主要是從技術層面介紹「一個人如何舉起自己來」的實現,僅作為猜測,不一定是鴻蒙的路子

另外,華為現存高通芯片和麒麟芯片的機器,這些機器如何通過 OTA 升級支持到 Harmony Next ?麒麟不必說,高通如何可以直接說升級兼容?

這個就要說到原本 AOSP 里面的 HAL(Hardware Abstraction Layer) 層的作用了,例如在 Android 8.0之后,framework 與 hal 進行了解耦, framework 存在于 system.img,hal 存在于 vendor.img,進行版本升級時,分為兩次升級。

SoC 廠商的兼容,可以通過適配 hal, 將修改打包到 vendor.img, 生成OTA 升級包,推送到手機進行 OTA 升級(framework發生改變,hal 層發生改變) 。

具體可以參考: https://m.elecfans.com/article/2024563.html

這里有個關鍵詞,SoC 廠商的兼容,也就是到時候可能會是 mate40系列(麒麟)更早可以更新到 next,mate50 系列(高通)會相對晚一些。

剝離后的鴻蒙OS怎么樣?和原本 Android 還像嗎?開發方式如何?

這個問題大家還是比較關心,用評論區一位網友的總結就是:

ArkUI這玩意大量使用了napi, 邏輯幾乎都封裝在c++寫的framework里,說個笑話: 用他們的彈框組件改個圓角值都改不了,因為底層寫死了。

framework大量借鑒了Android(看ability啟動源碼可以很好復習activity啟動的八股文), 權限和組件封裝又和iOS靠齊,可以說非常適合跨平臺開發踩坑。”

所以從 java 層面 Android framework 等的代碼已經不見了,Harmony Next 的 framework 基本封裝在 c++ 層,與平臺調用多數走 ffi 調用。

是不是有一種熟悉的味道?嗯,是 Flutter 的味道。

開發體驗上類似 Flutter/Compose 項目,如果硬要說,可能會是像是 SwiftUl 和 Compose 的優點縫合?主要是聲明式 UI開發,然后鏈式寫法和組件命名對于客戶端開發來說應該會很有熟悉感。

開發構建上,鴻蒙 Next 使用的 ArkTS 類似 Dart 構建模式,都是 AOT ,ArkTS 通過 ArkCompiler 構建并優化成機器碼:

ArkCompiler 利用 ArkTS 的靜態類型信息,進行類型推導并生成對象描述和內聯緩存,加速運行時對字節碼的解釋執行;AOT(Ahead-of-Time)Compiler 利用靜態類型信息直接將字節碼編譯生成優化機器碼…

之所以提一嘴這個編譯,是因為有如下圖類似的評論,質疑 ArkTS 是一種網頁應用的,所以也就當純做一個回應,雖然叫 TS,但是其實它并不能「直接」開發 Web。

順帶提一句,華為這次還是「明確」指出了,ArkTS 是在 TypeScript(簡稱TS)的基礎上進行自研的開發語言,就是不知道這個到了自媒體宣傳上會如何解讀了。

接著不得不提一句的就是 「三棵樹」,Flutter 開發應該對于這個很熟悉,官方的解釋是:

ArkUI3.1通過編譯期生成特定函數的方式將 UI 組件更新和數據變更進行細粒度地綁定,實現 UI 更新 Diff 算法從 COMPONENT 和 ELEMENT 樹形結構對比升級為單節點 NODE的函數式更新

從這里看 ,其實 「ArkUI 對 Flutter 開發者確實很友好」

最后,ArkUI 還提供了一些「高級UI組件擴展能力」大概就是:

  • XComponent 組件的 C++ 自繪制引擎接入(比如游戲引擎)能力
  • 基于Web組件的 HTML5/Web 的渲染能

主要是為了滿足開發者在游戲、相機、地圖、瀏覽器等復雜應用場景的開發訴求,降低了這類應用移植的門檻。

關于這部分有待后續大家的體驗報告了,可以理解此時大概就是「又不是不能用」的情況。

是否會關閉側載?

其實這個問題我也很好奇,不過我也不確定,Harmony Next 是不是會讓自己生態「對齊」 iOS ,因為這個決定很大程度會影響它以后的命運。

我這里不負責任的猜測是很大概率會關閉側載,先說明這個我沒有任何依據,僅僅是一個猜測,因為既然都不兼容 Android ,那么作為一個全新的系統模式下,構建生態可以會因為「安全」和「合規」等考慮,按照目前「大環境」的理解,我更傾向它最終會關閉側載。

我只是更傾向最終可能會關閉側載,但是我不希望關閉側載。

現有 App 如何兼容 Harmony Next ?

純原生應用(Java/Kotlin + XML)模式直接兼容的可能性,或者說兼容方案目前我是看不到直接兼容的可能性,因為沒了 JVM ,沒了AOSP ,非響應式布局開發,直接兼容的成本不低于從頭再來。

跨平臺框架支持上:

  • Cordova/Ionic 等本身只需要 WebView 和 JSBridge 等相關支持,兼容反而不難,就是插件部分需要額外補充,成本相對較低
  • React Native / Weex 部分工作量偏重,前端標簽到原生控件映射的適配,還有樣式兼容會是一個「體力活」,插件生態也是一個問題
  • Flutter 因為前面提到過的種種原因,純 Flutter 兼容 Harmony Next 成本不會很高,但是未來可能會產生「分叉」,因為目前 Flutter 官方已經開始逐步采用自研 Impeller 替代 skia 渲染,這后續可能會和 Harmony Next 出現分叉,另外插件生態兼容會是一個特別頭痛的問題
  • uni-app/uts ,這個我不負責的猜測后面它自己就會直接適配了,絲毫不慌。

從更新的消息看,華為內部也主導適配目前的主流跨平臺方案,主動提供反向適配支持,估計后面就會有類似 Flutter for harmony 的社區支持,目前華為適配的跨平臺框架包括有:Flutter、ReactNative、Weex、Taro、uni-app、electron、qt 等等,都是基于 API10 (即 harmonyos next & open harmony 4 的 api),后續應該者會開源出來交給社區共建。

HDC 現場的 NEXT 展示機也有相關案例:

  • React Native的華為商城展示
  • Weex 的航旅縱橫展示
  • 京東關于Taro 展示
  • 開鴻智谷 futter 展示
  • 智慧生活 ArkUI-X 在 IOS 和安卓的跨平臺展示
  • cocos 和 Unity 適配展示

當然,就像前面提到了,核心的兼容難點,還是在于 Plugin 生態對接 native 的適配工作,這部分沒辦法一觸而就,需要共建時間。


在這里插入圖片描述

原生 xml + java/kotlin 的如何是好?

GSYVideoPlayer 有適配鴻蒙計劃嗎?

沒有

最后

好了,目前主要的問題就這些,如果有什么問題歡迎大家「心平氣和」地討論,如果有什么有用的新話題點,到時候會補充上來。

我不是「專業」的,我只是練習時長兩年半的「小黑子」。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43327.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

私密數據采集:隧道爬蟲IP技術的保密性能力探究

作為一名專業的爬蟲程序員,今天要和大家分享一個關鍵的技術,它能夠為私密數據采集提供保密性能力——隧道爬蟲IP技術。如果你在進行敏感數據采集任務時需要保護數據的私密性,那么這項技術將是你的守護神。 在進行私密數據采集任務時&#xff…

不了解UI設計需要掌握的技能? 優漫動游

很多人聽說過UI設計行業,知道它是用來制作界面的高薪技術,但對于做UI設計需要什么技能卻不是很清楚。且看本文的分析。? 不了解UI設計需要掌握的技能? ??UI設計是英文User和interface的縮寫,是指對軟件的人機交互、操作邏輯、界…

Java基礎知識題(二)

系列文章目錄 Java基礎知識題(一) 文章目錄 系列文章目錄 前言 1. Java中的 組合、聚合和關聯有什么區別? 2. 解釋為什么Java被稱作是“平臺無關的編程語言”? 3. 簡述什么是值傳遞和引用傳遞?重點 4. 詳細闡述Java進程和線程的區別 …

Java # JVM

一、1.8之前 運行時數據區(進程共享) 運行時常量池為什么要有方法區: jvm完成類裝載后,需要將class文件中的常量池轉入內存,保存在方法區中為什么是常量: 常量對象操作較多,為了避免頻繁創建和…

圖像去雨-雨線清除-圖像處理-(計算機作業附代碼)

背景 多年來,圖像去雨已經被廣泛研究,使用傳統方法和基于學習的方法。然而,傳統方法如高斯混合模型和字典學習方法耗時,并且無法很好地處理受到嚴重雨滴影響的圖像塊。 算法 通過考慮雨滴條狀特性和角度分布,這個問…

【Leetcode】98. 驗證二叉搜索樹

一、題目 1、題目描述 給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下: 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。示例1: 輸入:root = …

馬上七夕到了,用各種編程語言實現10種浪漫表白方式

目錄 1. 直接表白:2. 七夕節表白:3. 猜心游戲:4. 浪漫詩句:5. 愛的方程式:6. 愛心Python:7. 心形圖案JavaScript 代碼:8. 心形并顯示表白信息HTML 頁面:9. Java七夕快樂:…

QT的布局與間隔器介紹

布局與間隔器 1、概述 QT中使用絕對定位的布局方式,無法適用窗口的變化,但是,也可以通過尺寸策略來進行 調整,使得 可以適用窗口變化。 布局管理器作用最主要用來在qt設計師中進行控件的排列,另外,布局管理…

Android 遠程真機調研

背景 現有的安卓測試機器較少,很難滿足 SDK 的兼容性測試及線上問題(特殊機型)驗證,基于真機成本較高且數量較多的前提下,可以考慮使用云測平臺上的機器進行驗證,因此需要針對各云測平臺進行調研、比較。 …

服裝定制小程序

如今,人們對時尚的追求已不僅僅停留在傳統的購買與穿搭上,而是更加注重個性化和定制化的需求。為滿足這一需求,喬拓云網推出了一款創新的服裝定制小程序,為用戶提供定制專屬時尚的全新旅途。 通過進入【喬拓云】后臺,用…

Ordinals 之后,以太坊銘文協議 Ethscriptions 如何再塑 NFT 資產形態

隨著加密市場的發展,NFT 賽道逐漸形成了其獨有的市場。但在加密熊市的持續影響下,今年 NFT 賽道的發展充滿坎坷與挑戰。據 NFTGO 數據顯示,截至 8 月 7 日,與去年相比,NFT 市值總計約 56.4 億美元,過去 1 年…

搜狗拼音暫用了VSCode及微信小程序開發者工具快捷鍵Ctrl + Shit + K 搜狗拼音截圖快捷鍵

修改搜狗拼音的快捷鍵 右鍵--更多設置--屬性設置--按鍵--系統功能快捷鍵--系統功能快捷鍵設置--取消Ctrl Shit K的勾選--勾選截屏并設置為Ctrl Shit A 微信開發者工具設置快捷鍵 右鍵--Command Palette--刪除行 微信開發者工具快捷鍵 刪除行:Ctrl Shit K 或…

無腦入門pytorch系列(四)—— scatter_

本系列教程適用于沒有任何pytorch的同學(簡單的python語法還是要的),從代碼的表層出發挖掘代碼的深層含義,理解具體的意思和內涵。pytorch的很多函數看著非常簡單,但是其中包含了很多內容,不了解其中的意思…

element問題總結2

20.隱藏el-calendar 的多余的日子 /deep/ .el-calendar-table:not(.is-range) td.next {display: none;}/deep/ .el-calendar-table:not(.is-range) td.prev {visibility: hidden;}/deep/ .el-calendar-table td {border: 1px solid #dfe6ec;} 21.點擊今天,上個月,下個月的時候…

深入理解內存 —— 函數棧幀的創建與銷毀

前言 一位優秀的程序員,必須對內存的分布有深刻的理解,在初學編程的時候,往往有諸如以下很多問題困擾著初學者,而通過今天的分享,我們就可以通過自己的觀察,將這些問題統統解決掉 局部變量是怎么創建的&…

keepalived集群

keepalived概述 keepalived軟件就是通過vrrp協議來實現高可用功能。 VRRP通信原理 VRRP就是虛擬路由冗余協議,它的出現就是為了解決靜態路由的單點故障。 VRRP是通過一種競選一種協議機制來將路由交個某臺VRRP路由器。 VRRP 用IP多播的方式(多播地…

微信小程序中pdf的上傳、下載及excel導出

微信小程序中pdf的上傳、下載及excel導出 pdf上傳上傳1&#xff1a;上傳2&#xff1a; pdf下載導出excel pdf上傳 上傳兩種方法&#xff1a; 上傳1&#xff1a; 1.用vant weapp組件&#xff1a; //pdf上傳--vant weapp組件 <view class"content"><van-u…

推薦算法知識

有志者&#xff0c;事竟成 1. 聯盟的含義 2. Attention 3. Transformer 4. Learning to rank的三種方式 1. point-wise 2. pair-wise 3. list-wise 5. 推薦系統中的校準&#xff08;如保序回歸等&#xff09; 6. 推薦系統中的偏差與處理&#xff08;如位置偏差等&#xff09…

C#中的泛型約束可以用在以下幾個地方?

1.泛型類型參數&#xff1a; 在定義泛型類型或泛型方法時&#xff0c;可以使用泛型約束來限制泛型類型參數的類型。這可以確保類型參數滿足特定的條件&#xff0c;從而在編譯時捕獲錯誤并提供更安全和可靠的代碼。 public class MyClass<T> where T : IComparable<T&…

【React學習】React中的setState方法

1. setState概述 setState 是React框架中&#xff0c;用于更新組件狀態的方法。 setState 方法由React組件繼承自 React.Component 類的一部分。通過調用 setState&#xff0c;可以告訴 React要更新組件的狀態&#xff0c;并觸發組件的重新渲染。 this.setState(newState, ca…