<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>


       To build a better world !

    Android應(yīng)用開發(fā)中如何使用隱藏API


    Android應(yīng)用開發(fā)中如何使用隱藏API



        一開始需要說明的是,Google之所以要將一些API隱藏(指加上@hide標(biāo)記的public類、方法或常量)是有原因的。其中很大的原因就是Android系統(tǒng)本身還在不斷的進(jìn)化發(fā)展中。從1.0、1.1到現(xiàn)在即將問世的Android 2.3.4。 這些隱藏的API本身可能是不穩(wěn)定的,所以,使用隱藏API,意味著程序更差的兼容性。


        如果要我給出建議的話,最好還是不要使用隱藏的API。不過有時(shí)為了實(shí)現(xiàn)Android應(yīng)用某些特殊的功能或者效果,隱藏的API往往能發(fā)揮意想不到的作用。這些API具體能做些什么事,我就不在這里舉例了。正好,如果你不知道隱藏API能做什么的話,那么還是盡早放棄使用它們吧……


        不想長篇大論,直接進(jìn)入正題吧。使用隱藏API主要有兩種辦法:一是我在《
    Java反射機(jī)制的學(xué)習(xí)》一文中提到的反射的方法得到隱藏API;二是使用源碼編譯時(shí)生成的全編譯的jarclasses.jar。


        使用反射的方式,在這里就不詳細(xì)介紹了,具體見《
    Java反射機(jī)制的學(xué)習(xí)》。利用反射機(jī)制使用隱藏API的方法的優(yōu)點(diǎn)是靈活,能夠在不兼容的系統(tǒng)捕獲異常,而使程序不至于崩潰;缺點(diǎn)是過程太繁雜,而且對于隱藏類的繼承等很難實(shí)現(xiàn)。如果需要大量使用隱藏API,使用反射無疑會(huì)讓程序員很煩的。


        這篇文章主要要介紹的就是通過導(dǎo)入全編譯的classes.jar包,來實(shí)現(xiàn)對隱藏API的使用。這種方法實(shí)現(xiàn)簡單,程序員編程也簡單,就像是那些隱藏的APISDK中變得可見了一樣。它的缺點(diǎn)就是兼容性問題,希望使用者引起重視,在使用時(shí)考慮清楚。


        編譯Android框架源碼后,在源碼路徑下會(huì)生成out文件夾,在這個(gè)文件夾下的out"target"common"obj"JAVA_LIBRARIES"framework_intermediates"路徑下,會(huì)生成全編譯的jarclasses.jar。你需要做的就是將這個(gè)jar庫導(dǎo)入到你的工程中。


        在導(dǎo)入classes.jar過程中,有可能會(huì)出現(xiàn)兩個(gè)問題(我是使用eclipse開發(fā)環(huán)境的,所以僅對此環(huán)境會(huì)遇到的問題進(jìn)行說明)。


        問題一是按導(dǎo)入其他jar的方式導(dǎo)入此jar庫,發(fā)現(xiàn)編譯很慢,有時(shí)甚至無法編譯成功,eclipse崩潰或者提示“
    java.lang.OutOfMemoryError: Java Heap Space錯(cuò)誤。這個(gè)問題,可能是由于jar太大的原因吧,網(wǎng)上說改eclipse.ini里的參數(shù),個(gè)人試了下,似乎沒有什么作用。我的做法是在eclipse中新建自定義的library,然后將classes.jar放在library中。Android工程添加library,就像使用SDK一樣。這樣可以很好地解決這個(gè)問題。具體如何新建自定義的library我就不詳述了,不知道的朋友自己搜索下或者摸索下,很簡單的。


        問題二是已經(jīng)正確導(dǎo)入了jar庫,卻發(fā)現(xiàn)還是找不到隱藏的API。這個(gè)的原因是Build class path order不對,具體說就是android.jarclasses.jar的導(dǎo)入順序不對。應(yīng)該將classes.jar的順序放在android.jar之前,具體調(diào)節(jié)Build class path order的地方就在properties -> Java Build Path -> Order and Export.。


        成功解決這兩個(gè)問題之后,相信你就可以正常使用Android隱藏API了。

    posted on 2011-05-01 23:56 zh.weir 閱讀(14066) 評論(2)  編輯  收藏 所屬分類: Android應(yīng)用秘技

    評論

    # re: Android應(yīng)用開發(fā)中如何使用隱藏API 2011-06-22 09:47 何健

    你好,我按照你的方法布置了一下,發(fā)現(xiàn)大部分的隱藏API都可以使用了,
    但是com.android.server包下面的類都沒有編譯到class.jar中去,請問是什么原因呢?
    謝謝  回復(fù)  更多評論   

    # re: Android應(yīng)用開發(fā)中如何使用隱藏API 2011-06-29 11:52 zh-weir

    @何健

    你好,com.android.server里面的類,編譯到了這個(gè)路徑下的jar包中:out\target\common\obj\JAVA_LIBRARIES\services_intermediates\classes.jar 。你試試!  回復(fù)  更多評論   

    公告

    大家好!歡迎光臨我的 Android 技術(shù)博客!



    本博客旨在交流與 Android 操作系統(tǒng)相關(guān)的各種技術(shù)及信息。

    博客內(nèi)的文章會(huì)盡量以開源的形式提供給大家,希望我們能相互交流,共同提高!

    有不足之處,請不吝賜教!

    我的郵箱:zh.weir@gmail.com
    我的新浪微博:@囧虎張建偉

     

    導(dǎo)航

    <2011年5月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統(tǒng)計(jì)

    留言簿(19)

    隨筆分類(24)

    隨筆檔案(18)

    文章檔案(1)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎影视在线永久免费看黄| 一区二区免费电影| 亚洲av无码电影网| 亚洲精品乱码久久久久久V| 免费福利资源站在线视频| 免费一区二区三区| 成人免费无码大片a毛片| 久久国产成人亚洲精品影院| 久久亚洲AV午夜福利精品一区 | 一级毛片免费观看| 特级做A爰片毛片免费69| 亚洲性久久久影院| 亚洲综合色一区二区三区| a级大片免费观看| 在线a人片天堂免费观看高清| 国精无码欧精品亚洲一区| 亚洲色大成网站www永久网站| 免费无码不卡视频在线观看| 亚洲人成电影在线天堂| 一区二区视频免费观看| 亚洲成AV人片在| 一二三区免费视频 | 久久精品亚洲精品国产色婷 | 成人国产精品免费视频| 国产精品成人免费综合| 亚洲喷奶水中文字幕电影| 一个人看的www免费视频在线观看| 亚洲精品无码久久千人斩| 足恋玩丝袜脚视频免费网站| 国产亚洲精品成人a v小说| 亚洲精品免费在线观看| 亚洲一区二区三区写真| 亚洲午夜精品久久久久久浪潮 | 久久久久亚洲av毛片大| 两个人看的www免费视频中文| 亚洲精品欧洲精品| 亚洲成人免费在线| 亚洲JIZZJIZZ妇女| 亚洲国产精品一区二区久久| 日韩成人在线免费视频| 亚洲AV无码一区二区三区牲色 |