无法解析符号ContextCompat,如何获取android-support-v4.jar?
解决ContextCompat无法解析及support-v4库依赖问题
嘿,其实你不用费心手动找android-support-v4.jar的——看你的build.gradle,已经添加了com.android.support:support-v4:23.1.0的依赖,Android Studio本来会自动从仓库拉取这个库。出现Cannot resolve symbol ContextCompat的报错,大概率是依赖没同步成功,或者配置有小问题,按下面的步骤来解决:
第一步:先同步Gradle依赖
- 点击Android Studio右上角那个大象图标(Sync Project with Gradle Files),等待同步完成。如果同步时提示下载失败,检查下你的网络能不能正常访问jcenter和maven.google.com这两个仓库。
- 如果同步还是不行,试试清理项目缓存:点顶部菜单栏的
File -> Invalidate Caches / Restart,选Invalidate and Restart,重启后再同步一遍。
第二步:调整依赖配置(可选但推荐)
你的dependencies里用的是旧的compile关键字,在Android Studio 3.0+版本里,官方已经推荐用implementation替代compile了,虽然旧写法还能兼容,但换成新的能避免一些潜在问题:
implementation 'com.android.support:support-v4:23.1.0'
另外你的compileSdkVersion是23,support库版本23.1.0和它匹配,这部分是没问题的。
万不得已才手动加jar包(不推荐)
如果自动同步实在搞不定,那再手动下载:
- 打开SDK Manager(Tools -> SDK Manager),切换到SDK Tools标签,勾选
Show Package Details - 找到Android Support Library,展开后选和你compileSdkVersion匹配的23.1.0版本,点Apply下载
- 下载完后,jar包在
你的SDK目录/extras/android/m2repository/com/android/support/support-v4/23.1.0/support-v4-23.1.0.jar,把它复制到项目的libs文件夹里,你的build.gradle已经有compile fileTree(include: ['*.jar'], dir: 'libs'),所以不用额外配置了。
顺便提下你的权限判断逻辑
你的checkPermission()方法逻辑有点问题哦:现在的判断是两个权限都没授予才返回true,但实际上只要有一个没授予,就应该去申请权限。而且在Android 6.0+(API23)里,申请WRITE_EXTERNAL_STORAGE的时候会自动包含READ_EXTERNAL_STORAGE权限,所以可以简化成这样:
private boolean checkPermission() { return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED; }
内容的提问来源于stack exchange,提问作者Ian M




