Bootstrap

android.support报错,import android.support.v7.app.AppCompatActivity; 报错

Android Studio 3.4推出有一段时间了,升级之后又有几个问题需要处理,说明如下:

一、把Gradle升级到AS3.4配套的5.1.1版本1、手工下载Gradle4.6并解压,下载地址是http://downloads.gradle.org/distributions/gradle-5.1.1-all.zip。将下载的压缩包解压到本地目录,比如解压到D:\Android\gradle-5.1.12、打开Android Studio,依次选择菜单“File”——“Settings”——“Build, Execution, Deployment”——“Gradle”,选中“Use Local gradle distribution”,然后输入Gradle5.1.1的解压目录。配置界面如下图所示:

21228c4ea3d68e3680927fe8b35db636.png

填完之后单击界面右下角的Apply按钮。

二、在新建的项目中导入外部模块时报错报错信息为“错误: 程序包android.support.v7.app不存在”,错误截图如下所示:

ee0f67b14f184230750363d949ff3d15.png

原因是AS3.4推出了AndroidX要取代原来的support库。创建新项目的时候,如果没有勾选“Use androidx.* artifacts”,那么导入外部模块不会报错;只有勾选了“Use androidx.* artifacts”,导入外部模块才会报上面的错。勾选界面如下图所示:

6655848ca727c99b41b447ca41fa511c.png

而且一旦勾选了“Use androidx.* artifacts”,后续创建其它项目的时候,该选项会变成默认选中,且为灰显不可取消,只有卸载重装AS才能恢复该选项。如果不想卸载重装,也想继续使用AndroidX的话,则要在导入外部模块之后,修改模块的build.gradle,把原来support库的路径改为对应的AndroidX库的路径。举个例子原来导入appcompat-v7的写法是下面这样:implementation 'com.android.support:appcompat-v7:28.0.0'

启用AndroidX之后,导入appcompat-v7的写法要改成下面这样:implementation 'androidx.appcompat:appcompat:1.0.0'

详细的support依赖库的新旧对应关系见下表:

支持库的旧路径支持库的新路径

com.android.support.constraint:constraint-layoutandroidx.constraintlayout:constraintlayout:1.1.2

com.android.support.test.espresso:espresso-coreandroidx.test.espresso:espresso-core:3.1.0

com.android.support.test:runnerandroidx.test:runner:1.1.0

com.android.support:appcompat-v7androidx.appcompat:appcompat:1.0.0

com.android.support:cardview-v7androidx.cardview:cardview:1.0.0

com.android.support:designcom.google.android.material:material:1.0.0-rc01

com.android.support:multidexandroidx.multidex:multidex:2.0.0

com.android.support:palette-v7androidx.palette:palette:1.0.0

com.android.support:recyclerview-v7androidx.recyclerview:recyclerview:1.0.0

com.android.support:support-v4androidx.legacy:legacy-support-v4:1.0.0

除了修改support库的路径,还要修改support控件的import导包代码,像AppCompatActivity原来的import语句是下面这样的:import android.support.v7.app.AppCompatActivity;

启用AndroidX之后,导入AppCompatActivity的代码要改成下面这样:import androidx.appcompat.app.AppCompatActivity;

详细的support控件的新旧对应关系见下表:

支持控件的旧包名支持控件的旧包名

android.support.v4.app.Fragmentandroidx.fragment.app.Fragment

android.support.v4.app.FragmentActivityandroidx.fragment.app.FragmentActivity

android.support.v4.app.FragmentManagerandroidx.fragment.app.FragmentManager

android.support.v4.app.FragmentPagerAdapterandroidx.fragment.app.FragmentPagerAdapter

android.support.v4.view.ViewPagerandroidx.viewpager.widget.ViewPager

android.support.v4.view.PagerAdapterandroidx.viewpager.widget.PagerAdapter

android.support.v4.view.PagerTabStripandroidx.viewpager.widget.PagerTabStrip

android.support.v4.view.PagerTitleStripandroidx.viewpager.widget.PagerTitleStrip

android.support.v4.content.FileProviderandroidx.core.content.FileProvider

android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity

android.support.v7.widget.Toolbarandroidx.appcompat.widget.Toolbar

android.support.v7.widget.RecyclerViewandroidx.recyclerview.widget.RecyclerView

android.support.v7.widget.GridLayoutManagerandroidx.recyclerview.widget.GridLayoutManager

android.support.v7.widget.LinearLayoutManagerandroidx.recyclerview.widget.LinearLayoutManager

android.support.v7.widget.StaggeredGridLayoutManagerandroidx.recyclerview.widget.StaggeredGridLayoutManager

android.support.v7.widget.CardViewandroidx.cardview.widget.CardView

android.support.v7.graphics.Paletteandroidx.palette.graphics.Palette

android.support.design.widget.AppBarLayoutcom.google.android.material.appbar.AppBarLayout

android.support.design.widget.CollapsingToolbarLayoutcom.google.android.material.appbar.CollapsingToolbarLayout

android.support.design.widget.CoordinatorLayoutandroidx.coordinatorlayout.widget.CoordinatorLayout

android.support.design.widget.CutoutDrawablecom.google.android.material.textfield.CutoutDrawable

android.support.design.widget.FloatingActionButtoncom.google.android.material.floatingactionbutton.FloatingActionButton

android.support.design.widget.NavigationViewcom.google.android.material.navigation.NavigationView

android.support.design.widget.Snackbarcom.google.android.material.snackbar.Snackbar

android.support.design.widget.TabLayoutcom.google.android.material.tabs.TabLayout

;