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+廣播機制下載進度直接通知狀態來.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章