Android實現免安裝APK外掛程式 三

2021-08-20 18:50:06 字數 1062 閱讀 4813

雖然startactivity正常了,但是這不是要啟動的activity,豈不是做了無用功。然而事情往往沒那麼簡單,既然系統服務那關已經過了,我們得自己做點事情了。activity的建立及生命週期都是在自己程序中完成的,所以activitythread這個類似乎可以幫我們做事情。

注意到activitythread中mh完成了activity的建立和生命週期的事件處理,所以我們只需要在mh處理事件前,把殼activity又替換為要啟動的activity不就可以了。所以這又涉及到訊息攔截了,我們來看下handlemessage如何攔截:

public

void

dispatchmessage(message msg) else

}handlemessage(msg);

}}

正常情況mcallback為null,我們只需要設定乙個mcallback就可以攔截訊息,把msg中intent取出來替換為新的intent,接著交給handlemessage繼續處理就可以了。如下:

public void invokeactivitythread()  catch (classnotfoundexception e)  catch (nosuchmethodexception e)  catch (illegalacces***ception e)  catch (invocationtargetexception e)  catch (nosuchfieldexception e) 

}private handler.callback mcallback = new handler.callback()

} catch (classnotfoundexception e) catch (illegalacces***ception e) catch (nosuchfieldexception e)

}return false;

}};

由於我們只是替換了intent中的component內容,系統照樣會幫助我們完成activity的生命週期,到這裡有些大功告成的感覺,但是一執行,馬上就是資源報錯,宿主可不知道還有外掛程式的資源存在。

Android實現免安裝APK外掛程式(四)

在獲取資源時,有三個重要的類resources,assetmanager,theme,我們通過context獲取它們的物件 override public assetmanager getassets override public resources getresources override p...

Android實現免安裝外掛程式 二

在啟動activity中出現activitynotfoundexception有兩種可能,一種是該activity的應用未安裝,一種是該activity未在androidmanifest中申明。在外掛程式化中,屬於情況一。所以在startactivity中需啟動activity實際是系統中不能找到的...

android中跳轉安裝apk

在android中跳轉安裝apk 需要先新增許可權 在跳轉的過程中分為三種情況 android版本低於等於6.0 intent intent new intent intent.action view intent.setflags intent.flag activity new task sta...