Android中Application类能否设为包私有?是否为Lint误报?
关于Application类能否设为包私有及Lint警告的解答
绝对不能把你的SampleApplication设为包私有,这个Lint警告确实是误报,原因如下:
- Android系统启动应用时,完全依赖你在
AndroidManifest.xml里声明的Application全类名,通过反射来实例化这个类。如果你的Application类是包私有(默认无访问修饰符),反射机制在尝试创建实例时会抛出IllegalAccessException,直接导致应用启动失败,连启动页都看不到。 - 从Android组件的设计规范来说,Application类作为应用的全局入口类,必须是
public的。系统框架需要调用它的构造方法、onCreate()、onTerminate()等生命周期方法,包私有的访问权限会直接阻断框架的正常访问,引发运行时错误。
至于这个Lint警告,属于工具的误判:Lint在分析时只检查了代码内部对这个类的访问情况,没考虑到Android系统框架通过反射跨包访问它的场景,所以错误给出了“Declaration access can be weaker”的提示。你可以直接忽略这个警告,也可以在类上添加注解来抑制它:
@SuppressWarnings("WeakerAccess") public class SampleApplication extends Application { // 你的原有代码... }
内容的提问来源于stack exchange,提问作者Alexander Savin
相关产品推荐
相关产品推荐

