[英]Java how to extend a hidden class
我需要覆蓋一個隱藏類的方法(用@hide 標記),它只在它的包中可見。 有什么辦法可以延長嗎?
更具體地說,我需要覆蓋android.widget.Editor 的getNextCursorOffset()
,因為該方法與ReplacementSpan
不能很好地工作。
您可以在項目中定義相同的包android.widget
。 然后你可以擴展它:
public class ProjectSpecificEditor extends Editor {
// constructors et all
public int getNextCursorOffset() {
//...
}
}
但請注意,這是不鼓勵的。 即框架的下一個版本可能會更改一些類/方法簽名。 那么你只能責怪你自己。
我從瑞恩戈登那里得到了這個想法
基本上,在編譯框架時會刪除任何標有@hide
內容,Android Studio 使用它來編譯您的代碼。 你可以在\\AppData\\Local\\Android\\Sdk\\platforms\\android-xx\\android.jar
。 ryan 建議,要么自己編譯沒有@hide
android 框架,要么從有根電話中獲取已經編譯的框架(因為@hide
不會影響實際手機中使用的代碼)
在我看來,一個更簡單的替代方法是簡單地從android.jar
提取.class
文件,使用任何 Java 字節碼編輯器,然后添加缺少的方法。 然后替換android.jar
的文件。
然而,正如 Tamas Rev 所提到的,標有@hide
方法永遠不會被訪問,因此不能保證它存在於舊版本中,或者跨版本的行為是一致的,或者它會在未來存在!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.