Shadow
Shadow copied to clipboard
ShadowActivity,ShadowApplication,ShadowInstrumentation中缺少方法
@shifujun 这些方法都需要自己去实现吗? 1.getString()这种方法呢,在Context中已经定义为了final了,怎么去搞? 2.还有下面的v7,v4的这些方法你们项目中有遇到吗?都有自己去实现吗
Class com.tencent.shadow.core.runtime.ShadowActivity中缺少方法: registerComponentCallbacks:(Landroid/content/ComponentCallbacks;)V被这些类调用了:
unregisterComponentCallbacks:(Landroid/content/ComponentCallbacks;)V被这些类调用了:
getString:(I)Ljava/lang/String;被这些类调用了:
obtainStyledAttributes:([I)Landroid/content/res/TypedArray;被这些类调用了: android.support.v7.app.ActionBarDrawerToggleHoneycomb android.support.v4.app.ActionBarDrawerToggle getText:(I)Ljava/lang/CharSequence;被这些类调用了: android.support.v4.app.ShareCompat$IntentBuilder getString:(I[Ljava/lang/Object;)Ljava/lang/String;被这些类调用了:
Class com.tencent.shadow.core.runtime.ShadowApplication中缺少方法: getString:(I)Ljava/lang/String;被这些类调用了:
getProcessName:()Ljava/lang/String;被这些类调用了:
Class com.tencent.shadow.core.runtime.ShadowInstrumentation中缺少方法: callActivityOnPause:(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V被这些类调用了:
callActivityOnResume:(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V被这些类调用了:
callActivityOnSaveInstanceState:(Lcom/tencent/shadow/core/runtime/ShadowActivity;Landroid/os/Bundle;)V被这些类调用了:
callActivityOnStart:(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V被这些类调用了:
callActivityOnStop:(Lcom/tencent/shadow/core/runtime/ShadowActivity;)V被这些类调用了:
这些方法应该都是通用的,不管谁实现了都欢迎PR回来。
final的方法虽然不能override,但是可以修改调用的代码。比如原本调用的是context.getString()',我们可以把它修改成
ShadowContext.getString(context)静态方法调用,把原本被调用的对象当作参数传给静态方法。这样静态方法里想怎么修改这个调用都可以了。Shadow很多Transform都是这样做的。可以搜一下
redirectMethodCallToStatic`。
我这边要实现这些方法,也只能抽时间。而且现在新增的修改都尽量配上自动化测试,所以写起来更费事一点。我们可以合作完成这些方法的支持。像这样的提交: 0e5d9d8d 2b494707
另外你提到的ShadowActivity缺少的方法,如果它们来自于Context类型,应该也不需要特别支持。因为ShadowActivity是继承自Context类型的。出现这种错误的原因可能是你的compileSdk版本较低,Context类型上没有这些新增的方法。
@shifujun 是的,还有下面这种support包的也一样吧 obtainStyledAttributes:([I)Landroid/content/res/TypedArray;被这些类调用了: android.support.v7.app.ActionBarDrawerToggleHoneycomb android.support.v4.app.ActionBarDrawerToggle getText:(I)Ljava/lang/CharSequence;被这些类调用了: android.support.v4.app.ShareCompat$IntentBuilder
@shifujun 是的,还有下面这种support包的也一样吧 obtainStyledAttributes:([I)Landroid/content/res/TypedArray;被这些类调用了: android.support.v7.app.ActionBarDrawerToggleHoneycomb android.support.v4.app.ActionBarDrawerToggle getText:(I)Ljava/lang/CharSequence;被这些类调用了: android.support.v4.app.ShareCompat$IntentBuilder
这个是怎么改的