In FontFamilyFont, unable to find attribute android:font的报错处理

Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
Error:In <declare-styleable> FontFamilyFont, unable to find attribute android:font
Error:In <declare-styleable> FontFamilyFont, unable to find attribute android:fontWeight
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt
Information:BUILD FAILED
复制代码

你是不是也遇到过这种问题,而不知道从何下手?明明全部版本都已经修改过了,为什么还是会出现这种错误?我们带着心中的小疑惑来看一下这是为什么以及他的解决办法。进入正题,先说下出现这个问题的原因:

1.compileSdkVersion 和buildToolsVersion 的版本不对应
2.可能是工程中依赖的com.android.support:support-v4 (或support-v7) 版本不一致。

具体解决方案:

原因一:compileSdkVersion 和buildToolsVersion 的版本不对应

把工程的build.gradle文件中的compileSdkVersion及buildToolsVersion的版本设成一致。如下图所示

  • 升级你的buildToolsVersion到最新版,问题直接解决。
  • 也可以选择将目标版本降到你的sdk版本。不幸的是,问题丝毫没改变。

通过第一点的改正,我们排除了compileSdkVersion 和buildToolsVersion 的版本不对应的问题。但是还是没有完全解决掉该问题。咱们接着往下看

原因二:工程中依赖的com.android.support:support-v4 (或support-v7) 版本不一致

由于是导入别人的项目,对于dependencies{}中依赖的项目需要挨个排查依赖库使用的v4或者v7包的版本,最后找出原因并剔除类库中的support-v4,统一使用自己工程的就OK了(其他类似问题同理解决) 例如AndroidPicker类,修改如下

compile('cn.qqtheme.framework:WheelPicker:latest.release') { exclude group: 'com.android.support' }
复制代码

对于不是自己的项目而项目本身又有很多依赖的时候,这个工作量是巨大且盲目的,全部都查一遍的话是要疯掉的。没关系,咱们有简单粗暴而且有效的办法,咱们在configurations.all{}修正v4包版本的版本信息,如下所示

android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-v4:25.3.1'
    }
}
复制代码

让我们愉快的运行起来,突然发现还是报相同的错误。难道说是骗人的?并不是这样,刚才说了,可能是com.android.support:support-v4,也可能是com.android.support:appcompat-v7导致的或者是其他的support包导致的。

简单粗暴,直接有效

还是在configurations.all{}中,咱们对com.android.support:统一配置版本,代码如下:

android {
    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '25.3.1'
                }
            }
        }
    }
}
复制代码

问题解决,Sync一下项目自不用说。以后再也不用担心项目中依赖的某个库中依赖了support-v4或者v7版本过高了,用这个方法可以统一进行处理。如果有什么问题欢迎留言指正。如果对你有帮助,不妨点个赞支持一下。

猜你喜欢

转载自juejin.im/post/5b517d535188251b186bbf65
今日推荐