具體的技術文檔可以直接搜索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+廣播機制下載進度直接通知狀態來.