APP中嵌入APP可以吗?就像支付宝里嵌入了饿了么,这样是怎么操作的?

看了很多答案,都说是嵌入的小程序,其实支付宝之前的版本里面嵌入的就是饿了吗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,还可以是其他的文件、资源等等。

上面简单介绍安卓插件化的原理,如有说的不好或不对的地方,还请大佬指教!

我是非著名攻城狮,希望我的回答对您有用,感谢您的关注与支持!




这不是嵌入,你可以理解为它就是个浏览器,然后浏览器中可以打开多个页面浏览。原生app开发中,是无法内嵌其他页面,这种app中内嵌h5页面,这叫混合开发。

比较典型的你可以浏览京东客户端首页,页面主题经常换,如果说是原生开发,那用户岂不烦死了?一有活动就更新,那怕是得喷人了。然后这时候就引入了内嵌h5页面,此时你可以理解app就是个壳子,然后做好适配,将页面放进壳子里面,这就成了可以轻松更换主题页面而不用发版的问题了。

总而言之,言而总之,简而言之,将app理解为浏览器,浏览器可以打开多页面,这就成了大家所看到的‘内嵌’。

关注我,带你了解程序开发日常。

小西瓜是我,我就是小西瓜胖胖胖





1. “App 中嵌入 App ”是可以的。

2. “支付宝中嵌入了饿了么”应该是支付宝 App 嵌入的(饿了么工作人员用支付宝小程序开发的)饿了么小程序。

3. 这种 App 中嵌入小程序的类似场景还有微信 App 中 嵌入了微信读书小程序。

4. 除了在 App 中嵌入小程序实现这种效果,还可以通过 A App 中嵌入B App 中相关功能模块实现。

如今日头条 App 中嵌入西瓜视频App中的视频模块,这也是你说的 App 中嵌入了 App 的一种体现。




这个是可以使用的,目前的话如果要实现的话,在你的APP里访问其他的那个APP上面的一个数据,那么有几种方法,一个的话是我们的这个使用接口调用的方式,那么两个APP之间,需要把这个数据打通,他就需要一个接口传递这个数据,有这个接口传递数据之后,那么我们就能够打通两个APP的一个数据交流,并且能够把另一个APP的一个所需要的一个界面嵌入到自己的这个APP里面,还有一种方法的话就是目前像微信和支付宝他们都支持制作这个小程序,那他们在这个微信或者支付宝,按照他们的一个要求,文档你要制作小程序的话,那也可以在支付宝上使用的,除了支付宝或者微信之外,我们平时的这个,App可能更多使用的就是接口调用的这个方式。另外如果你这个不需要这个数据交流的话,只需要说跳转到另外一个APP的话,也不用做这个接口,就直接做一个超链接,然后能够跳过去就行了,但是这样子就没有涉及到一个数据交互,也就是跳转到第三方的一个APP之后,你是没办法知道用户的一个轨迹和活动内容。在实际应用中这种的话使用并不是太多。




App内嵌App 是可以的

小程序

小程序嵌入,比如题主说的支付宝内嵌饿了么。另外还有头条里面嵌入西瓜视频,微信里面有腾讯视频之类的,手机百度嵌入有钱花小程序。

这类实现的话技术成本不高,需要对接各个平台的小程序接口就可以了。

app内嵌(Android)

这种是另外一种技术,插件化技术,对应的也有一套插件化框架,可以去Github 上搜索,市面上有好多大型app也用到了这种技术,比如爱奇艺 等。




H5单点登录。目前本人做的就是这样的项目




是一个入口,跳转到了是小程序。不是嵌入的app




小程序应该也是网页,也就是前端,




不是嵌入 只是支付宝提供了一个入口可以跳转到饿了吗开发人员开发的饿了么支付宝小程序




我们目前大多数功能性app实际上还是一个个的网页

app内部嵌入其他app其实就是一个链接跳转而已

展开阅读全文

页面更新:2024-03-27

标签:宿主   西瓜   虚拟机   插件   逻辑   加载   接口   操作   页面   方式   文件   程序   方法   数据   系统   资源   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top