中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 內部API (android.internal)和隱藏代碼(@hide)概述

發布時間:2020-06-30 11:46:43 來源:網絡 閱讀:3532 作者:飛翔的貓咪 欄目:移動開發

內部API和隱藏代碼的例子

在翻閱Android源碼的時候有時會遇到一些奇怪的代碼,例如下面這個:

//注:這段代碼在源碼android/provider/Telephony.java中。
import android.util.Patterns;

import com.android.internal.telephony.SmsApplication;

import java.util.HashSet;
//……

還有這種(下面這段摘自同一文件):

        /**
         * //comments...
         * @hide
         */
        public static boolean isOutgoingFolder(int messageType) {
            //method body...
        }


這些代碼是什么意思呢?

內部API:android.internal.*

實際上,在SDK的source目錄,是找不到所謂android.internal包的。該包下的所有類的源碼都是不可見的,僅供系統內部使用。一般而言,在這個包下的都是Android系統核心功能,不對外開放接口和源碼。

隱藏代碼:@hide

與內部API不同,使用@hide標記的一般并非整個文件或外部類,而一般是內部類、函數或字段,姑且籠統稱其為隱藏代碼(我個人認為不對外開放的代碼不應該叫做Application Programming Interface)。這些隱藏代碼在源碼中可見,但并不能直接引用。


內部API和隱藏API的不同

從Google的目的看,使用兩種不同的方式,是有自己的考慮的,內部API屬于系統核心部分,不計劃對外開放。系統的核心功能會通過Framework提供一定的訪問,但并不需要公布其代碼。

而隱藏API則更多是為了考慮Android不同版本間的安全性。很有可能一個正在開發的、并不穩定的Feature被隱藏,直到穩定、成熟后再開放。Android在API Level5之后才出現Bluetooth API,但實際上更早的源碼中就已經有這部分代碼,只不過被@hide隱藏起來了。可以想見,如果某個應用程序依賴于API 4的Bluetooth API,很有可能在Android2.0(API Level5)的機器上出現不可預料的問題。

當然,內部代碼也有可能發生這樣的變動,但由于它本身對開發者來說就是個黑盒子,因此它內部的變動我們大可放心交給Google啦。


開發者眼中的不同

目前一般Android開發者使用Eclispe ADT插件進行開發,對于一般的開發者來說,內部API和隱藏代碼沒什么區別,都沒法用嘛。不過,總有那么一些人出于各種目的,希望使用這些API。

在開發的時候我們使用最多的庫就是android.jar包,該包下有我們用的幾乎所有功能【不排除會使用到android-support-v4.jar】。在該jar包中,我們可以看到,所有的android.internal內的類都不見了,同樣,類中也不含有源碼中標記為@hide的字段、函數和類。

但是在應用程序真正在設備上運行的時候,系統加載的是framework.jar包,該包未被裁剪,包含所有內部API和隱藏代碼。因此開發者可以通過反射機制進行調用。

此外,在使用Eclipse ADT 的時候,ADT插件專門對android.internal包做了訪問規則限制。因此,即使將項目下的android.jar替換成未裁剪的android.jar包,也是很難使用內部API的。

Android 內部API (android.internal)和隱藏代碼(@hide)概述


不推薦使用內部API和隱藏代碼

如前所述,理論上,開發者盡可以使用反射機制進行對這些功能的調用。但是,必須面對以下問題:

  • 使用這樣的功能會使程序的代碼變得晦澀難懂,難于維護;

  • 不同廠家的Framework包可能略有差別,難以兼顧多種設備;

  • Android版本升級后,其內部功能或者隱藏代碼可能發生較大的變化,因此使用了這些代碼的程序無法確保向后兼容。


參考資料:使用內部(com.android.internal)和隱藏(@hide)API[第1部分,介紹]

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德安县| 大冶市| 西林县| 四川省| 陆川县| 翼城县| 福泉市| 绍兴市| 兴隆县| 惠东县| 古浪县| 昌邑市| 响水县| 安仁县| 定边县| 宜川县| 昭苏县| 阿勒泰市| 拜泉县| 稻城县| 昌宁县| 同心县| 新闻| 叶城县| 东方市| 桂平市| 福清市| 大安市| 蛟河市| 玛沁县| 安义县| 阿勒泰市| 柘城县| 镇宁| 钦州市| 塔城市| 赣榆县| 惠来县| 青铜峡市| 大宁县| 宁阳县|