个人博客: 斯科特安的时间
这是Android源码编译的一个坑。
今天添加一个feature时,import了IPackageManager
类,编译时提示找不到这个类。而这个类确实已经在编译好的源码中存在,并且在其他项目中引用时编译通过。
只有一个项目不通过。
后来通过对比发现这个项目的Android.mk
文件中有这么一行,注释之后,编译通过。
# 若是添加,编译时会忽略源码隐藏的API,导致编译失败
LOCAL_SDK_VERSION := current
拓展一下,android sdk中的两类特殊的API
- Internal API
- Hide API
1 . Internal API
翻译为内部API,理解为供sdk内部使用的API。
这类接口最初打算就是不对外公开的,有点private的意思。
2 . Hide API
在源码中看到使用@hide 标记的方法或类,就是hide的。
这类接口本意是要公开,但是当前阶段仍然不稳定或未开发完成。所以暂时不推荐开发者调用。
但是,他们都可以被使用
两种方式:
- 通过反射
- 使用这些接口的情况是:目标接口已经编译进framework.jar(或其它对应的jar包)中,但是自己应用在编译时会报错。所以只要自己应用编译时同样添加相关jar包的引用,便可以编译通过。
网友评论