2012-07-06 132 views
1

是否有可能在運行時更改已使用Dexmaker加載的類的方法的行爲,通過代理或生成代碼?是否可以使用Dexmaker從現有類中覆蓋方法?

UPDATE

只是一句話:我想補充的方法/修改現有的從我自己的應用程序,而不是從Android框架。

+1

如果Dalvik允許你使用dex類加載器來替換它已經知道的類,那麼真正的問題可能就是如此。至少在apk加載期間,它不會 - 如果您在應用程序中放置了平臺類的重複項,您會在logcat中看到它們被拒絕。 – 2012-07-06 20:02:07

+0

@Chris Stratton這澄清了我的一些疑惑。如果我在運行時創建了一個jar文件,其中包含來自我自己的應用程序的重複類,Dalvik是否仍然拒絕它,或者它會拾取「overrinding」類? – kaneda 2012-07-06 20:23:41

+0

假設如果你可以讓你的zygote在啓動時加載它,它會拒絕原來的。但是這會影響系統上所有應用程序和大多數平臺上的每個子合成zygote進程 - 並且它可能會破壞那些僅以dexopt形式(相對於原始版本)才能運行的程序,就像更改框架類所能做到的那樣。 – 2012-07-06 20:32:54

回答

1

不,這是不可能的。

你可以創建一個新的類來擴展原始類,甚至可以創建一個類的副本,並使用一個新名稱和一個調整實現。但是你不能替換現有的類。

最好的辦法是將可能想要修改的代碼解壓到一個單獨的類中,然後將該類的實例傳遞給任何使用它的對象。然後,如果你需要創建一個新的實現,你可以繼承它並傳入子類。

+0

有沒有關於如何做的例子?看起來很複雜。 – 2015-02-16 23:04:57

相關問題