@SystemApi
,@PrivateApi
和@hide
據this commit,@SystemApi
是老@PrivateApi
重命名。標記爲@hide
的API不一定是@SystemApi
,但@SystemApi
需要@hide
。
有關@hide
javadoc註釋的更多信息,this post給出了一個很好的答案。
根據我自己的實驗,一個(非系統應用程序)仍然可以訪問@hide
API和領域使用Java反射像(來自this post):
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration config = new WifiConfiguration();
config.SSID = "AccessPointSSID";
Method method = manager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(manager, config, true);
但試圖訪問@SystemApi
事情使用Java反射是不可能的(以下代碼將觸發invocationTargetException
):
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method method = manager.getClass().getMethod("getPrivilegedConfiguredNetworks");
List<WifiConfiguration> configs = (List<WifiConfiguration>)method.invoke(manager);
P.S.
在WifiManager
java code中,setWifiApEnabled
和getPrivilegedConfiguredNetworks
的API被定義爲:
/**
* Start AccessPoint mode with the specified
* configuration. If the radio is already running in
* AP mode, update the new configuration
* Note that starting in access point mode disables station
* mode operation
* @param wifiConfig SSID, security and channel details as
* part of WifiConfiguration
* @return {@code true} if the operation succeeds, {@code false} otherwise
*
* @hide Dont open up yet
*/
public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
try {
mService.setWifiApEnabled(wifiConfig, enabled);
return true;
} catch (RemoteException e) {
return false;
}
}
和
/** @hide */
@SystemApi
public List<WifiConfiguration> getPrivilegedConfiguredNetworks() {
try {
return mService.getPrivilegedConfiguredNetworks();
} catch (RemoteException e) {
return null;
}
}
感謝您的解釋!在我的測試中,大多數使用'@SystemApi'和'@ hide'註釋的API(以前只有'@ hide'註解)仍然可以通過反射訪問。你的情況下'InvocationTargetException'的詳細信息是什麼? – 2014-12-07 11:57:01
我使用Android 5.0在Nexus 5上做了實驗。 @ oasis-feng我猜''SystemApi'的行爲是版本相關的? – 2015-01-12 03:05:17
我還使用Android 5.0.2在Nexus 5上測試了它。也許它不同於API到API。你可以粘貼你的InvocationTargetException的詳細消息嗎? – 2015-01-12 08:43:39