首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android源代码中@hide是什么意思?

在Android源代码中@hide是什么意思?
EN

Stack Overflow用户
提问于 2013-06-11 09:32:56
回答 1查看 53K关注 0票数 130

对于Activity source code,第398行(靠近底部):

代码语言:javascript
复制
/**
 * @hide
 */
public final boolean isResumed() {
    return mResumed;
}

@hide是什么意思?

我发现我的public class ChildActivity extends Activity { ... }不能使用/查看Activity.isResumed()。这是正常的吗?我如何访问它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-12 10:08:41

Android有两种无法通过SDK访问的API。

第一个位于package com.android.internal中。第二个API类型是用@hide Javadoc attribute标记的类和方法的集合。

从Android9(API28级)开始,谷歌引入了new restrictions on the use of non-SDK interfaces,无论是直接、通过反射还是通过JNI。每当应用程序引用非SDK接口或尝试使用反射或JNI获取其句柄时,都会应用这些限制。

但是在API级别28之前,隐藏的方法仍然可以通过Java反射来访问。@hide属性只是Javadoc (也包括droiddoc)的一部分,所以@hide仅仅意味着方法/类/字段被排除在API文档之外。

例如,ActivityManager.java中的checkUidPermission()方法使用@hide

代码语言:javascript
复制
/** @hide */
public static int checkUidPermission(String permission, int uid) {
    try {
        return AppGlobals.getPackageManager()
                .checkUidPermission(permission, uid);
    } catch (RemoteException e) {
        // Should never happen, but if it does... deny!
        Slog.e(TAG, "PackageManager is dead?!?", e);
    }
    return PackageManager.PERMISSION_DENIED;
}

但是,我们可以通过反射来调用它:

代码语言:javascript
复制
Class c;
c = Class.forName("android.app.ActivityManager");
Method m = c.getMethod("checkUidPermission", new Class[] {String.class, int.class});
Object o = m.invoke(null, new Object[]{"android.permission.READ_CONTACTS", 10010});
票数 194
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17035271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档