Skip to content

Commit

Permalink
修复跨插件启动动作路由问题
Browse files Browse the repository at this point in the history
  • Loading branch information
yjfnypeu committed Feb 24, 2018
1 parent 3b0caf7 commit 774a9bb
Show file tree
Hide file tree
Showing 10 changed files with 92 additions and 9 deletions.
Binary file modified RePluginDemo/app/src/main/assets/plugins/plugina.jar
Binary file not shown.
Binary file modified RePluginDemo/app/src/main/assets/plugins/usercenter.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import com.lzh.router.replugin.host.HostRouterConfiguration;
import com.lzh.router.replugin.update.IUpdateCombine;
import com.lzh.router.replugin.update.UpdateRePluginCallbacks;
import com.qihoo360.replugin.RePlugin;
import com.qihoo360.replugin.RePluginApplication;
import com.qihoo360.replugin.RePluginCallbacks;
import com.qihoo360.replugin.RePluginConfig;
Expand Down
4 changes: 2 additions & 2 deletions RePluginDemo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ task clean(type: Delete) {
}

ext {
ROUTER_VERSION="2.5.0"
ROUTER_VERSION="2.6.0"
PARCELER_VERSION="1.2"
ButterKnife_version = "8.8.1"
UpdatePlugin_version = "2.4.3"
RePlugin_version = '2.1.7'
Router_RePlugin_version = '0.6'
useLocal = false // 指定当前使用的Router-RePlugin库。是使用本地的还是远程仓库的。
useLocal = true // 指定当前使用的Router-RePlugin库。是使用本地的还是远程仓库的。
}
Binary file modified RePluginDemo/mocked/apk/remote.apk
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.lzh.router.replugin.core;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;

import com.lzh.nonview.router.Router;
import com.lzh.nonview.router.extras.RouteBundleExtras;

/**
* @author haoge on 2018/2/24.
*/
public class RouterBridgeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Uri uri = intent.getParcelableExtra("uri");
RouteBundleExtras extras = intent.getParcelableExtra("extras");
Router.resume(uri, extras).open(context);
}

public static void registerSelf(Context context, String alias, boolean isHost) {
String action = obtainAction(alias, isHost);

IntentFilter filter = new IntentFilter(action);
context.registerReceiver(new RouterBridgeReceiver(), filter);
}

public static void start(Context context, String alias, boolean isHost, Uri uri, RouteBundleExtras extras) {
String action = obtainAction(alias, isHost);

Intent intent = new Intent(action);
intent.putExtra("uri", uri);
intent.putExtra("extras", extras);
context.sendBroadcast(intent);
}

private static String obtainAction(String alias, boolean isHost) {
String action;
if (isHost) {
action = "com.RePlugin.Router.Host";
} else {
action = "com.RePlugin.Router.Plugin." + alias;
}
return action;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import android.text.TextUtils;

import com.lzh.nonview.router.launcher.DefaultActionLauncher;
import com.lzh.router.replugin.core.RouterBridgeActivity;
import com.lzh.router.replugin.core.RouterBridgeReceiver;

/**
* 针对RePlugin框架定制的宿主使用的动作路由启动器。
Expand All @@ -19,7 +19,7 @@ public void open(Context context) throws Exception {
super.open(context);
} else {
// 桥接到指定插件并进行处理
RouterBridgeActivity.start(context, alias, uri, extras);
RouterBridgeReceiver.start(context, alias, false, uri, extras);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package com.lzh.router.replugin.host;

import android.app.ActivityManager;
import android.content.Context;
import android.os.Process;

import com.lzh.nonview.router.RouterConfiguration;
import com.lzh.nonview.router.route.RouteCallback;
import com.lzh.router.replugin.core.IPluginCallback;
import com.lzh.router.replugin.core.IUriConverter;
import com.lzh.router.replugin.core.RePluginRouteCallback;
import com.lzh.router.replugin.core.RouterBridgeReceiver;

import java.util.List;

/**
* 宿主配置入口
Expand All @@ -21,6 +26,11 @@ public final class HostRouterConfiguration {
* @param context 用于启动远程任务的。
*/
public static void init(String hostPackage, Context context) {
if (!inMainProcess(context)) {
// 当为host时,此时会被多个子进程触发,在此只允许主进程的初始化操作
return;
}

// 启动并连接远程路由服务。
RouterConfiguration.get().startHostService(hostPackage, context);
// 初始化callback.
Expand All @@ -29,6 +39,8 @@ public static void init(String hostPackage, Context context) {
// 设置路由启动器
RouterConfiguration.get().setActionLauncher(HostActionLauncher.class);
RouterConfiguration.get().setActivityLauncher(HostActivityLauncher.class);

RouterBridgeReceiver.registerSelf(context, null, true);
}

public HostRouterConfiguration setCallback(IPluginCallback callback) {
Expand Down Expand Up @@ -61,4 +73,20 @@ public static HostRouterConfiguration get() {
return configuration;
}

private static boolean inMainProcess(Context context) {
int mPid = Process.myPid();
String packageName = context.getPackageName();
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processes =
manager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : processes) {
if (mPid != info.pid) {
continue;
}

return packageName.equals(info.processName);
}
return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import android.text.TextUtils;

import com.lzh.nonview.router.launcher.DefaultActionLauncher;
import com.lzh.router.replugin.core.RouterBridgeActivity;
import com.lzh.router.replugin.core.RouterBridgeReceiver;

/**
* 针对RePlugin框架定制的动作路由启动器。
Expand All @@ -14,14 +14,19 @@ public class PluginActionLauncher extends DefaultActionLauncher {
@Override
public void open(Context context) throws Exception {
String alias = alias();
if (TextUtils.isEmpty(alias)) {
super.open(context);
boolean isHost = isHost();
if (isHost || !TextUtils.isEmpty(alias)) {
RouterBridgeReceiver.start(context, alias, isHost, uri, extras);
} else {
RouterBridgeActivity.start(context, alias, uri, extras);
super.open(context);
}
}

private String alias() {
return remote.getString("alias");
}

private boolean isHost() {
return remote.getBoolean("isHost");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.lzh.router.replugin.core.IPluginCallback;
import com.lzh.router.replugin.core.IUriConverter;
import com.lzh.router.replugin.core.RePluginRouteCallback;
import com.lzh.router.replugin.core.RouterBridgeReceiver;

/**
* RePlugin插件配置入口。
Expand All @@ -31,6 +32,8 @@ public static void init(String hostPackage, String alias, Context context) {
// 设置路由启动器
RouterConfiguration.get().setActionLauncher(PluginActionLauncher.class);
RouterConfiguration.get().setActivityLauncher(PluginActivityLauncher.class);

RouterBridgeReceiver.registerSelf(context, alias, false);
}

public PluginRouterConfiguration setCallback(IPluginCallback callback) {
Expand Down

0 comments on commit 774a9bb

Please sign in to comment.