今天寫一個調節系統背光亮度的時候,參考了Android中的Setting源碼,在源碼中有這麼一段代碼:
- private static final int MAXIMUM_BACKLIGHT = android.os.PowerManager.BRIGHTNESS_ON;
然後我模仿它的代碼,來進行編寫我的應用,但是當我copy這段代碼後報錯
報錯內容如下:
- BRIGHTNESS_ON cannot be resolved or is not a field
然後我去察看源代碼,發現定義如下:
- /**
- * Brightness value for fully on.
- * @hide
- */
- public static final int BRIGHTNESS_ON = 255;
明顯聲明爲public,怎麼可能會訪問不到呢?再細看註釋,發現裏面有“@hide”這個標誌。後來百度一下才認識到,類或API是否開放,是通過doc的註釋{@hide}來控制的。這表示不對外公開api,但是系統內部是可以使用該註釋標記的接口的。
google 給了兩個選擇:1. 在你添加的API或者變量前面,增加javadoc 註釋@hide。但是要注意的是,並不是簡單寫個@hide 或者 /*@hide*/ 就可以了,這些都是錯誤的javadoc註釋格式,標準的javadoc都是這樣的 /** */ 而且對於 format 變量 應該加上 { }。所以我們應該這樣寫 /** {@hide} */ 2. 你就是想要生成的javadoc裏面出現這個方法或者變量,你必須輸入:make update-api 但是如果修改的是google沒有開放出來的類,比如RIL,PhoneFactory,就不會出現這個問題。
如何解決這個報錯的問題呢,問了一下公司的前輩,前輩是這麼解釋的,加入了 /** {@hide} */ 注視後的類或者API是google編譯時不對外開放的,但是運行的時候這寫類和API都是可以訪問的。爲了在Eclipse中不報錯的話,可以準備以下幾步就可以不報錯了。
1,準備好編譯後的Android源碼。
2,在該源碼的out目錄下尋找包含你所用隱藏類的jar文件,通常文件名爲classes.jar。例如framework的jar文件爲out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar。
3,在eclipse的Android項目中,選擇項目屬性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries進入到User Libraries管理界面,點擊New新建一個User Library,比如android_framework,點擊Add Jars把Jar包加入到建立的User Library中,最後點擊OK就可以了。
現在在Eclipse中就不會再報錯了。