1019. Android 源码编译的LOCAL_SDK_VERSION选项、hide和internal API

个人博客: 斯科特安的时间

这是Android源码编译的一个坑。

今天添加一个feature时,import了IPackageManager类,编译时提示找不到这个类。而这个类确实已经在编译好的源码中存在,并且在其他项目中引用时编译通过。
只有一个项目不通过。
后来通过对比发现这个项目的Android.mk文件中有这么一行,注释之后,编译通过。

# 若是添加,编译时会忽略源码隐藏的API,导致编译失败
LOCAL_SDK_VERSION := current

拓展一下,android sdk中的两类特殊的API

  1. Internal API
  2. Hide API

1 . Internal API

翻译为内部API,理解为供sdk内部使用的API。
这类接口最初打算就是不对外公开的,有点private的意思。

2 . Hide API

在源码中看到使用@hide 标记的方法或类,就是hide的。
这类接口本意是要公开,但是当前阶段仍然不稳定或未开发完成。所以暂时不推荐开发者调用。

但是,他们都可以被使用

两种方式:

  1. 通过反射
  2. 使用这些接口的情况是:目标接口已经编译进framework.jar(或其它对应的jar包)中,但是自己应用在编译时会报错。所以只要自己应用编译时同样添加相关jar包的引用,便可以编译通过。

你可能感兴趣的:(1019. Android 源码编译的LOCAL_SDK_VERSION选项、hide和internal API)