【问题标题】:How to fix the gradle error?如何修复gradle错误?
【发布时间】:2017-03-16 14:05:45
【问题描述】:

我的项目包括 NDK 。这是build.gradle 文件(应用程序级)。

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

model {
    android {
        compileSdkVersion = 25
        buildToolsVersion = "25.0.1"

        defaultConfig.with {
            applicationId = "com.example.app"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 22
            versionCode = 1
            versionName = "1.0"
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles.add(file("proguard-rules.pro"))
        }
    }
    android.ndk {
        moduleName = "HelloARVideoNative"
        cppFlags.add("-I${file("/home/obx/Downloads/EasyARSDKSamples/package/include")}".toString())
        cppFlags.add("-DANDROID")
        cppFlags.add("-fexceptions")
        cppFlags.add("-frtti")
        stl = "gnustl_static"
        ldLibs.add("log")
        ldLibs.add("GLESv2")
    }
    android.productFlavors {
        create("arm") {
            ndk.with {
                abiFilters.add("armeabi-v7a")
            }
        }
    }
    android.sources {
        main {
            jni {
                dependencies {
                    library file("/home/obx/Downloads/EasyARSDKSamples/package/Android/libs/armeabi-v7a/libEasyAR.so") abi "armeabi-v7a"
                }
            }
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: '/home/obx/Downloads/EasyARSDKSamples/package/Android/libs')
    compile 'com.android.support:appcompat-v7:25.1.1'
    testCompile 'junit:junit:4.12'
}

这是我得到的错误:

错误:找不到 Gradle DSL 方法:'library()'

这是我尝试过的:

这是我的顶级gradle 文件:

    buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

问题:可能是什么原因造成的;以及如何解决?

【问题讨论】:

    标签: java android gradle android-ndk android-gradle-plugin


    【解决方案1】:

    我不确定这是否有帮助,但 http://tools.android.com/tech-docs/new-build-system/gradle-experimental 表示,在某些时候,用于 NDK 库的 Android Gradle 语法已更改

    用于指定对特定库文件的依赖项的 DSL 已更改为遵循 Gradle 的本机依赖项 DSL。

    从他们的示例看来,您需要将脚本更改为类似

    model {
        ...
        repositories {
            prebuilt(PrebuiltLibraries) {
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("/home/obx/Downloads/EasyARSDKSamples/package/Android/libs/armeabi-v7a/libEasyAR.so")
                    // or even 
                    // sharedLibraryFile = file("/home/obx/Downloads/EasyARSDKSamples/package/Android/libs/${targetPlatform.getName()}/libEasyAR.so")
                }
            }
        }
        android.sources {
            main {
                jni {
                    dependencies {
                         library "prebuilt"
                    }
                }
            }
        }
    }
    

    您也可以考虑使用jniLibs 而不是jni,它被描述为

    您可以将本机依赖项添加到“jniLibs”或“jni”源集。当依赖添加到“jniLibs”时,本机库将被打包到应用程序/库中,但不会用于编译 JNI 代码。

    【讨论】:

    • 感谢您的回答,将尝试:)
    • @OBX,让我们知道这是真的问题还是其他原因
    【解决方案2】:

    我刚刚修好了,是libEasyAR.so的链接有问题。 这就是我的build.gradle 经过一些修改后的样子:

    apply plugin: 'com.android.model.application'
    
        model {
            android {
                compileSdkVersion = 25
                buildToolsVersion = "25.0.2"
    
                defaultConfig.with {
                    applicationId = "cn.easyar.samples.helloar"
                    minSdkVersion.apiLevel  =15
                    targetSdkVersion.apiLevel = 22
                    versionCode = 1
                    versionName = "1.0"
                }
            }
            android.buildTypes {
                release {
                    minifyEnabled = false
                    proguardFiles.add(file("proguard-rules.pro"))
                }
            }
            android.ndk {
                moduleName = "HelloARNative"
                cppFlags.add("-I${file("../../../package/include")}".toString())
                cppFlags.add("-DANDROID")
                cppFlags.add("-fexceptions")
                cppFlags.add("-frtti")
                stl = "gnustl_static"
                ldFlags.add("-LC:/Users/Me/Documents/AR_SDK/EasyAR/EasyARSDKSamples/Android/HelloARNative/app/src/main/jniLibs/armeabi-v7a")
                ldLibs.add("log")
                ldLibs.add("GLESv2")
                ldLibs.add("EasyAR")
            }
            android.productFlavors {
                create("arm") {
                    ndk.with {
                        abiFilters.add("armeabi-v7a")
                    }
                }
            }
            repositories {
                libs(PrebuiltLibraries) {
                    prebuilt {
                        headers.srcDir "src/main/jni"
                        binaries.withType(SharedLibraryBinary) {
                            sharedLibraryFile = file("src/main/libs/armeabi-v7a/libEasyAR.so")
                        }
                    }
                }
            }
            android.sources {
                main {
                    jniLibs {
                        dependencies {
                            library "prebuilt"
                        }
                    }
                }
            }
        }
    
        dependencies {
            compile fileTree(include: ['*.jar'], dir: '../../../package/Android/libs')
            testCompile 'junit:junit:4.12'
            compile 'com.android.support:appcompat-v7:20.0.0'
        }
    

    您必须在文件夹main 下的文件夹libs 中添加库。

    希望对你有所帮助!

    (对不起我的英语,我是法国人)

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2021-11-18
      • 1970-01-01
      • 2022-12-30
      • 2021-10-13
      • 2014-11-12
      相关资源
      最近更新 更多