【问题标题】:Support vs "real" libraries and "classes could not be found"支持与“真实”库和“找不到类”
【发布时间】:2014-11-16 18:45:02
【问题描述】:

当我在即将试用 Android 5.0 Lollipop 时尝试在测试项目中使用 RecyclerView 时,我在 Google 网站上看到以下内容:

  1. 让我感到困惑的是,他们使用了支持的东西,而不是 API 21 中提供的“真实”的东西。我希望不使用支持包,因为我在设备上运行 5.0,下载了 SDK 21 并安装。为什么我不能直接使用RecyclerView,不使用支持...?

  2. 找不到类。在 Android Studio 中,我收到此错误:

“此处不允许使用元素 RecyclerView”,没有更多信息。另外,如果我使用上面发布的示例,我会得到同样的错误:

如果我点击“修复构建路径”,我会看到:

我在使用 Java 和 Android 时总是遇到这些问题,但错误消息不清楚。 sdk 的路径正确(在 SDK Location 下)。

这是我的毕业典礼:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "se.snapcode.lollipoptest"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.snapcode.lollipoptest" >

    <uses-sdk android:minSdkVersion="21"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

【问题讨论】:

    标签: android sdk android-studio android-5.0-lollipop


    【解决方案1】:

    由于我完全破坏了我的第一个答案,让我们从头开始再试一次......

    让我感到困惑的是,他们使用支持的东西而不是 API 21 中提供的“真实”东西。

    没有“真实”的东西。 RecyclerView 仅在 Android 支持包中,通过 recyclerview-v7 库项目/AAR。

    这类似于 Google 如何打包 ViewPagersupport-v4support-v13)、CardViewcardview-v7)、Android TV 的 Leanback UI(leanback-v17)等。

    Android 支持库不仅仅是一组反向移植。它确实包括只能通过这些库获得的各种类。除了上述之外,还有NavUtilsFileProvider 以及其他各种“原生”到 Android 支持库的类。

    所以,如果您想要 RecyclerView,请将 recyclerview-v7 添加到您的项目中,例如通过 Android Studio:

    或通过您的app 模块的build.gradle

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:recyclerview-v7:21.0.0'
    }
    

    【讨论】:

    • 我明白了。多么令人失望。我从不喜欢那些支持库。因此,要导入它们,您只需添加... gradle 什么?如果我进入项目属性,转到依赖项,单击加号--> 库,然后我会看到一个包含...内容的列表:support-v4、support-v13、appcompat-v7 和其他内容。是那些人吗? Appcompat-v7?一些 gradle 文件写道: compile 'com.android.support:recyclerview-v7:+' 这对我来说根本没有意义。
    • 那么,support-v4 和 support-v13 有什么区别?
    • @Ted:“是那些人吗?” - 是的,请参阅更新的答案。 “support-v4 和 support-v13 有什么区别?” -- support-v13support-v4 的明确超集,包括一些与ViewPager 相关的类,这些类仅与13 或更高的minSdkVersion 相关。
    • 感谢您的更新。我的下一个问题是:我怎么知道在 gradle 文件中写什么?因为当我在依赖项对话框中列出库时,“com.android.support:recyclerview-v7:21.0.0”没有出现,只是“support-4”或“support-13”和其他一些不相关的东西......所以,我可以添加依赖项列表:“com.android.support:support-v13:21.0.0”,但没有比这更具体的了。
    • @Ted:“因为当我在依赖项对话框中列出库时,“com.android.support:recyclerview-v7:21.0.0”没有出现”——再次检查,因为那是我是如何添加的。请参阅更新后的答案以获取另一个屏幕截图。
    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2015-04-06
    • 1970-01-01
    相关资源
    最近更新 更多