Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

插件访问宿主的类需要一个一个写在白名单里吗 #78

Closed
EzioEasley opened this issue Jul 31, 2019 · 6 comments
Closed

插件访问宿主的类需要一个一个写在白名单里吗 #78

EzioEasley opened this issue Jul 31, 2019 · 6 comments

Comments

@EzioEasley
Copy link

我的宿主和插件有一个相同的依赖A,在插件里我使用了compileOnly A,并在插件的gradle配置里把需要用的类写在白名单里了。我的问题是,插件需要从宿主中访问的类很多,是要一个一个写在白名单里吗?有没有其他更快捷或者更自动的方式?先谢谢啦

@shifujun
Copy link
Collaborator

目前我们实现的功能是在白名单中指定类的完整包名,而不是完整类名。

这样做主要的原因是这样满足了我们自身业务的需求。

我理解你的需求是对一个jar包里的所有类都列入白名单。这种需求我建议要另外实现一个完整匹配类名的白名单逻辑,然后白名单的生成在编译期通过Gradle任务分析jar包来生成。

另一种可能的办法是用Proguard将这个jar包的包名重新组织在同一个包下。

再回过头来说这个需求本身不一定是合理的,插件依赖过多的宿主类就跟宿主过于耦合了,应该考虑将插件要使用的功能定义为接口,然后让那个jar包里的一堆类实现这个接口。这样只暴露一个接口就可以了。

@EzioEasley
Copy link
Author

谢谢!
还有一个问题请教,宿主和插件都依赖相同的第三方库,也是在白名单里加入已经打包到宿主里的第三方库的包名吗?

@shifujun
Copy link
Collaborator

shifujun commented Aug 1, 2019

是的。但你这么问有些奇怪,第三方库和你前面说的相同的依赖A没什么区别。编译后的程序中区分不出来哪些是自己写的类,哪些是第三方的类。

建议你将java的编译和运行原理再巩固一下,这对灵活运用插件技术很有用。

@EzioEasley
Copy link
Author

嗯嗯,好的谢谢 这一块我再去看看。
我们在插件代码中使用kotlin后,打包以后classes.dex会相比只用java增大1MB左右,这一块请问有针对kotlin的插件包的瘦身优化吗?还是说需要依靠业务方自己保证下载速度?

@shifujun
Copy link
Collaborator

shifujun commented Aug 1, 2019

插件包瘦身以保证下载速度肯定要业务自己做。kotlin的runtime是可以用proguard优化的,增量不大的。还有可以通过拆分插件包,边下载边加载来优化。

@shifujun
Copy link
Collaborator

shifujun commented Nov 4, 2019

#148 已改进通配符定义白名单。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants