Android 三方APP调用系统隐藏API
背景
在Android系统中,出于保护目的,Android framework对有些API 添加了@hide,@SystemApi注解,三方APP是无法直接通过SDK调用的。但有时我们有功能需求,期望我们的APP可以调用系统隐藏API,或我们在framework service开发了某个API,期望我们的APP可以调用这些隐藏API。
这里介绍3种Android三方APP调用系统隐藏API的方法
系统隐藏API,我们以WifiManager中的getVerboseLoggingLevel()为例,其没有权限检查,三方APP可以通过下面演示的三种方式直接调用。
http://androidxref.com/9.0.0_r3/xref/frameworks/base/wifi/java/android/net/wifi/WifiManager.java#3561
3556 /**
3557 * Get the WiFi verbose logging level.This is used by settings
3558 * to decide what to show within the picker.
3559 * @hide
3560 */
3561 public int getVerboseLoggingLevel() {
3562 try {
3563 return mService.getVerboseLoggingLevel();
3564 } catch (RemoteException e) {
3565 throw e.rethrowFromSystemServer();
3566 }
3567 }
1. 通过APP加载framework编译的classes jar的方式访问隐藏API
1.1 我这里访问的WifiManager.getVerboseLoggin