美文网首页
调试腾讯Shadow插件化框架中记录遇到的错误

调试腾讯Shadow插件化框架中记录遇到的错误

作者: CodeJava | 来源:发表于2022-11-27 17:11 被阅读0次
异常 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);

相关文章

网友评论

      本文标题:调试腾讯Shadow插件化框架中记录遇到的错误

      本文链接:https://www.haomeiwen.com/subject/lzckfdtx.html