Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.17k stars 3.34k forks source link

Tinker跟React Native冲突 #180

Closed pinkelf closed 7 years ago

pinkelf commented 7 years ago

Tinker这边并没有直接继承自Application的逻辑,自己测试的结果,如果使用Application的话,会有不定的crash。 但是在React Native中,需要Application去继承ReactApplication接口。在RN源码中,有如下的代码: return ((ReactApplication)this.getPlainActivity().getApplication()).getReactNativeHost(); 通过Activity获得Application,然后强行转型为ReactApplication。

请问一下,同时集成Tinker和React Native的话,该怎么解决这个问题呢?Tecent自己有遇到这种情况吗?

shwenzhang commented 7 years ago

这边尝试一下RN看看

shwenzhang commented 7 years ago

ReactApplication 只是一个Interface,而且没有找到强转的代码。

pinkelf commented 7 years ago

强转的代码在ReactActivityDelegate里面。官方的注释里说,可以通过override这个类,去回避这种情况。。。我还在试

shwenzhang commented 7 years ago

我是在react-native的代码全文搜索的,没找到

pinkelf commented 7 years ago

override完了,是这个样子。简单测试了一下,是ok的。 如果还有人遇到有相同的问题,这样子处理一下,就不用去继承ReactApplication接口了。 忘记说了,我的RN版本是0.36,ReactApplication是在0.29版本以后引入的。

public class BaseReactActivityDelegate extends ReactActivityDelegate { /* * 重写getReactNativeHost,使用静态变量,修复不能使用ReactApplication的问题 * @return / @Override protected ReactNativeHost getReactNativeHost() { return BaseReactHost.get(); } }

gzfgeh commented 7 years ago

能详细说一下怎么解决的吗?

William353 commented 7 years ago

继承ReactActivity,重写createReactActivityDelegate 方法就可以了