【问题标题】:Android Studio - Missing class declarations in target API's classesAndroid Studio - 目标 API 的类中缺少类声明
【发布时间】:2017-03-02 08:54:44
【问题描述】:

我正在使用 Android Studio 2.2.3,目前正在开发具有以下构建条件的应用,如应用的 build.gradle 文件中所示:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "com.example.gery.syncadaptercustomtest"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner  "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

如您所见,该应用的目标是 API 24。我已安装(我认为)所有必需的 SDK 组件:

  • Android SDK 构建工具 24.0.3
  • Android 24 的来源
  • Android SDK 平台 24
  • Google API(适用于 API 级别 24)

在我的应用程序中,我正在使用本机 AccountManager 类的方法之一。如果我跳转到AccountManager.addAccountExplicitly() 方法的声明,我可以看到:

正如您在右侧的滚动区域中看到的那样,缺少几个声明,就像它们不会被导入到类中一样。例如,在第 733 行,mService 字段具有 Android Studio 无法找到的类类型,因此该方法也丢失了(将鼠标悬停在其上时显示“无法解析方法...”)。这就是该字段缺失的类类型的样子(第 269 行):

我尝试重新安装每个 SDK 组件,甚至尝试了几次 File > Invalidate Caches / Restart,但问题仍然存在。我在 SO 和其他任何地方都没有找到类似的东西。有人知道发生了什么吗?


更新 1: 在 DKIT 的回答之后,我在 Android Developers 类参考中四处寻找,搜索 IAccountManager 类,但它无处可寻 - 我不知道这可能是什么它指的是什么。此外,AccountManager 类是在 API Level 5 中引入的,它的大部分方法包括addAccountExplicitly();所以我看不出为什么它不会出现在任何当今的常见设备上。

顺便说一下,AccountManager 中的以下类也“未导入”(从技术上讲,它们在 import 部分中,但它们的声明也丢失了)。也许这有帮助...

  • android.annotation.NonNull
  • android.annotation.RequiresPermission
  • android.annotation.Size
  • android.annotation.SystemApi(参见图 2 第 259 行)
  • com.google.android.collect.Maps

更新 2:我在原生 Android 类中缺少这么多内部组件的原因是我想知道它们内部到底发生了什么。我认为在这里,在 Android Studio 中查看 Android 组件的工作非常简单,但是这个用例/功能可能存在于互联网上我不知道的其他地方......:D

感谢 Ashwin Mothilal 帮助我向大家说明这一点! ;)

【问题讨论】:

  • 那些图片是 AccountManager.java 的类文件吧?你怎么可能看到他们的私有方法。即 mService.addAccountExplicitly()
  • 图像是在 AccountManager.java 文件中制作的(AccountManager 类本身),您可以在 AS Project Explorer 中找到它。抱歉,我不太清楚你的问题... :)
  • Account Manager 不是您创建的吧?它存在于包android.accounts中;可以查看他们的私有方法吗?绝对不。打电话给public boolean addAccountExplicitly(Account account, String password, Bundle userdata),你会得到结果,你不应该使用这个mService.addAccountExplicitly(account, password, userdata);
  • 谢谢,明白你的意思...我已经更新了我的问题...

标签: java android android-studio


【解决方案1】:

好的,Android Studio 不允许查看他们的私人成员以及上面评论中提到的内部发生的事情。

  1. 根据这个问题,我确定 android studio 不允许这样做。
  2. 可能是别的东西。

我不确定第二点,但确定第一点。

Account Manager 不是由您创建的,对吧?它存在于包android.accounts中;可以查看他们的私有方法吗?绝对不。调用 public boolean addAccountExplicitly(Account account, String password, Bundle userdata) 你会得到结果,你不应该使用这个 mService.addAccountExplicitly(account, password, userdata);

【讨论】:

  • 很高兴知道...谢谢!
【解决方案2】:

您已将 minSdkVersion 指定为 15。 因此,如果您调用的方法在 API 级别 15 中不存在,您将收到此警告。您可能必须通过检查 API 级别并在此基础上执行条件代码来处理代码在不存在此方法的设备上运行的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多