欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

APP中嵌入APP可以嗎?就像支付寶里嵌入了餓了么,這樣是怎么操作的?

傅智翔2年前19瀏覽0評論

看了很多答案,都說是嵌入的小程序,其實支付寶之前的版本里面嵌入的就是餓了嗎APP,APP中嵌入APP是可以的,下面具體說說實現原理。

使用插件化技術實現APP嵌入APP

  • 安卓系統加載APP的原理

安卓開發語言是JAVA,當然現在有kotlin了,這里我就拿java來說吧。

我們開發編寫的java文件會被編譯成class文件,然后才能被java虛擬機加載解析并運行。

那安卓使用的是Dalvik虛擬機,它可執行不了class文件,所以安卓編譯器會把java文件編譯成dex文件,才能被Dalvik虛擬機是加載解析運行。

那Dalvik虛擬機時候如何加載dex文件的呢?

Android支持動態加載的兩種方式是:DexClassLoader和PathClassLoader。DexClassLoader可加載jar/apk/dex,且支持從SD卡加載;

PathClassLoader只能加載已經安裝在Android系統內APK文件。

PathClassLoader的限制要更多一些,它只能加載已經安裝到Android系統中的apk文件,也就是/data/app目錄下的apk文件。其它位置的文件加載的時候都會出現ClassNotFoundException。

了解了基本的加載方法之后,就可以安卓這套方法,實現加載邏輯,達到運行apk的目的。

  • 實現加載邏輯

加載邏輯需要宿主APP去實現的,然后提供使用文檔給插件方調用。

如何實現加載邏輯,簡單來說就是根據系統的邏輯負責一套就ok了。

安卓包下面有asset資源、raw資源、圖片資源、xml文件、dex文件等等。

這些資源和文件的加載都需要寫一套加載邏輯,大致和系統的相同。

宿主app可以使用系統的加載方法,而插件方只能使用宿主提供的加載方法,否則會報錯崩潰。

  • 插件化的兩個加載方式

1.隨宿主APP一起打包成apk,系統會將插件當成文件進行編譯。這種方式比較少,首先這種內嵌的方式,完全可以用模塊化代替,其次是不支持動態更新。

2.提供下載地址給宿主app,需要用到插件時直接下載到SD卡,然后進行加載解析。這種支持動態化更新,也就是只要提供個接口給宿主app,如果接口返回需要更新,那這個時候在重新下載插件。

基本上都偏向于第二種加載方式。

插件化方式的好處

1.減少app包體積

2.便于分工管理,解耦

3.動態更新,減少發版

...

總結

APP嵌入APP是可以通過插件化來實現的,并且在大型項目插件化實用非常頻繁,不只是加載app,還可以是其他的文件、資源等等。

上面簡單介紹安卓插件化的原理,如有說的不好或不對的地方,還請大佬指教!

我是非著名攻城獅,希望我的回答對您有用,感謝您的關注與支持!