Saya mencoba mengkompilasi file protobuf menggunakan plugin gradle, tetapi saya mendapatkan kesalahan berikut:

java.io.IOException: Can't write [/Users/elavi/dev/sdk3/android/showcaseapp/build/intermediates/multi-dex/debug/componentClasses.jar] 
(Can't read [/Users/elavi/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.0.0/6d325aa7c921661d84577c0a93d82da4df9fa4c8/protobuf-java-3.0.0.jar(;;;;;;**.class)] 
(Duplicate zip entry [protobuf-java-3.0.0.jar:com/google/protobuf/ExperimentalApi.class]))

Tidak yakin mengapa ini terjadi... Berkas protobuf dihasilkan dengan benar, seperti yang diharapkan, tetapi kemudian langkah terakhir gagal dengan kesalahan aneh ini.

Ini adalah file gradle saya:

apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'
apply plugin: 'idea'

group = GROUP
version = VERSION_NAME

apply from: 'versioning.gradle'

buildscript {
  repositories {
    mavenCentral()
  }
}

android {
  compileSdkVersion 26
  buildToolsVersion '26.0.2'
  flavorDimensions "default"

  defaultConfig {
    minSdkVersion 15
    targetSdkVersion 26
    versionCode buildVersionCode()
    versionName VERSION_NAME
    consumerProguardFiles 'tangram-proguard-rules.txt'
  }

  // Add proto files location to be used with the protobuf plugin
  sourceSets {
    main {
      proto {
        srcDir '../../common/vendored/proto'
      }
    }
  }
}

dependencies {
  compile 'com.google.protobuf:protobuf-lite:3.0.0'
  compile 'io.grpc:grpc-stub:1.6.1'
  compile 'io.grpc:grpc-protobuf:1.0.0-pre2'
  compile 'javax.annotation:javax.annotation-api:1.2'

  compile 'com.squareup.okhttp3:okhttp:3.9.0'
  compile 'com.android.support:support-annotations:27.0.0'

  implementation project(':core')
}

// Protobuf configuration. Taken from the documentation: https://github.com/google/protobuf-gradle-plugin
protobuf {

  protoc {
    artifact = 'com.google.protobuf:protoc:3.0.0'   }   plugins {
    javalite {
      artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
    }
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.0.0-pre2'
    }   }   generateProtoTasks {
    all().each { task ->
      task.builtins {
        remove java
      }
      task.plugins {
        javalite { }
        grpc {
          option 'lite'
        }
      }
    }   }   generatedFilesBaseDir = "$projectDir/build/gen" }

clean {   delete protobuf.generatedFilesBaseDir }

idea {   module {
    sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java");
    sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/grpc");   } }

//apply from: file('gradle-mvn-push.gradle')

Saya hanya menambahkan apa yang tertulis di readme protobuf (https://github.com/google/protobuf- gradle-plugin), tidak melakukan hal-hal mewah...

0
ElyashivLavi 16 November 2017, 17:48

1 menjawab

Jawaban Terbaik

Mungkin Anda harus menghapus entri compile 'com.google.protobuf:protobuf-lite:3.0.0' pada bagian dependensi, Anda juga memiliki entri duplikat dan beberapa konfigurasi pada versi terakhir hilang. Untuk sisi lain mungkin jalur untuk sumber proto bermasalah, proto saya src/main/proto tapi saya hanya mendeklarasikan proto saja. Konfigurasi singkat saya adalah berikutnya:

Aplikasi build.gradle:

apply plugin: 'com.google.protobuf'

android {
    ...
    sourceSets {
        main {
          proto {
          }
        }
    }
    ...
    configurations.all {
      resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'io.grpc:grpc-okhttp:1.10.0'
    implementation 'io.grpc:grpc-protobuf-lite:1.10.0'
    implementation 'io.grpc:grpc-stub:1.10.0'
    implementation 'javax.annotation:javax.annotation-api:1.2'
    // full protobuf (optional)
    // protobuf 'com.google.protobuf:protobuf-java:3.4.0'
    ...

}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.0.2"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.1.2'
        }
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                    // Options added to --grpc_out
                    option 'lite'
                }
            }
        }
    }
    generatedFilesBaseDir = "$projectDir/build/generated"
}

Proyek utama build.gradle:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.2"
        ...
    }
}
3
Hpsaturn 12 Februari 2019, 22:39