最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MIUI平行視界全探索

2023-02-13 17:00 作者:御坂初琴  | 我要投稿

查看如何打包到 ROM 包的請直接跳轉(zhuǎn)到第 4 章

#?1.MIUI 的平行視界概述

MIUI 的平行視界分為兩個時代,基于安卓 11 的魔窗版時代和基于安卓 12 / 安卓 13 的官改時代。

所謂魔窗版時代,MIUI 的平行視界使用了 magicWindows 方案,該方案同樣用在了安卓 10,安卓 11 和安卓 12 版的鴻蒙,ColorOS 以及 OriginOS 上。魔窗方案的優(yōu)點是,即使應(yīng)用廠商什么都不做,依舊可以實現(xiàn)兩種預(yù)設(shè)模式的平行視界邏輯。對于應(yīng)用廠商來說,這是最方便的。

所謂官改版時代,MIUI 使用了安卓 12L 的Activity?Embedding?方案。官方方案的特點是,廠商必須主動適配,自己寫配置文件才能實現(xiàn)平行視界。

小米過于相信谷歌的號召力,而事實上根本沒幾家 APP 適配官方方案,所以無奈之下,小米只能親自下場,替常見的 APP 寫配置文件,并增加一些默認(rèn)的窗口邏輯。這種在官方接口上自己再修改補全的方案,我稱之為官改方案。

關(guān)于魔窗方案和官方方案的更多區(qū)別,我將會在接下來的時間制作一期視頻,通過視頻的方式進行更直觀的演示。讀者可以關(guān)注我的 B 站賬號。

#?2. 魔窗版的實現(xiàn)方法

魔窗版的平行視界由系統(tǒng)中的兩個文件進行控制,分別是應(yīng)用列表的 magic_window_setting_config.xml,和配置應(yīng)用橫屏屬性的 magicWindowFeature_magic_window_application_list.xml 。

這里我們簡單解析一下兩個文件的內(nèi)容。

應(yīng)用列表位置?/data/system/users/0/magic_window_setting_config.xml:

參數(shù)詳解:

魔窗適配對話框長這樣:

應(yīng)用配置位置?/data/system/magicWindowFeature_magic_window_application_list.xml

這里的參數(shù)就需要詳解一下了:

所以,添加自定義的軟件,以及修改已有軟件的配置,只需要先在 magic_window_setting_config.xml 中添加一行聲明,然后再在 magicWindowFeature_magic_window_application_list.xml 中為它配置一個橫屏方案即可。具體請自行實驗。

這里得夸一句安卓 11 的 MIUI 工程師,官方版適配就為 3200 余款應(yīng)用適配了橫屏配置,當(dāng)年雷軍發(fā)布會上的那句我們?yōu)?3000 款應(yīng)用進行了適配也不是空話。

但側(cè)面也證明了,魔窗平行視界方案的適配簡介,方便,快速,成本低,支持的配置項簡單有效,功能全面,非常適合擴展平行視界生態(tài)。

#?3. 官改版的實現(xiàn)方法

官改版的平行視界和魔窗版類似,也是由系統(tǒng)中的兩個文件進行控制,分別應(yīng)用列表 embedded_setting_config.xml,和應(yīng)用橫屏配置 embedded_rules_list.xml 。

應(yīng)用列表位置?/data/system/users/0/embedded_setting_config.xml

不需要太多解釋,一看就懂。

應(yīng)用配置列表有兩個,一個在?/product/etc/embedded_rules_list.xml,是出廠配置,安卓 12 版的 MIUI 有效;另一個是?/data/system/cloudFeature_embedded_rules_list.xml,安卓 13 版的 MIUI 有效。

參數(shù)解析:

我們不難發(fā)現(xiàn),官改版的配置文件比魔窗版復(fù)雜很多,可以詳細(xì)配置 12L 官方的 embedding windows 中的幾乎所有內(nèi)容。但是這個適配工程量極大,所以就有了這個神奇的一幕:

也就是說,MIUI 工程師在寫了不到 73 個軟件后,決定對其他軟件不再手動寫橫屏配置了,就非常的簡 (tou) 潔 (lan)。當(dāng)然官方平行視界適配成本高(連購物模式都沒有現(xiàn)成接口)也是一個原因。

MIUI 工程師為安卓 12 和安卓 13 版的 MIUI For Pad 共添加了約 1912 款應(yīng)用,比安卓 11 的 MIUI For Pad 的 3300 余款少了接近一半。

添加自定義的軟件,以及修改已有軟件的配置,依舊只需要先在 embedded_setting_config.xml 中中添加一行聲明,然后再在 embedded_rules_list.xml 配置中為它配置一個橫屏方案即可。但是查找每個頁面的 activity 工作量巨大,所以我們也可以用簡 (tou) 潔 (lan) 的寫法來實現(xiàn)平行視界,只給它配置 splitRadio 等幾個簡單參數(shù)即可。

比如在我的模塊里,我寫成這樣:

就可以快速的添加自己想增加平行視的應(yīng)用了。

以下技術(shù)分享來自 @一只無言菌:

如果我們有時間也可以對一個軟件進行精修,比如像這樣:

這里有一個奇技淫巧:

如果應(yīng)用不支持 activityRule="",則可以考慮把首頁和它能跳轉(zhuǎn)到的下一個 activity 加入到相互覆蓋就可以實現(xiàn)類似 activityRule="" 的功能。以知乎 APP 為例:

#?4. 如何打包到 ROM 包

解包文件對應(yīng)分區(qū),修改對應(yīng)的文件,然后復(fù)制到原路徑下覆蓋原文件,重新打包分區(qū)即可。

對于安卓 11 版的 MIUI For Pad,需要覆蓋以下兩個文件。

/data/system/users/0/magic_window_setting_config.xml

/data/system/magicWindowFeature_magic_window_application_list.xml

對于安卓 12 / 安卓 13 版的 MIUI For Pad,需要覆蓋以下三個文件。

/data/system/users/0/embedded_setting_config.xml

/product/etc/embedded_rules_list.xml

/data/system/cloudFeature_embedded_rules_list.xml

所有文件可以通過解包《完美橫屏應(yīng)用計劃》模塊獲得。

#?5. 如何打包成模塊

由于這些文件都不在 system 分區(qū),所以傳統(tǒng)模塊的文件替換法并不會生效。這里我們采用 post-fs-data.sh 來實現(xiàn)這個功能。

在 post-fs-data.sh 中,只需要用簡單的移動和復(fù)制命令即可實現(xiàn)對文件的替換。

在舊版的模塊中,我們使用 mv 語句直接復(fù)制這個文件,但是這樣會導(dǎo)致云控后文件失效。

以上文件會被 MIUI 服務(wù)器云控,所以我嘗試一些方法來干掉云控。比如最簡單的權(quán)限法,給這些文件的權(quán)限限制為 440,使 system 不再對它有修改的權(quán)限,以為從一定程度上解決云控的問題。事實證明云控直接替換文件,關(guān)閉它的寫入權(quán)限幾乎沒有用。

所以我們重新分析一下云控原理。在用戶使用平板時,云控 APP 下載新的配置文件到你的平板電腦,在下次啟動時加載這個新文件,實現(xiàn)云控。也就是說,我們只要趕在加載前,把文件替換掉,就可以了。新版模塊里我的文件改成這么寫:

在每次系統(tǒng)啟動前,用 cp -l 文件實現(xiàn)從模塊內(nèi)文件到配置文件的軟鏈接,等待系統(tǒng)啟動時,就會加載我們想要的它加載的文件,從而實現(xiàn)干掉云控。

當(dāng)然這樣也帶來一個問題,如果需要修改這個配置文件,你需要修改的是模塊內(nèi)的文件而不是模塊外的文件,路徑為 /data/adb/modules/MIUI_MagicWindow+/common/

這樣替換的文件不會在模塊卸載時被替換回去,所以我們需要寫一個 uninstall.sh,并在其中加入文件替換回去的命令,以及還原文件讀者權(quán)限的命令(魔窗配置文件會在刪除后重啟自動生成,直接刪除就行)

至此,一個模塊就寫好了。

由于B站更新專欄有次數(shù)限制,該文檔不能過多次編輯。最新版的文章請看這個:https://ybcq.github.io/2023/02/12/%E3%80%90%E5%8E%9F%E5%88%9B%E6%95%99%E7%A8%8B%E3%80%91MIUI%E5%B9%B3%E8%A1%8C%E8%A7%86%E7%95%8C%E5%85%A8%E6%8E%A2%E7%B4%A2/

MIUI平行視界全探索的評論 (共 條)

分享到微博請遵守國家法律
鹰潭市| 大洼县| 余庆县| 嘉荫县| 汪清县| 二连浩特市| 麦盖提县| 宜君县| 金阳县| 东兰县| 夏邑县| 靖江市| 青河县| 阳西县| 长岛县| 秦皇岛市| 加查县| 沂水县| 高邑县| 会泽县| 玉门市| 大宁县| 洛扎县| 叶城县| 浠水县| 乳源| 沧州市| 玉溪市| 康马县| 松江区| 安仁县| 阜康市| 寿宁县| 平武县| 朝阳区| 江门市| 盈江县| 出国| 虹口区| 稷山县| 温州市|