Qihoo360 / RePlugin

RePlugin - A flexible, stable, easy-to-use Android Plug-in Framework
Apache License 2.0
7.25k stars 1.52k forks source link

发现 replugin 脚本更改v4包的LocalBroadcastManager 好像有bug #524

Open royhook opened 6 years ago

royhook commented 6 years ago

问题详细描述 Detailed description of the problem

我看到了脚本执行后 invoke-static {v0}, Lcom/qihoo360/replugin/loader/b/PluginLocalBroadcastManager;->getInstance(Landroid/content/Context;)Ljava/lang/Object;

返回值变成了Ljava/lang/Object;

应该是 Lcom/qihoo360/replugin/loader/b/PluginLocalBroadcastManager;这个对象就对了。

然后发现脚本没有更改全局变量。

这2个问题会导致dex 校验的时候出问题。

我写了个自动化,把这2个问题点改掉了

复现问题步骤 Steps to reproduce the problem

  1. 插件接入facebook sdk compile 'com.facebook.android:facebook-android-sdk:4.27.0'
  2. 主程序加载插件

其它重要信息 Other important information

replugin-host-lib/gradle Version: rePlugin-plugin-lib/gradle Version:

Android API Version: Android 手机型号&ROM(Phone model & ROM):

Logcat上下文 Logcat context

  1. Caused by: java.lang.VerifyError: Verifier rejected class com.facebook.AccessTokenManager: com.facebook.AccessTokenManager com.facebook.AccessTokenManager.getInstance() failed to verify: com.facebook.AccessTokenManager com.facebook.AccessTokenManager.getInstance(): [0x1A] register v2 has type Reference: java.lang.Object but expected Precise Reference: android.support.v4.content.LocalBroadcastManager (declaration of 'com.facebook.AccessTokenManager' appears in /data/data/com.ostudio.issue.sdk/app_plugins_v3/login-10-10-1.jar:classes2.dex)
bytc687e commented 6 years ago

的确是个bug,同理,这种写法也会有坑:
原代码 public LocalBroadcastManager getLocalBroadcast() { return LocalBroadcastManager.getInstance(context); }

插件调用后代码: public LocalBroadcastManager getLocalBroadcast() { return PluginLocalBroadcastManager.getInstance(context); }