调试腾讯Shadow插件化框架中记录遇到的错误
2022-11-27 本文已影响0人
CodeJava
异常 java.lang.RuntimeException: java.lang.IllegalArgumentException: 无法绑定PPS:com.tencent.shadow.sample.host.PluginProcessPPS
2022-11-28 16:13:05.591 29120-29359/com.tencent.shadow.sample.host E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1
Process: com.tencent.shadow.sample.host, PID: 29120
java.lang.RuntimeException: java.lang.IllegalArgumentException: 无法绑定PPS:com.tencent.shadow.sample.host.PluginProcessPPS
at com.danjiang.pluginmanager.demo.manager.SamplePluginManager$1.run(SamplePluginManager.java:145)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.IllegalArgumentException: 无法绑定PPS:com.tencent.shadow.sample.host.PluginProcessPPS
at com.tencent.shadow.dynamic.manager.BaseDynamicPluginManager.bindPluginProcessService(BaseDynamicPluginManager.java:109)
at com.danjiang.pluginmanager.demo.manager.FastPluginManager.loadPluginLoaderAndRuntime(FastPluginManager.java:127)
at com.danjiang.pluginmanager.demo.manager.FastPluginManager.loadPlugin(FastPluginManager.java:135)
at com.danjiang.pluginmanager.demo.manager.SamplePluginManager$1.run(SamplePluginManager.java:128)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
2022-11-28 16:13:05.593 4300-4722/? E/OOMEventManager: oom event not support this pkg, dismiss this!
解决:
1. 宿主的包名是 com.danjiang.shadow
宿主中需要提供 PluginProcessPPS.java类
2.需要在 宿主中 AndroidManifest.xml 注册
<service android:name="com.danjiang.shadow.PluginProcessPPS" />
3. 在plugin-manager 工程中 的 SamplePluginManager.java 中
partKey 获得的服务名字保持一致
/**
* @return 宿主中注册的PluginProcessService实现的类名
*/
@Override
protected String getPluginProcessServiceName(String partKey) {
if (PART_KEY_PLUGIN_MAIN_APP.equals(partKey)) {
return "com.tencent.shadow.sample.host.PluginProcessPPS";
} else if (PART_KEY_PLUGIN_BASE.equals(partKey)) {
return "com.danjiang.shadow.PluginProcessPPS";
} else if (PART_KEY_PLUGIN_ANOTHER_APP.equals(partKey)) {
return "com.tencent.shadow.sample.host.Plugin2ProcessPPS";//在这里支持多个插件
} else {
//如果有默认PPS,可用return代替throw
throw new IllegalArgumentException("unexpected plugin load request: " + partKey);
}
}
PART_KEY_PLUGIN_BASE = "sample-plugin" 注意这里要保持一致
gradle 中定义的打包插件名称 partKey = 'sample-plugin'
shadow {
packagePlugin {
pluginTypes {
debug {
loaderApkConfig = new Tuple2('sample-loader-debug.apk', ':sample-loader:assembleDebug')
runtimeApkConfig = new Tuple2('sample-runtime-debug.apk', ':sample-runtime:assembleDebug')
pluginApks {
pluginApk1 {
businessName = 'sample-plugin'//businessName相同的插件,context获取的Dir是相同的。businessName留空,表示和宿主相同业务,直接使用宿主的Dir。
partKey = 'sample-plugin'
buildTask = 'assemblePluginDebug'
apkPath = 'sample-app/build/outputs/apk/plugin/debug/sample-app-plugin-debug.apk'
}
}
}
}
loaderApkProjectPath = 'sample-loader'
runtimeApkProjectPath = 'sample-runtime'
version = 4
compactVersion = [1, 2, 3]
uuidNickName = "1.1.5"
}
}
异常 java.lang.RuntimeException: java.lang.IllegalStateException: uuid==74C5B5C0-B291-4138-B95C-3F30C9997422partKey==sample-plugin-app的Plugin找不到
Process: com.tencent.shadow.sample.host, PID: 6684
java.lang.RuntimeException: java.lang.IllegalStateException: uuid==74C5B5C0-B291-4138-B95C-3F30C9997422partKey==sample-plugin-app的Plugin找不到
at com.tencent.shadow.SamplePluginManager$1.run(SamplePluginManager.java:145)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.IllegalStateException: uuid==74C5B5C0-B291-4138-B95C-3F30C9997422partKey==sample-plugin-app的Plugin找不到
at android.os.Parcel.createException(Parcel.java:2082)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at com.tencent.shadow.dynamic.manager.BinderPluginLoader.loadPlugin(BinderPluginLoader.java:50)
at com.tencent.shadow.FastPluginManager.loadPlugin(FastPluginManager.java:141)
at com.tencent.shadow.SamplePluginManager$1.run(SamplePluginManager.java:129)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
解决是 我只配置了一个插件
但是调用时调用了两个插件 于是发生找不到插件异常
sample-manager 中 class SamplePluginManager extends FastPluginManager
executorService.execute(new Runnable() {
@Override
public void run() {
try {
InstalledPlugin installedPlugin = installPlugin(pluginZipPath, null, true);
loadPlugin(installedPlugin.UUID, PART_KEY_PLUGIN_BASE);
loadPlugin(installedPlugin.UUID, PART_KEY_PLUGIN_MAIN_APP);
callApplicationOnCreate(PART_KEY_PLUGIN_BASE);
callApplicationOnCreate(PART_KEY_PLUGIN_MAIN_APP);
多个插件 就在管理器中调用多次 PART_KEY_PLUGIN_BASE 是 partkey
void loadPlugin(String uuid, String partKey)
对应插件 1
loadPlugin(installedPlugin.UUID, PART_KEY_PLUGIN_BASE);
对应插件 2
loadPlugin(installedPlugin.UUID, PART_KEY_PLUGIN_MAIN_APP);
callApplicationOnCreate(PART_KEY_PLUGIN_BASE);
callApplicationOnCreate(PART_KEY_PLUGIN_MAIN_APP);