如何設(shè)置hide的回調(diào)接口

android源碼中有很多hide的接口料按,編碼時無法直接調(diào)用. 怎么辦呢? 首先明確一點:hide標(biāo)記只影響編譯時,不影響運行時卓箫,只要編譯能通過载矿,運行時就能正常訪問hide標(biāo)記的接口,因此,只需要確保調(diào)用hide接口能編譯通過即可烹卒,通常有三種做法:

  1. 基于android源碼編譯
  2. 修改源碼闷盔,去除hide標(biāo)記,并編譯成framework.jar導(dǎo)入項目中
  3. 反射
    其中方法1旅急,2操作比較復(fù)雜逢勾,通常很少使用

調(diào)用hide接口或者傳入hide類型的參數(shù),都可通過上述方式完成藐吮。如果接口接受hide類的回調(diào)參數(shù)呢溺拱?例如:

PackageManager.installPackage(String packageName, android.pm.content.IPackageInstallObjsever observer, int flag)

這個方法中IPackageInstallObserver就是個hide接口,除了上述方法1,2外炎码,沒法直接創(chuàng)建子類來實現(xiàn)回調(diào)方法. 要解決這個問題盟迟,除了還有以下通過如下方式:
copy接口到自己到項目下秋泳,且保持包名,類名不變
在自己項目里創(chuàng)建一個與回調(diào)接口類相同的包名+類名, 并且創(chuàng)建回調(diào)方法潦闲,這里不需要創(chuàng)建所有的方法,只需要自己感興趣的回調(diào)方法就行了, 如只需要在自己創(chuàng)建的IPackageInstallObserver類中添加方法packageInstalled(String pkgName, int errorCode)
這樣編譯的時候就能在編譯路徑中找到IPcakageInstallObsever類了迫皱,編譯成功歉闰。但是運行時就存在兩個相同的類了辖众,不會產(chǎn)生沖突么?答案是不會和敬,因為framework中的IPackageInstallObsever類的ClassLoader是SystemClassLoader凹炸,而自己代碼是在PathClassLoader中,PathClassLoader的parent是SystemClassLoader, 根據(jù)類加在雙親委派機制昼弟,查找類時先有parent ClassLoader決定是否能加在啤它,如果parent加在類,child就不再加載舱痘,顯然变骡,framework中的IPackageInstallObserver會由SystemClassLoader加載,自己創(chuàng)建的IPackageInstallObserver會被當(dāng)作相同的類芭逝,不會再加載塌碌,因此,運行時的IPackageInstallObsever一定是來自framework,而不是自己創(chuàng)建的那個旬盯,這也是為什么不需要添加所有的回調(diào)方法台妆,因為運行時壓根就不會理會自己創(chuàng)建的類,它的目的就是為了保證編譯通過胖翰,只需要包名,類名相同就行了接剩。
使用這種方式需要特別注意一點就是:混淆時一定要keep住回調(diào)接口,因為它屬于項目私有空間萨咳,回調(diào)方法默認(rèn)會被混淆掉搂漠,運行時就會出現(xiàn)找不到回調(diào)方法掉的異常了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末某弦,一起剝皮案震驚了整個濱河市桐汤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靶壮,老刑警劉巖怔毛,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腾降,居然都是意外死亡拣度,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門螃壤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抗果,“玉大人,你說我怎么就攤上這事奸晴≡┝螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵寄啼,是天一觀的道長逮光。 經(jīng)常有香客問我代箭,道長,這世上最難降的妖魔是什么涕刚? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任嗡综,我火速辦了婚禮,結(jié)果婚禮上杜漠,老公的妹妹穿的比我還像新娘极景。我一直安慰自己,他們只是感情好驾茴,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布戴陡。 她就那樣靜靜地躺著,像睡著了一般沟涨。 火紅的嫁衣襯著肌膚如雪恤批。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天裹赴,我揣著相機與錄音喜庞,去河邊找鬼。 笑死棋返,一個胖子當(dāng)著我的面吹牛延都,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睛竣,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼晰房,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了射沟?” 一聲冷哼從身側(cè)響起殊者,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎验夯,沒想到半個月后猖吴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡挥转,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年海蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绑谣。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡党窜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出借宵,到底是詐尸還是另有隱情幌衣,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布暇务,位于F島的核電站泼掠,受9級特大地震影響怔软,放射性物質(zhì)發(fā)生泄漏垦细。R本人自食惡果不足惜择镇,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望括改。 院中可真熱鬧腻豌,春花似錦、人聲如沸嘱能。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惹骂。三九已至苏携,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間对粪,已是汗流浹背右冻。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留著拭,地道東北人纱扭。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像儡遮,于是被迫代替她去往敵國和親乳蛾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容