【问题标题】:gradle force build tools version on third party libraries?第三方库上的 gradle force build tools 版本?
【发布时间】:2014-06-30 15:48:11
【问题描述】:

如何强制库使用 sdk 构建工具 19.1.0 或更高版本,而无需分叉/手动编辑库的 build.gradle 文件?

我在使用库时不断收到此错误...

Error:The SDK Build Tools revision (.......) is too low for project ':somelibrary'. Minimum required is 19.1.0

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    缺乏简单的方法超出了我的理解。很多人使用他们不拥有的库项目,必须使用 Jenkins 构建或有其他原因不接触它们并且不想将它们分叉供个人使用。

    反正我找到了解决办法here

    复制到这里以防万一:

    在你的根 build.gradle 添加

    ext {
        compileSdkVersion = 20
        buildToolsVersion = "20.0.0"
    }
    subprojects { subproject ->
        afterEvaluate{
            if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
                android {
                    compileSdkVersion rootProject.ext.compileSdkVersion
                    buildToolsVersion rootProject.ext.buildToolsVersion
                }
            }
        }
    }
    

    这会将 compileSdkVersion 和 buildToolsVersion 应用于您拥有的任何 android 模块。

    并且在您的主项目的 build.gradle 中将依赖项更改为:

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
    

    基本上,您只需定义它们一次,就可以在任何地方使用。

    干杯。

    【讨论】:

    • 因为我对哪些gradle文件有点困惑,在Android Studio中它可能看起来像root build.gradle(项目:[ProjectName]),主项目的build.gradle(模块:app)跨度>
    • 棒极了,优雅又干净
    【解决方案2】:

    如果你只想在buildToolsVersion值太低的情况下更新compileSdkVersionbuildToolsVersion值,你可以先比较子项目的版本号,只在需要时更新。这样,您只需对其他项目进行最少的更改,并且检查是否出现问题的项目也更少。

    因此,假设 Android Studio 告诉您需要最低构建工具版本 25.0.0,然后在您的根目录 build.gradle 中,您将检查每个子项目的 buildToolsVersion 并仅更改它如果小于25.0.0:

    subprojects {
        afterEvaluate {project ->
            if (project.hasProperty("android") && VersionNumber.parse(project.property("android").buildToolsVersion) < VersionNumber.parse("25.0.0")) {
                android {
                    compileSdkVersion 25
                    buildToolsVersion '25.0.0'
                }
            }
        }
    }
    

    【讨论】:

    • 太棒了!这从“react-native-sqlite-storage”“找不到与给定名称匹配的资源:attr 'android:keyboardNavigationCluster'”和“'android:TextAppearance.Material.Widget.Button.Colored'”等修复了这些错误。如果有人用谷歌搜索这些错误,主要原因是我项目的 buildToolsVersion 和“react-native-sqlite-storage”库的 buildToolsVersion 之间的差异。该库使用 23.0.1,我的项目使用 26.0.1。最后有了上面的答案,我成功地强制库使用 26.0.1 版本的构建工具并且错误消失了。
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2014-03-14
    • 2016-04-15
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多