“compileSdkVersion未指定,请在build.gradle中添加”即使已添加compileSdkVersion

3
这是我之前提出的问题的后续:在GitHub上的示例项目中找不到“com.android.tools.build:gradle:3.2.1.” (Could not find com.android.tools.build:gradle:3.2.1. in a sample project from github)。
我正在尝试编译此处提供的项目:https://github.com/dakatso/SpeexExample
为了消除 gradle 同步错误,我必须首先更改项目级别的 gradle.build 和 gradle-wrapper.properties 文件。所做的更改如链接问题及其答案所示 (Could not find com.android.tools.build:gradle:3.2.1. in a sample project from github)。
但是,在 /library 和 /sample 文件夹中的 app 级别的 build.gradle 文件中,我仍然遇到错误。 我尝试做一些修改,但出现一个错误,提示“未指定 compileSdkVersion”,尽管已在文件中指定。 我认为该项目是使用旧版本的 Android Studio 和 Gradle 创建的,这些版本对最新版本的 Android Studio (4.0) 不适用。以下是 app 级别的 build.gradle 文件(显示原始代码以及我的修改):
/library 的 build.gradle:
// apply plugin: 'com.android.model.library'        // ORIGINAL
apply plugin: 'com.android.library'

model {
    android {
        // compileSdkVersion = 24       // ORIGINAL
        compileSdkVersion 26
        buildToolsVersion = '24.0.0'

        defaultConfig {
            // ORIGINAL
            // minSdkVersion.apiLevel = 9
            // targetSdkVersion.apiLevel = 24

            minSdkVersion 9
            targetSdkVersion 26

        }

        sources {
            main {
                jni {
                    exportedHeaders {
                        srcDir 'src/main/jni/include'
                    }
                }
            }
        }

        ndk {
            moduleName = 'speex'
            platformVersion = '9'
            toolchain = 'clang'

            CFlags.add('-DFIXED_POINT')
            CFlags.add('-DUSE_KISS_FFT')
            CFlags.add('-DEXPORT=\"\"')
        }
    }
}

/sample 的 build.gradle:

// apply plugin: 'com.android.model.application'        // ORIGINAL
apply plugin: 'com.android.application'

model {
    android {
        // compileSdkVersion = 24       // ORIGINAL
        compileSdkVersion 26
        buildToolsVersion = '24.0.0'

        defaultConfig {
            applicationId 'com.speex.speexsample'
            // ORIGINAL
            // minSdkVersion.apiLevel = 9
            // targetSdkVersion.apiLevel = 24
            minSdkVersion 9
            targetSdkVersion 26

            versionCode = 1
            versionName = '1.0.0'
        }

        productFlavors {
            create("arm") {
                ndk.abiFilters.add("armeabi")
            }
            create("arm7") {
                ndk.abiFilters.add("armeabi-v7a")
            }
            create("arm8") {
                ndk.abiFilters.add("arm64-v8a")
            }
            create("x86") {
                ndk.abiFilters.add("x86")
            }
            create("x86-64") {
                ndk.abiFilters.add("x86_64")
            }
            create("mips") {
                ndk.abiFilters.add("mips")
            }
            create("mips-64") {
                ndk.abiFilters.add("mips64")
            }
            create("all")
        }
    }
}

dependencies {
    // ORIGINAL
    // compile fileTree(include: ['*.jar'], dir: 'libs')
    // compile 'com.android.support:appcompat-v7:24.0.0'
    // compile 'com.android.support:design:24.0.0'
    // compile project(':library')

    implementation fileTree(include: ['*.jar'], dir: 'libs')
    // implementation 'com.android.support:appcompat-v7:24.0.0'        // ORIGINAL
    implementation 'com.android.support:appcompat-v7:26.0.0'
    // implementation 'com.android.support:design:24.0.0'              // ORIGINAL
    implementation 'com.android.support:design:26.0.0'
    implementation project(':library')

}

这些文件应该被修改以使得该项目能够编译。

它基于gradle-experimental。移除model块。只使用:android { ... } - Gabriele Mariotti
@GabrieleMariotti 移除 model 会导致 gradle 同步时出现以下错误:在类型为 com.android.build.gradle.LibraryExtension 的 'android' 扩展中,找不到方法 sources() 的参数 [build_ckwpzmz3kdwwxj3uf21uqur86$_run_closure1$_closure3@2c887c80]。 - user13267
@GabrieleMariotti 这个错误在 /library 的 build.gradle 文件中。 - user13267
3个回答

1

看起来gradle文件来自一个旧的实验性gradle插件,现在你已经将其更改为当前的库/应用程序插件。

通过删除model {}块并使android {}成为顶级块,您可能可以消除compileSdkVersion警告。预计将来会出现更多迁移问题。


删除 model 后,gradle同步时会出现以下错误:在类型为 com.android.build.gradle.LibraryExtension 的 android 扩展中找不到方法 sources() 的参数 [build_ckwpzmz3kdwwxj3uf21uqur86$_run_closure1$_closure3@2c887c80]。 - user13267
这个错误出现在 /library 的 build.gradle 文件里。 - user13267
是的,不同插件的语法是不同的。从一个DSL迁移到另一个DSL需要进一步的工作。 - laalto
这是一个困难的任务吗?如果不是微不足道的,是否有办法让原始的Github代码在Android Studio 4.0上编译,或者它太旧而无法被支持? - user13267

0
在我的情况下,使用普通的 Cordova 时,我只是没有第一次从命令行引导项目。执行以下操作: cordova build android 在命令行中解决了这个问题。

0

打开 app/build.gradle 文件并找到以下行:

compileSdk compileSdkVersion

将上述行替换为以下内容:

compileSdk rootProject.ext.compileSdkVersion

这个更改将确保 compileSdkVersion 正确引用项目的根扩展属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接