【问题标题】:Can't import android.support.v7 (appcompat) - Unresolved Library无法导入 android.support.v7 (appcompat) - 未解决的库
【发布时间】:2019-03-08 00:46:12
【问题描述】:

我尝试将此支持库导入到我的项目中,但无法使其正常工作。

首先我找不到它。当我点击 Dependencies 选项卡上的 + 按钮并搜索它时。我找到了 android.support.v4 但我也需要 v7。 我在某处读到该库可能已被弃用。

所以在我的代码中它不能导入 android.support.v7.widget.ShareActionProvider v7 是红色的,因为它无法解决。 我按照有关如何添加库的说明进行操作。但仍然无法解决问题。我做了正常的步骤,如清理、同步 gradle 文件、使链接无效等......

这是我在 mainactivity 中的一些代码

    import android.content.Intent
    import android.os.Bundle
    import android.support.v4.view.MenuItemCompat
    import android.view.Menu
    import android.view.MenuItem
    //import androidx.appcompat.widget.ShareActionProvider
    import androidx.appcompat.widget.Toolbar

    //import androidx.core.view.MenuItemCompat
    //import android.support.v4.view.MenuItemCompat
    //import androidx.core.view.MenuItemCompat.getActionProvider

    import android.support.v7.app.AppCompatActivity
    import android.support.v7.widget.ShareActionProvider
    //import android.widget.ShareActionProvider



    class MainActivity : AppCompatActivity() {
        private var shareActionProvider : ShareActionProvider? = null

    import android.content.Intent
    import android.os.Bundle
    import android.support.v4.view.MenuItemCompat
    import android.view.Menu
    import android.view.MenuItem
    //import androidx.appcompat.widget.ShareActionProvider
    import androidx.appcompat.widget.Toolbar

    //import androidx.core.view.MenuItemCompat
    //import android.support.v4.view.MenuItemCompat
    //import androidx.core.view.MenuItemCompat.getActionProvider

    import android.support.v7.app.AppCompatActivity
    import android.support.v7.widget.ShareActionProvider
    //import android.widget.ShareActionProvider


    class MainActivity : AppCompatActivity() {
        private var shareActionProvider : ShareActionProvider? = null

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val toolbar = findViewById(R.id.toolbar) as Toolbar
            setSupportActionBar(toolbar)
        }

        override fun onCreateOptionsMenu(menu : Menu): Boolean {
            getMenuInflater().inflate(R.menu.menu_main, menu)
            val menuItem = menu.findItem(R.id.action_share) as MenuItem
            shareActionProvider = MenuItemCompat.getActionProvider(menuItem) as ShareActionProvider
            setShareActionIntent("Want to join me for pizza?")
            return super.onCreateOptionsMenu(menu)
        }

        private fun setShareActionIntent(text : String) {
            val intent = Intent(Intent.ACTION_SEND)
            intent.type = "text/plain"
            intent.putExtra(Intent.EXTRA_TEXT, text)
            shareActionProvider!!.setShareIntent(intent)
        }

        override fun onOptionsItemSelected(item : MenuItem) : Boolean {
            when(item.itemId) {
                R.id.action_create_order -> {
                    val intent = Intent(this, OrderActivity::class.java)
                    startActivity(intent)
                    return true
                }
                else -> return super.onOptionsItemSelected(item)
            }
}
}

这是我的 gradle.build 文件

 // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.2.71'
    repositories {
        google()
        jcenter()
        maven { url '../pluginrepo' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-beta05'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是我的应用程序 (build.gradle) 文件

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.gandalf.bitsandpizza"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
    //    implementation 'com.android.support:support-core-utils:27.0.0'
    implementation 'com.google.android:support-v4:r7'
    implementation 'com.android.support:appcompat-v7:28.0.+'
    //    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:support-core-utils:28.0.+'
}

这是基于答案中建议的重构。

问题现已解决。这是来自 app 的更新后的 gradle.build 文件

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.some.name"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

【问题讨论】:

  • 为什么不使用它:import android.widget.ShareActionProvider;或者这个:import android.support.v7.widget.ShareActionProvider;
  • 所以如果我使用上述导入而不是 v7.那么这行代码就不行了,因为找不到getActionProvider。 shareActionProvider = MenuItemCompat.getActionProvider(menuItem) as ShareActionProvider
  • 红色是什么?
  • getActionProvider
  • 查看我的回答更新

标签: android gradle import build.gradle libraries


【解决方案1】:

所以在我的代码中它不能导入 android.support.v7.widget.ShareActionProvider v7 为红色 因为,无法解决

我希望这是您的代码中唯一的问题。您已添加:

implementation 'com.google.android:support-v4:r7'
implementation 'com.android.support:appcompat-v7:28.0.+' // Use specific version like 28.0.0 in future for this

指的是v4v7 AppCompat,但您的Toolbar 和测试+ ConstraintLayout 正在使用AndroidX 依赖项。这对我来说实际上很奇怪和困惑!

要使用 AppCompat 提供的ShareActionProvider,您需要先确保您的应用迁移到AndroidX

我相信这种情况正在发生,因为您的项目似乎已迁移到 AndroidX,这让 IDE 无法使用 AppCompatAndroidX

如果您尝试使用 V7 依赖项,只需转到 Refactor,选择 migrate to AppCompat

【讨论】:

    【解决方案2】:

    我正在使用这些依赖项

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    

    有进口

    import android.support.v4.view.MenuItemCompat
    import android.support.v7.widget.ShareActionProvider
    

    而且没有红色。

    也尝试清理代码

    正如@Mohsen 所说,您也可以尝试这样做

    【讨论】:

    • 第一个选项 v7 无法解决。对于第二个选项 getActionProvider 是未解析的引用。 shareActionProvider = MenuItemCompat.getActionProvider(menuItem) as ShareActionProvider
    • 是的,因为您没有迁移到 AndroidX 这就是原因。检查 OP 的 Activity 导入 ToolbarAppCompat。我试图在我的回答中解释所有这些,请也检查一下。
    • 然后@ConnectionistSystems 确保您拥有Android Studio 3.2,然后重构为AppCompat
    • 好的。我确实按照建议迁移到 AppCompat。我在 v7 上仍然有红色,这就是我厌倦使用 AndroidX 的原因。我还清理并同步了 gradle 文件。
    • 什么是红色?能发个截图吗?
    【解决方案3】:

    在一阵头疼之后。我发现问题出在我使用的 Android Studio 版本上。我使用的是 Beta 版本,由于某种原因,这些库被搞砸了。当我切换到稳定版本时,一切都开始正常工作。

    【讨论】:

      【解决方案4】:

      1) 只需按下 ALT+ENT 并选择 Migrate App to AppCompat。

      2) ImageView 重命名为 AppCompatImageView 。

      3) 最后按 ALT+ENT 导入课程。 问题解决了!

      或者导入 androidx.appcompat.widget.AppCompatImageView;

      【讨论】:

        【解决方案5】:

        我在 gradle.properties

        中使用这些
        android.useAndroidX=true
        android.enableJetifier=false
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          相关资源
          最近更新 更多