360外置插件无法加载&360RePlugin AndroidX化后的坑

具体的技术文档可以直接搜索360RePlugin官方技术文档,本文只解决问题

问题一:

classpath 'com.android.tools.build:gradle:3.1.4'

和官方文档一样配置的,但是使用的是外部插件加载也就是说我们把插件plugin下载到sdcard,然后在RePlugin.intsall("xxx")

但是发现加载成功了,然后

PluginInfo pi = RePlugin.install(fileName);

这里我说明下repload最好使用线程,不然直接嗝屁。

if (pi != null) {

    new Thread(new Runnable() {
        @Override
        public void run() {
            boolean preload = RePlugin.preload(pi);
            Message msg = new Message();
            msg.what = 100;
            msg.obj = preload;
            handler.sendMessage(msg);
        }
    }).start();

} else {
    Toast.makeText(getApplicationContext(), "插件的描述信息Null", Toast.LENGTH_SHORT).show();

}

也没有问题,但是就是无法调用。我们看logcat会发现一具报错:plugininfo == null  或者叫 plugin == null

这个时候的解决办法是在app.gradle

repluginHostConfig {
    useAppCompat = true
    persistentEnable = false
}

主要是这一句话  persistentEnable = false

然后这是我的调用方法是

Intent i = RePlugin.createIntent("mobWork",
        "xxxxxxxxx.login.LoginActivity");
i.putExtra("token",token);
RePlugin.startActivity(getActivity(), i);

就成功了,大家注意这里的第一个参数mobWork是插件中配置的PluginName  反正我在android.support.v7工程中没什么问题。后面有一个巨大的坑就是AndroidX化后,必须要使用包名,别名和插件中定义的插件名称都是不行的。

 

 

接下来我们来说一下360RePlugin  AndroidX化,大家都知道360RePlugin的gralde的上线是3.1.4  但是AndroidX的最低要求是3.2.0

所以可以看出来360目前为止在官方技术文档是没有对AndroidX进行支持的,但是他的分支有非正式的方案:

https://github.com/froyohuang/RePlugin-AndroidX

至于工程如何AndroidX化就不需要我多说了吧,AndroidStudio自己有工具,如果有第三方的jar,aar,so等都是可以使用jetifier工具的命令行来转换的,也可以反向,自己去查就可以了。接下里当所有的都配置好以后,发现调用的时候没用,日志中弹出的错误是 isNeedToDownload(): V5 file not exists. Plugin = xxx 是不是很炸裂,原理我没去自己研究,但是我直接给方案吧,就是调用的时候直接给包名即可

Intent i = RePlugin.createIntent("com.xxx.xxx",
        "com.xxx.xxx.moduleImp.login.LoginActivity");
i.putExtra("token",token);
RePlugin.startActivity(getActivity(), i);

相关知识点和坑  Linux的守护进程机制,目前存在的问题如果去去除persistentEnable = false这句话,貌似启动的时候会崩溃,我还需要研究。

我再提一下内置插件,很简单,把给你的apk插件包,改为.jar然后直接在assets文件夹下建立plugins目录,放进去就ok了

new Thread(new Runnable() {
    @Override
    public void run() {
        boolean preload = RePlugin.preload(pi);
        Message msg = new Message();
        msg.what = 100;
        msg.obj = preload;
        handler.sendMessage(msg);
    }
}).start();
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 100:
                boolean isPreload = (boolean) msg.obj;
                if (isPreload) {
                    showToastshort("插件预加载成功");
                } else {
                    showToastshort("插件预加载失败");
                }
                break;
        }
    }
};

直接ok,很简单,但是就不好更新。360官网的擦肩管理的大小限制为5M,我也是笑了,大家还是自己写下载的方法吧,我使用的是

DownloadManager+广播机制下载进度直接通知状态来.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章