Skip to content

Commit 437e150

Browse files
committed
外部唤起插件组件
1 parent 75848a1 commit 437e150

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

PluginCore/src/com/plugin/core/PluginInstrumentionWrapper.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.os.IBinder;
1313
import android.os.UserHandle;
1414

15+
import com.plugin.content.PluginDescriptor;
1516
import com.plugin.core.annotation.AnnotationProcessor;
1617
import com.plugin.core.annotation.ComponentContainer;
1718
import com.plugin.core.viewfactory.PluginViewFactory;
@@ -55,28 +56,30 @@ public Activity newActivity(ClassLoader cl, String className, Intent intent) thr
5556

5657
String action = intent.getAction();
5758
if (action != null && action.contains(PluginIntentResolver.CLASS_SEPARATOR)) {
58-
5959
String[] targetClassName = action.split(PluginIntentResolver.CLASS_SEPARATOR);
60+
String pluginClassName = targetClassName[0];
6061

61-
LogUtil.d(className, action, targetClassName[0]);
62-
63-
String tempclassName = targetClassName[0];
64-
Class clazz = PluginLoader.loadPluginClassByName(tempclassName);
62+
Class clazz = PluginLoader.loadPluginClassByName(pluginClassName);
6563
if (clazz != null) {
66-
className = tempclassName;
64+
className = pluginClassName;
6765
cl = clazz.getClassLoader();
6866

6967
intent.setExtrasClassLoader(cl);
70-
71-
//之前为了传递classNae,intent的action被修改过 这里再把Action还原到原始的Action
7268
if (targetClassName.length >1) {
69+
//之前为了传递classNae,intent的action被修改过 这里再把Action还原到原始的Action
7370
intent.setAction(targetClassName[1]);
7471
} else {
7572
intent.setAction(null);
7673
}
7774
//添加一个标记符
7875
intent.addCategory(RELAUNCH_FLAG + className);
7976
}
77+
} else if (PluginStubBinding.isExact(className, PluginDescriptor.ACTIVITY)) {
78+
//这个逻辑是为了支持外部app唤起配置了stub_exact的插件Activity
79+
Class clazz = PluginLoader.loadPluginClassByName(className);
80+
if (clazz != null) {
81+
cl = clazz.getClassLoader();
82+
}
8083
} else {
8184
//进入这个分支可能是因为activity重启了,比如横竖屏切换,由于上面的分支已经把Action还原到原始到Action了
8285
//这里只能通过之前添加的标记符来查找className

PluginCore/src/com/plugin/core/PluginStubBinding.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public static String bindStubActivity(String pluginActivityClassName, int launch
229229
return standardActivity;
230230
}
231231

232-
private static boolean isExact(String name, int type) {
232+
public static boolean isExact(String name, int type) {
233233
initPool();
234234

235235
if (mExcatStubSet != null && mExcatStubSet.size() > 0) {

PluginMain/PluginMain-debug.apk

22 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)