2016-04-20 39 views
11

Po aktualizacji do gradla 2.10 za każdym razem, gdy próbuję usunąć kompilację aplikacji z wersji assemble, otrzymuję wyjątek NoSuchMethodError. Tutaj jest odpowiednia część dziennika budowy:Databinding kończy się niepowodzeniem z NoSuchMethodError

java.lang.RuntimeException: failure, see logs for details. 
    cannot generate view binders java.lang.NoSuchMethodError: com.google.common.base.Strings.isNullOrEmpty(Ljava/lang/String;)Z 
    at android.databinding.tool.util.StringUtils.capitalize(StringUtils.java:57) 
    at android.databinding.tool.util.ParserHelper.toClassName(ParserHelper.java:23) 
    at android.databinding.tool.store.ResourceBundle$LayoutFileBundle.getFullBindingClass(ResourceBundle.java:551) 
    at android.databinding.tool.store.ResourceBundle$LayoutFileBundle.getBindingClassPackage(ResourceBundle.java:541) 
    at android.databinding.tool.CompilerChef.pushClassesToAnalyzer(CompilerChef.java:124) 
    at android.databinding.tool.CompilerChef.createChef(CompilerChef.java:73) 
    at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:148) 
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82) 
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154) 
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139) 
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66) 

Jak widać metoda com.google.common.base.Strings.isNullOrEmpty nie można znaleźć.

Niektóre specyfiki

używam Retrolambda 3.2.5 i Java 8. Nie ma żadnych innych dodatkowych wtyczek.

Budowa Wersja wtyczki: com.android.tools.build:gradle:2.0.0

Budowa narzędzia wersja: 23.0.3

OS: OS X

build.gradle wygląda następująco. Zmieniłem go nieznacznie, aby nie ujawniać prywatnych rzeczy, ale problem nadal istnieje.

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.0.0' 
     classpath 'me.tatarka:gradle-retrolambda:3.2.3' 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'me.tatarka.retrolambda' 

project.version = '1.0.0' 

afterEvaluate { 
    tasks.matching { 
     it.name.startsWith('dex') 
    }.each { dx -> 
     if (dx.additionalParameters == null) { 
      dx.additionalParameters = [] 
     } 
     dx.additionalParameters += "--set-max-idx-number=50000" // default 60000 
    } 
} 

def googleApiKey = "key goes here" 
def appVersionCode = 1 
def appVersionName = project.version + "." + appVersionCode 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 
    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 23 
     manifestPlaceholders = [googleApiKey : googleApiKey, 
           appVersionCode: appVersionCode, 
           appVersionName: appVersionName] 
     multiDexEnabled true 

     ndk { 
      abiFilters "armeabi", "armeabi-v7a" 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' 

      applicationVariants.all { variant -> 
       variant.outputs.each { output -> 
        output.outputFile = new File(
          output.outputFile.parent, 
          "App-${project.version}-${appVersionCode}.apk" 
        ) 
       } 
      } 
     } 

     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_8 
      targetCompatibility JavaVersion.VERSION_1_8 
     } 
    } 

    flavorDimensions "multidex", "leakcanary" 

    productFlavors { 
     withLeakCanary { 
      dimension "leakcanary" 
     } 

     withoutLeakCanary { 
      dimension "leakcanary" 
     } 

     develDex { 
      dimension "multidex" 
      minSdkVersion 21 
      targetSdkVersion 23 
     } 

     prodDex { 
      dimension "multidex" 
      minSdkVersion 15 
      targetSdkVersion 23 
     } 
    } 
    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/DEPENDENCIES' 
    } 
    lintOptions { 
     abortOnError false 
    } 
    sourceSets { 
     main { 
      jniLibs.srcDir 'build/jniLibs' 
     } 
    } 

    dexOptions { 
     javaMaxHeapSize "4g" 
    } 

    dataBinding { 
     enabled = true 
    } 
} 

task copyNativeLibs(type: Copy) { 
    from(new File(buildDir, 'intermediates/exploded-aar/')) { 
     include '**/*.so' 
     exclude '**/lib-detector.so' 
    } 
    into new File(buildDir, 'jniLibs') 
    eachFile { details -> 
     def pathSplit = details.path.split('/') 
     details.path = pathSplit[pathSplit.length - 2] + '/' + pathSplit[pathSplit.length - 1] 
    } 

    includeEmptyDirs = false 
} 

tasks.withType(JavaCompile) { javaCompileTask -> javaCompileTask.dependsOn copyNativeLibs } 

clean.dependsOn 'cleanCopyNativeLibs' 

dependencies { 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.robolectric:robolectric:3.0' 
    testCompile 'org.robolectric:shadows-multidex:3.0' 
    testCompile('org.robolectric:shadows-httpclient:3.0') { 
     exclude module: 'httpcore' 
     exclude module: 'commons-codec' 
    } 
    testCompile 'org.powermock:powermock-module-junit4:1.5.2' 
    testCompile 'org.powermock:powermock-api-mockito:1.5.2' 
    testCompile 'org.roboguice:roboguice:3.0.1' 

    compile 'com.parse.bolts:bolts-android:1.2.1' 
    compile fileTree(dir: 'libs', include: 'Parse-*.jar') 

    compile 'com.google.android.gms:play-services-drive:7.8.0' 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.android.support:support-annotations:23.0.1' 
    compile 'com.android.support:support-v4:23.0.1' 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:recyclerview-v7:23.0.1' 
    compile 'com.android.support:design:23.0.1' 
    compile 'org.roboguice:roboguice:3.0.1' 
    provided 'org.roboguice:roboblender:3.0.1' 
    compile('com.google.inject.extensions:guice-assistedinject:3.0') { 
     exclude group: 'com.google.inject', module: 'guice' 
    } 
    compile 'commons-io:commons-io:2.4' 
    compile 'commons-lang:commons-lang:2.6' 
    compile 'com.intellij:annotations:12.0' 

    compile 'com.google.zxing:core:3.2.1' 
    compile 'com.google.zxing:android-core:3.2.1' 
    compile 'com.google.android.gms:play-services-base:7.8.0' 
    compile 'com.google.android.gms:play-services-location:7.8.0' 
    compile 'com.google.android.gms:play-services-maps:7.8.0' 
    compile 'com.google.android.gms:play-services-analytics:7.8.0' 
    compile 'com.amazon:in-app-purchasing:2.0.1' 

    compile 'com.googlecode.libphonenumber:libphonenumber:7.0.7' 

    withLeakCanaryCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' 

    compile 'com.google.android.gms:play-services-ads:7.8.0' 

    compile 'io.reactivex:rxandroid:1.0.1' 
    compile 'io.reactivex:rxjava:1.0.14' 
} 

Pytanie

Czy ktoś miał ten sam problem? Jak to naprawić? Jeśli potrzebujesz dodatkowych informacji, daj mi znać w komentarzach.

+0

Czy możesz opublikować swój pełny 'build.gradle' raz? Myślę, że to nie ma nic wspólnego z "Retrolambdą". –

+0

Dzięki za odpowiedź zobacz [tutaj] (http://grepcode.com/file/repo1.maven.org/maven2/com.google.guava/guava/11.0.2/com/google/common/base/Strings. java # Strings.isNullOrEmpty% 28java.lang.String% 29) 'isNullOrEmpty()' metoda należy do 'com.google.guava' i często jest sprawdzana w [gradle] (https: // github.com/gradle/gradle/search? utf8 =% E2% 9C% 93 & q = isNullOrEmpty & type = Code) I nie widziałem tego w twoim gradle. Jestem też zdezorientowany, ponieważ nie spotkałem się z tym problemem, nawet gdy podałem tę samą specyfikację, co twoja. –

+0

Co stanie się, jeśli dodasz zależność guava na początku Kompilując grupę 'compile group: 'com.google.guava', name: 'guava', version: '18 .0'' in dependency? –

Odpowiedz

1

Czy próbowałeś nowy plaster na jitpack z simular problem # 134 czystą-build, wydawało się, że coś złego z Gradle importu zamawianiu można spróbować go z:

repositories { 
    maven { url "https://jitpack.io" } 
} 
dependencies { 
    classpath 'com.github.denis-itskovich:gradle-retrolambda:3.2.3-fix-134' 
} 
+0

Z tym mam 2 błędy kompilacji. Jeden wciąż jest taki sam, drugi pochodzi z retrolambdy: "Nie można uzyskać własności" allJava "na pustym obiekcie" –

0

Wygląda na to, że jest błąd z wtyczką po aktualizacji Studio Android.

Jeśli wejdziesz: <Android Studio Dir>/plugins/android/lib/builder-model-x.x.x.jar możesz znaleźć 2 .jars. Spróbuj usunąć starą wersję .jar i zachowaj nową, a także oczyść i odbuduj projekt.

Jeśli powyższe nie działa, spróbuj tego:

zmienić wersję biblioteki zobiektywizować w pliku build.gradle swojej backend do 4.0b do 5.0.3 lub wyższej, jeśli istnieje.

To może brzmieć nieistotnie, ale zobiektywizuj bibliotekę 4.0b mają te same klasy o tej samej nazwie pakietu, które są obecne w aplikacji sdk jak com.google.common.base.Strings.isNullOrEmpty.

po wdrożeniu obsługi aplikacji klasy aplikacji są nadpisywane przez klasy obiektaryzacji, a więc przy próbie wywołania jakiejś metody pojawia się błąd.

ten został rozwiązany w zobiektywizować 5,0. +

Nadzieja pomaga, ponieważ pomógł mi rozwiązać ten problem.

+0

Na komputerze nie ma zainstalowanych urządzeń IDE. Objectify również nie jest używane (projekt gradle zawiera tylko klienta aplikacji). –

Powiązane problemy