2017-07-10 17 views
0

次のapp.gradleを使用して、アンドロイドサンプルプロジェクト内の.protoクラスからJavaクラスを生成しています。Protobuf Androidには生成されたフォルダにビルドタイプが含まれています

syntax = "proto3"; 
package my_test_package; 
option java_package = "protoclasses"; 
option java_outer_classname = "MyTestClass"; 
message TestClass { 
    string test_string_a = 1; 
    int32 test_int_b = 2; 
    bool test_bool_c = 3; 
} 

クラスが生成されますが、フォルダ構造はbuildTypeによって異なります

apply plugin: 'com.android.application' 
apply plugin: 'com.google.protobuf' 
android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "protobuf.example.com.protobuftestapp" 
     minSdkVersion 21 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 
protobuf { 
    protoc { 
     artifact = "com.google.protobuf:protoc:3.0.0" 
    } 
    plugins { 
     lite { 
      artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" 
     } 
    } 
    generateProtoTasks { 
     all().each { task -> 
      task.builtins { 
       remove java 
      } 
      task.plugins { 
       lite { 
        outputSubDir = '' 
       } 
      } 
     } 
    } 
    generatedFilesBaseDir = "$projectDir/src/main/java/" 
} 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.google.protobuf:protobuf-lite:3.0.0' 
    testCompile 'junit:junit:4.12' 
} 

.protoファイルには、次のようになります。

出力される

  • src->メーン> Javaベース>DEBUG - > protoclasses-> MyTestClass.java
  • src->メーン> Javaベース>RELEASE - > protoclasses-> MyTestClass.java

私は何時間も検索しましたが、buildTypeフォルダを削除することはできませんでした。 問題は、クラスが重複として生成されているため、ビルドに失敗することです。私は

generatedFilesBaseDir = "$projectDir/src/main/proto_gen" 

のsrc /メイン/ javaの(しかし、1つの階層レベルアップ)のクラスを生成しないこの行を編集して、問題を「解決」するために管理

答えて

1

は、両方のディレクトリ(デバッグを追加しませんリリース)をビルドパスに追加すると、デバッグフォルダのみが追加されます。

debugフォルダには、生成されたソースルートとしてマークされたアイコンも表示されます。

両方のフォルダが生成されていても、クラスの競合はなくなります。生成されたクラスのデバッグバージョンを使用することも、リリースバージョンとまったく同じバージョンであるため、うまくいきます。

.proto定義のさまざまなバリエーション(それぞれのアンドロイドのbuildTypeに対して)を生成することは意味がありませんが、私たちは解決策を見つけました。

希望に役立ちます!

関連する問題