Open qujc opened 4 years ago
您好,我项目中用到了aspectj,导致补丁包失效,没有崩溃现象,就是无法加载补丁代码,请问大佬们遇到过此等问题吗?该如何解决?盼回复~
异常类型:打补丁包时异常
Robust版本:如:0.4.91
Gradle版本:5.11 Gradle插件版本:3.4.1
Aspectjx版本:com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.5
系统:Linux
细节描述:
我在项目中的测试代码比较简单,只是在MainActivity的updateTabStatus方法中加了一句ToastUtil.showToast("hotfix method updateTabStatus222"); 具体代码:
MainActivity
updateTabStatus
ToastUtil.showToast("hotfix method updateTabStatus222");
@Modify public void updateTabStatus(int position) { int color = mTabTextSelectColor; int showType = mShowTypeArray[position]; mFragmentType = showType; resetTab(); viewPager.setCurrentItem(position, false); if (SkinUtil.checkMainTab()) { loadingSkin(); return; } switch (showType) { case FRAGMENT_TYPE_HOME: mIvTabRent.setImageResource(R.drawable.icon_tabbar_home_32_seleted); mTvTabRent.setTextColor(color); break; case FRAGMENT_TYPE_ZIRUYU: mIvTabYu.setImageResource(R.drawable.icon_tabbar_map_32_seleted); mTvTabYu.setTextColor(color); break; case FRAGMENT_TYPE_MINSU: mIvTabLvju.setImageResource(R.drawable.icon_tabbar_owner_32_seleted); mTvTabLvju.setTextColor(color); break; case FRAGMENT_TYPE_SERVICE: mIvTabService.setImageResource(R.drawable.icon_tabbar_discover_32_seleted); mTvTabService.setTextColor(color); break; case FRAGMENT_TYPE_MY: mIvTabMy.setImageResource(R.drawable.icon_tabbar_me_32_seleted); mTvTabMy.setTextColor(color); ToastUtil.showToast("hotfix method updateTabStatus222"); break; } if (showType != FRAGMENT_TYPE_MINSU) {//通知暂停视频播放 EventBus.getDefault().post(new VideoEvent(0)); EventBus.getDefault().post(new OwnerHomePageEvent(0)); } }
不用aspectj时补丁包可以生效,反编译后发现生效的补丁包比无效的补丁包多了一个com.meituan.robust.patch.HomePageFragmentInLinePatch.class 另外,MainActivityPatch文件内容也不同, 无效的补丁包中的MainActivityPatch文件如下:
com.meituan.robust.patch.HomePageFragmentInLinePatch.class
package com.meituan.robust.patch; import android.util.Log; import com.meituan.robust.utils.EnhancedRobustUtils; import com.ziroom.ziroombi.performance.apptrace.MethodAspect; import com.ziroom.ziroomcustomer.MainActivity; import org.aspectj.a.a.a; import org.aspectj.a.a.b; import org.aspectj.a.b.e; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.b; public class MainActivityPatch { MainActivity originClass; public MainActivityPatch(Object paramObject) { this.originClass = (MainActivity)paramObject; } public Object[] getRealParameter(Object[] paramArrayOfObject) { if (paramArrayOfObject == null || paramArrayOfObject.length < 1) return paramArrayOfObject; Object[] arrayOfObject = new Object[paramArrayOfObject.length]; for (int i = 0; i < paramArrayOfObject.length; i++) { if (paramArrayOfObject[i] instanceof Object[]) { arrayOfObject[i] = getRealParameter((Object[])paramArrayOfObject[i]); } else if (paramArrayOfObject[i] == this) { arrayOfObject[i] = this.originClass; } else { arrayOfObject[i] = paramArrayOfObject[i]; } } return arrayOfObject; } public void updateTabStatus(int paramInt) { JoinPoint.StaticPart staticPart = (JoinPoint.StaticPart)EnhancedRobustUtils.getStaticFieldValue("Y", MainActivity.class); Log.d("robust", "get static value is ajc$tjp_17 No: 5"); JoinPoint joinPoint = (JoinPoint)EnhancedRobustUtils.invokeReflectStaticMethod("makeJP", e.class, getRealParameter(new Object[] { staticPart, this, this, EnhancedRobustUtils.invokeReflectStaticMethod("intObject", b.class, getRealParameter(new Object[] { new Integer(paramInt) }, ), new Class[] { int.class }) }), new Class[] { JoinPoint.StaticPart.class, Object.class, Object.class, Object.class }); MethodAspect methodAspect = (MethodAspect)EnhancedRobustUtils.invokeReflectStaticMethod("aspectOf", MethodAspect.class, getRealParameter(new Object[0]), null); Object object2 = EnhancedRobustUtils.invokeReflectStaticMethod("intObject", b.class, getRealParameter(new Object[] { new Integer(paramInt) }, ), new Class[] { int.class }); Log.d("robust", " inner Class new No: 6"); object2 = EnhancedRobustUtils.invokeReflectConstruct("com.ziroom.ziroomcustomer.ao", getRealParameter(new Object[] { { this, object2, joinPoint }, }, ), new Class[] { Object[].class }); Object object1 = object2; if (object2 == this) object1 = ((MainActivityPatch)object2).originClass; object2 = EnhancedRobustUtils.invokeReflectMethod("linkClosureAndJoinPoint", object1, getRealParameter(new Object[] { new Integer(69648) }, ), new Class[] { int.class }, a.class); Log.d("robust", "invoke method is No: 7 linkClosureAndJoinPoint"); object1 = methodAspect; if (methodAspect == this) object1 = ((MainActivityPatch)methodAspect).originClass; object1 = EnhancedRobustUtils.invokeReflectMethod("around", object1, getRealParameter(new Object[] { object2 }, ), new Class[] { b.class }, MethodAspect.class); Log.d("robust", "invoke method is No: 8 around"); } }
生效补丁的MainActivityPatch文件如下:
package com.meituan.robust.patch; import android.util.Log; import android.widget.ImageView; import android.widget.TextView; import com.meituan.robust.utils.EnhancedRobustUtils; import com.ziroom.commonlib.utils.v; import com.ziroom.sojourn.ziroomstation.stationhome.module.l; import com.ziroom.ziroomcustomer.MainActivity; import com.ziroom.ziroomcustomer.util.b.g; import com.ziroom.ziroomcustomer.widget.ScrollControlerViewPager; import com.ziroom.zrlandlord.home.b.f; import org.greenrobot.eventbus.c; public class MainActivityPatch { MainActivity originClass; public MainActivityPatch(Object paramObject) { this.originClass = (MainActivity)paramObject; } public Object[] getRealParameter(Object[] paramArrayOfObject) { if (paramArrayOfObject == null || paramArrayOfObject.length < 1) return paramArrayOfObject; Object[] arrayOfObject = new Object[paramArrayOfObject.length]; for (int i = 0; i < paramArrayOfObject.length; i++) { if (paramArrayOfObject[i] instanceof Object[]) { arrayOfObject[i] = getRealParameter((Object[])paramArrayOfObject[i]); } else if (paramArrayOfObject[i] == this) { arrayOfObject[i] = this.originClass; } else { arrayOfObject[i] = paramArrayOfObject[i]; } } return arrayOfObject; } public void updateTabStatus(int paramInt) { MainActivityPatch mainActivityPatch12; MainActivityPatch mainActivityPatch11; MainActivity mainActivity11; MainActivityPatch mainActivityPatch10; ImageView imageView5; MainActivity mainActivity10; MainActivityPatch mainActivityPatch9; TextView textView5; MainActivity mainActivity9; MainActivityPatch mainActivityPatch8; ImageView imageView4; MainActivity mainActivity8; MainActivityPatch mainActivityPatch7; TextView textView4; MainActivity mainActivity7; MainActivityPatch mainActivityPatch6; ImageView imageView3; MainActivity mainActivity6; MainActivityPatch mainActivityPatch5; TextView textView3; MainActivity mainActivity5; MainActivityPatch mainActivityPatch4; ImageView imageView2; MainActivity mainActivity4; MainActivityPatch mainActivityPatch3; TextView textView2; MainActivity mainActivity3; MainActivityPatch mainActivityPatch2; MainActivity mainActivity2; MainActivityPatch mainActivityPatch1; MainActivity mainActivity1; ImageView imageView10; TextView textView10; ImageView imageView9; TextView textView9; ImageView imageView8; TextView textView8; ImageView imageView7; TextView textView7; if (this instanceof MainActivityPatch) { mainActivity11 = this.originClass; } else { mainActivityPatch12 = this; } int i = ((Integer)EnhancedRobustUtils.getFieldValue("C", mainActivityPatch12, MainActivity.class)).intValue(); Log.d("robust", "get value is mTabTextSelectColor No: 1"); if (this instanceof MainActivityPatch) { mainActivity11 = this.originClass; } else { mainActivityPatch12 = this; } int[] arrayOfInt = (int[])EnhancedRobustUtils.getFieldValue("g", mainActivityPatch12, MainActivity.class); Log.d("robust", "get value is mShowTypeArray No: 2"); int j = arrayOfInt[paramInt]; if (this instanceof MainActivityPatch) { mainActivity11 = this.originClass; } else { mainActivityPatch11 = this; } EnhancedRobustUtils.setFieldValue("b", mainActivityPatch11, j, MainActivity.class); Log.d("robust", "set value is mFragmentType No: 3"); EnhancedRobustUtils.invokeReflectMethod("l", this.originClass, new Object[0], null, MainActivity.class); Log.d("robust", "invoke method is No: 4 resetTab"); if (this instanceof MainActivityPatch) { mainActivity11 = this.originClass; } else { mainActivityPatch11 = this; } ScrollControlerViewPager scrollControlerViewPager2 = (ScrollControlerViewPager)EnhancedRobustUtils.getFieldValue("c", mainActivityPatch11, MainActivity.class); Log.d("robust", "get value is viewPager No: 5"); ScrollControlerViewPager scrollControlerViewPager1 = scrollControlerViewPager2; if (scrollControlerViewPager2 == this) mainActivity11 = ((MainActivityPatch)scrollControlerViewPager2).originClass; EnhancedRobustUtils.invokeReflectMethod("setCurrentItem", mainActivity11, getRealParameter(new Object[] { new Integer(paramInt), new Boolean(false) }, ), new Class[] { int.class, boolean.class }, ScrollControlerViewPager.class); Log.d("robust", "invoke method is No: 6 setCurrentItem"); if (((Boolean)EnhancedRobustUtils.invokeReflectStaticMethod("checkMainTab", g.class, getRealParameter(new Object[0]), null)).booleanValue()) { EnhancedRobustUtils.invokeReflectMethod("h", this.originClass, new Object[0], null, MainActivity.class); Log.d("robust", "invoke method is No: 7 loadingSkin"); return; } switch (j) { default: if (j != 2) { MainActivity mainActivity; c c3 = (c)EnhancedRobustUtils.invokeReflectStaticMethod("getDefault", c.class, getRealParameter(new Object[0]), null); Object[] arrayOfObject2 = getRealParameter(new Object[] { new Integer(0) }); Log.d("robust", " parameters[] from method No: 28 " + arrayOfObject2); l l = (l)EnhancedRobustUtils.invokeReflectConstruct("com.ziroom.sojourn.ziroomstation.stationhome.module.l", arrayOfObject2, new Class[] { int.class }); c c2 = c3; if (c3 == this) mainActivity = ((MainActivityPatch)c3).originClass; EnhancedRobustUtils.invokeReflectMethod("post", mainActivity, getRealParameter(new Object[] { l }, ), new Class[] { Object.class }, c.class); Log.d("robust", "invoke method is No: 29 post"); c3 = (c)EnhancedRobustUtils.invokeReflectStaticMethod("getDefault", c.class, getRealParameter(new Object[0]), null); Object[] arrayOfObject1 = getRealParameter(new Object[] { new Integer(0) }); Log.d("robust", " parameters[] from method No: 30 " + arrayOfObject1); f f = (f)EnhancedRobustUtils.invokeReflectConstruct("com.ziroom.zrlandlord.home.b.f", arrayOfObject1, new Class[] { int.class }); c c1 = c3; if (c3 == this) mainActivity10 = ((MainActivityPatch)c3).originClass; EnhancedRobustUtils.invokeReflectMethod("post", mainActivity10, getRealParameter(new Object[] { f }, ), new Class[] { Object.class }, c.class); Log.d("robust", "invoke method is No: 31 post"); return; } return; case 0: if (this instanceof MainActivityPatch) { mainActivity11 = this.originClass; } else { mainActivityPatch10 = this; } imageView10 = (ImageView)EnhancedRobustUtils.getFieldValue("s", mainActivityPatch10, MainActivity.class); Log.d("robust", "get value is mIvTabRent No: 8"); imageView5 = imageView10; if (imageView10 == this) mainActivity10 = ((MainActivityPatch)imageView10).originClass; EnhancedRobustUtils.invokeReflectMethod("setImageResource", mainActivity10, getRealParameter(new Object[] { new Integer(2131233124) }, ), new Class[] { int.class }, ImageView.class); Log.d("robust", "invoke method is No: 9 setImageResource"); if (this instanceof MainActivityPatch) { mainActivity10 = this.originClass; } else { mainActivityPatch9 = this; } textView10 = (TextView)EnhancedRobustUtils.getFieldValue("i", mainActivityPatch9, MainActivity.class); Log.d("robust", "get value is mTvTabRent No: 10"); textView5 = textView10; if (textView10 == this) mainActivity9 = ((MainActivityPatch)textView10).originClass; EnhancedRobustUtils.invokeReflectMethod("setTextColor", mainActivity9, getRealParameter(new Object[] { new Integer(i) }, ), new Class[] { int.class }, TextView.class); Log.d("robust", "invoke method is No: 11 setTextColor"); case 1: if (this instanceof MainActivityPatch) { mainActivity9 = this.originClass; } else { mainActivityPatch8 = this; } imageView9 = (ImageView)EnhancedRobustUtils.getFieldValue("t", mainActivityPatch8, MainActivity.class); Log.d("robust", "get value is mIvTabYu No: 12"); imageView4 = imageView9; if (imageView9 == this) mainActivity8 = ((MainActivityPatch)imageView9).originClass; EnhancedRobustUtils.invokeReflectMethod("setImageResource", mainActivity8, getRealParameter(new Object[] { new Integer(2131233128) }, ), new Class[] { int.class }, ImageView.class); Log.d("robust", "invoke method is No: 13 setImageResource"); if (this instanceof MainActivityPatch) { mainActivity8 = this.originClass; } else { mainActivityPatch7 = this; } textView9 = (TextView)EnhancedRobustUtils.getFieldValue("j", mainActivityPatch7, MainActivity.class); Log.d("robust", "get value is mTvTabYu No: 14"); textView4 = textView9; if (textView9 == this) mainActivity7 = ((MainActivityPatch)textView9).originClass; EnhancedRobustUtils.invokeReflectMethod("setTextColor", mainActivity7, getRealParameter(new Object[] { new Integer(i) }, ), new Class[] { int.class }, TextView.class); Log.d("robust", "invoke method is No: 15 setTextColor"); case 2: if (this instanceof MainActivityPatch) { mainActivity7 = this.originClass; } else { mainActivityPatch6 = this; } imageView8 = (ImageView)EnhancedRobustUtils.getFieldValue("u", mainActivityPatch6, MainActivity.class); Log.d("robust", "get value is mIvTabLvju No: 16"); imageView3 = imageView8; if (imageView8 == this) mainActivity6 = ((MainActivityPatch)imageView8).originClass; EnhancedRobustUtils.invokeReflectMethod("setImageResource", mainActivity6, getRealParameter(new Object[] { new Integer(2131233132) }, ), new Class[] { int.class }, ImageView.class); Log.d("robust", "invoke method is No: 17 setImageResource"); if (this instanceof MainActivityPatch) { mainActivity6 = this.originClass; } else { mainActivityPatch5 = this; } textView8 = (TextView)EnhancedRobustUtils.getFieldValue("k", mainActivityPatch5, MainActivity.class); Log.d("robust", "get value is mTvTabLvju No: 18"); textView3 = textView8; if (textView8 == this) mainActivity5 = ((MainActivityPatch)textView8).originClass; EnhancedRobustUtils.invokeReflectMethod("setTextColor", mainActivity5, getRealParameter(new Object[] { new Integer(i) }, ), new Class[] { int.class }, TextView.class); Log.d("robust", "invoke method is No: 19 setTextColor"); case 4: if (this instanceof MainActivityPatch) { mainActivity5 = this.originClass; } else { mainActivityPatch4 = this; } imageView7 = (ImageView)EnhancedRobustUtils.getFieldValue("v", mainActivityPatch4, MainActivity.class); Log.d("robust", "get value is mIvTabService No: 20"); imageView2 = imageView7; if (imageView7 == this) mainActivity4 = ((MainActivityPatch)imageView7).originClass; EnhancedRobustUtils.invokeReflectMethod("setImageResource", mainActivity4, getRealParameter(new Object[] { new Integer(2131233121) }, ), new Class[] { int.class }, ImageView.class); Log.d("robust", "invoke method is No: 21 setImageResource"); if (this instanceof MainActivityPatch) { mainActivity4 = this.originClass; } else { mainActivityPatch3 = this; } textView7 = (TextView)EnhancedRobustUtils.getFieldValue("l", mainActivityPatch3, MainActivity.class); Log.d("robust", "get value is mTvTabService No: 22"); textView2 = textView7; if (textView7 == this) mainActivity3 = ((MainActivityPatch)textView7).originClass; EnhancedRobustUtils.invokeReflectMethod("setTextColor", mainActivity3, getRealParameter(new Object[] { new Integer(i) }, ), new Class[] { int.class }, TextView.class); Log.d("robust", "invoke method is No: 23 setTextColor"); case 7: break; } if (this instanceof MainActivityPatch) { mainActivity3 = this.originClass; } else { mainActivityPatch2 = this; } ImageView imageView6 = (ImageView)EnhancedRobustUtils.getFieldValue("w", mainActivityPatch2, MainActivity.class); Log.d("robust", "get value is mIvTabMy No: 24"); ImageView imageView1 = imageView6; if (imageView6 == this) mainActivity2 = ((MainActivityPatch)imageView6).originClass; EnhancedRobustUtils.invokeReflectMethod("setImageResource", mainActivity2, getRealParameter(new Object[] { new Integer(2131233130) }, ), new Class[] { int.class }, ImageView.class); Log.d("robust", "invoke method is No: 25 setImageResource"); if (this instanceof MainActivityPatch) { mainActivity2 = this.originClass; } else { mainActivityPatch1 = this; } TextView textView6 = (TextView)EnhancedRobustUtils.getFieldValue("m", mainActivityPatch1, MainActivity.class); Log.d("robust", "get value is mTvTabMy No: 26"); TextView textView1 = textView6; if (textView6 == this) mainActivity1 = ((MainActivityPatch)textView6).originClass; EnhancedRobustUtils.invokeReflectMethod("setTextColor", mainActivity1, getRealParameter(new Object[] { new Integer(i) }, ), new Class[] { int.class }, TextView.class); Log.d("robust", "invoke method is No: 27 setTextColor"); EnhancedRobustUtils.invokeReflectStaticMethod("showToast", v.class, getRealParameter(new Object[] { "hotfix method updateTabStatus222" }, ), new Class[] { String.class }); } }
您好,我项目中用到了aspectj,导致补丁包失效,没有崩溃现象,就是无法加载补丁代码,请问大佬们遇到过此等问题吗?该如何解决?盼回复~
异常类型:打补丁包时异常
Robust版本:如:0.4.91
Gradle版本:5.11 Gradle插件版本:3.4.1
Aspectjx版本:com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.5
系统:Linux
细节描述:
我在项目中的测试代码比较简单,只是在
MainActivity
的updateTabStatus
方法中加了一句ToastUtil.showToast("hotfix method updateTabStatus222");
具体代码:不用aspectj时补丁包可以生效,反编译后发现生效的补丁包比无效的补丁包多了一个
com.meituan.robust.patch.HomePageFragmentInLinePatch.class
另外,MainActivityPatch文件内容也不同, 无效的补丁包中的MainActivityPatch文件如下:生效补丁的MainActivityPatch文件如下: