2017-03-16 35 views
1

我的项目包括NDK。这是build.gradle文件(应用程序级别)。如何解决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' 
} 

这是我得到的错误:

Error:Gradle DSL method not found: '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 
} 

问:什么是可能造成此;以及如何解决?

回答

1

我不知道如果这有助于但是http://tools.android.com/tech-docs/new-build-system/gradle-experimental说,在某些时候对于NDK库Android的摇篮语法改为

The DSL for specifying dependencies on a specific library files have changed to follow Gradle's native dependency DSL.

从他们examlpe它看起来像你需要改变你的脚本是这样的

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" 
       } 
      } 
     } 
    } 
} 

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

+0

感谢您的回答,会尝试:) – OBX

+0

@OBX,让我们知道这竟是问题,或者是别的东西 – SergGr

0

我刚修好了,这是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' 
    } 

你必须添加库文件夹libs在文件夹main下。

希望它会帮助!

(对不起,我的英语,我是一个法国佬)