weixin_39982568
weixin_39982568
2020-11-25 07:53

请问如果dynamic-feature依赖的宿主中的资源id如果变化了,同一个dynamic-feature包如何同时支持新版本宿主和老版本宿主?

问题的具体场景如下: 1、dynamic-feature包依赖了宿主中的一个资源,例如一个layout或者string等(原理类似)

2、宿主因为增加功能,例如新增了布局资源,导致这个被依赖的layout的资源id发生了变化

3、那么同一个hynamic-feature包如何同时支持现网老版本的宿主app,以及增加新功能的新版本的宿主app? 因为dynamic-feature包中引用的宿主的那个layout的资源id是跟随宿主编译时,对应的宿主版本layout的id,这个和现网老版本的layout的id是不同的

我们业务使用插件化的一个很重要的目的是:通过插件方式为老版本的宿主APP增加功能。 如果这种方式不支持,业务使用插件化的价值就有所降低了。目前看宿主资源id变化的可能性还是很大的,而且不只是自定义资源,android x的资源id,有可能因为宿主修改,也会导致id的变化。

该提问来源于开源项目:iqiyi/Qigsaw

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • weixin_39603995 weixin_39603995 4月前

    宿主提供获取资源ID方法, dynamic-feature通过宿主提供的方法获取资源, 或者dynamic-feature通过资源名字获取资源id,然后根据资源id获取资源

    点赞 评论 复制链接分享
  • weixin_39932838 weixin_39932838 4月前

    问题的具体场景如下: 1、dynamic-feature包依赖了宿主中的一个资源,例如一个layout或者string等(原理类似)

    2、宿主因为增加功能,例如新增了布局资源,导致这个被依赖的layout的资源id发生了变化

    3、那么同一个hynamic-feature包如何同时支持现网老版本的宿主app,以及增加新功能的新版本的宿主app? 因为dynamic-feature包中引用的宿主的那个layout的资源id是跟随宿主编译时,对应的宿主版本layout的id,这个和现网老版本的layout的id是不同的

    我们业务使用插件化的一个很重要的目的是:通过插件方式为老版本的宿主APP增加功能。 如果这种方式不支持,业务使用插件化的价值就有所降低了。目前看宿主资源id变化的可能性还是很大的,而且不只是自定义资源,android x的资源id,有可能因为宿主修改,也会导致id的变化。

    dynamic-feature 是和版本绑定的,如果宿主变了,插件是会重新打包的

    点赞 评论 复制链接分享
  • weixin_39982568 weixin_39982568 4月前

    这样的话,插件会对宿主有个隐含的依赖,从设计上,插件和宿主分离的就不是那么彻底了

    点赞 评论 复制链接分享
  • weixin_39526872 weixin_39526872 4月前

    CI 上保存上次构建的产物文件,比如 mapping ,res id 等,本次构建时 apply ,理论上可以 不过没实践过 :)

    点赞 评论 复制链接分享
  • weixin_39982568 weixin_39982568 4月前

    我觉得只能在宿主中使用固定资源id的方法(aaptOption --stable-ids)来规避此问题了,保证宿主中已有的资源id不在变化,这样,插件依赖的时候,就可以保持兼容性

    点赞 评论 复制链接分享

为你推荐