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

用Shadow编译的apk可以独立运行吗? #16

Closed
fso918 opened this issue Jun 24, 2019 · 10 comments
Closed

用Shadow编译的apk可以独立运行吗? #16

fso918 opened this issue Jun 24, 2019 · 10 comments

Comments

@fso918
Copy link

fso918 commented Jun 24, 2019

我们项目的情况是我们的app是一个宿主app,打算接入其他第三方公司的app,第三方公司的app也是能够独立安装运行的。如果第三方公司用Shadow编译他们的apk,是不是就不能独立安装运行了?

@shifujun
Copy link
Collaborator

用Shadow编译出的apk是不能独立安装运行的。但是同一份源码不应用Shadow插件,编译出的apk是可以独立安装运行的。

如果非要将插件Apk再某种场景下让用户再正常安装一次,只能考虑增量升级的方案,将两个apk的Diff算出来生成另外一个apk。当然这个我们只是设想过,我们的业务并不需要这种场景。

@fso918
Copy link
Author

fso918 commented Jun 24, 2019

我们的业务场景就是接入一些第三方公司的apk,在我们app里作为插件运行,我们只是相当于第三方cp方的一个渠道,第三方cp的apk也可能通过自有渠道去独立安装,也可能接入其他公司的app作为插件运行。是不是这种场景可能不大适合用Shadow?

@shifujun
Copy link
Collaborator

那这实际上跟我们的业务是一样的。只是不同渠道的apk用不同的编译选项编译出不同的包而已。我们只要保证不同渠道的代码是同一份就足够了。其余的问题都是自动化可以解决的,并不浪费人力。

@fso918
Copy link
Author

fso918 commented Jun 25, 2019

我们项目现在正在调研用Shadow,插件热更新和0hack还是很吸引人的。
现在我们的考虑点有一下几个,一块在这说了吧,麻烦您有时间看下。
1.没有接入文档,不清楚插件方怎么接入和接入成本怎么样,以及宿主接入文档(这个我自己可以看源码,但无法要求插件方看源码)。
2.隐私权限相关,是不是需要特殊的权限。
3.宿主支持加固吗,宿主加固后能正常加载未加固或者加固的插件吗?
先谢谢了!

@shifujun
Copy link
Collaborator

1.文档自然是应该有的。没有文档的情况下,大家不能拿来直接用也是正常的。在提供文档之前,我们会提供人工回复咨询的。这些回复也尽量是可以直接用到文档沉淀中的。
2.权限相关的问题可以这么考虑。Shadow的原理就是将插件App的代码自动重构为了宿主App的代码片段,比如插件App的Activity的onCreate方法就变成了宿主App的Activity的onCreate方法执行中的一段代码。所以Shadow没有什么神奇的地方,权限什么的如果不能通过插入代码片段达到目的,那Shadow也做不了什么。还是要在宿主App的Manifest中声明、注册。想达到神奇的目的,肯定要做Hack的事情了。
3.“加固”具体指什么不太清楚。是不是指Proguard做的事情?这个也参考上一条的解释,插件变成了代码片段,如果这个加固过程是一致的,比如混淆的名字保持了同样的规则,应该也没问题。

@fso918
Copy link
Author

fso918 commented Jun 25, 2019

想在我们项目里作为宿主接入Shadow,然后自己写个demo作为插件接入Shadow,该怎么做呢?只能自己看源码吗?想比较快速的验证下Shadow和我们项目的构建是否兼容,以及需要跑一下公司的隐私测试。

@shifujun
Copy link
Collaborator

那我觉得Shadow的Sample已经满足需求了。
https://github.com/Tencent/Shadow/tree/dev/projects/sample#%E6%BA%90%E7%A0%81%E4%BE%9D%E8%B5%96sdk%E7%9A%84sample
只需要把sample-host替换成你们的宿主程序就可以了。

@fso918
Copy link
Author

fso918 commented Jun 25, 2019

我们自己的项目不是个壳工程,代码比较多,不好替换,我先自己接入看看,有问题再说。
辛苦您解答,谢谢!

@shifujun
Copy link
Collaborator

你们的项目不是个壳工程很正常的。不用替换什么。

你可以参考
https://github.com/Tencent/Shadow/tree/dev/projects/sample/maven/host-project
maven接入的这个sample。这个工程里演示了怎么在一个原本不用Shadow的宿主工程中加入一个aar库introduce-shadow-lib,在这个库中加入引入Shadow所需的代码。

@fso918
Copy link
Author

fso918 commented Jun 25, 2019

好的,谢谢!

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