2016-07-14 14 views
0

私はAndroid上Parcelerライブラリに(https://github.com/johncarl81/parcelerJacoco - アンドロイド

を使用していると私はまた、コードカバレッジのためJacocoを使用しています。

Caused by: java.io.FileNotFoundException: /Users/me/android/myapp/blah/app/build/intermediates/classes/demo/com/me/blah/appname/model/User$Parcelable$Creator$0.class (No such file or directory)

Userクラスは次のとおりです。:

は、しかし、今Jacocoと私のテストコードカバレッジを実行しているParcelerを追加した後、次のエラーで失敗し

@Parcel 
public class User { 

    @SerializedName("firstName") 
    String firstName; 

    @SerializedName("lastName") 
    String lastName; 

    @SerializedName("profileImage") 
    ProfileImage profileImage; 

    @SerializedName("username") 
    String username; 

    // empty constructor needed by the Parceler library 
    public User() { 
    } 

} 

そして、私のJacocoファイルは、このようなものです:

apply plugin: 'jacoco' 

android { 
    testOptions { 
     unitTests.all { 
      jacoco { 
       includeNoLocationClasses = true 
      } 
     } 
    } 
} 

project.afterEvaluate { 

    android.applicationVariants.all { variant -> 
     def name = variant.name 
     def testTaskName = "test${name.capitalize()}UnitTest" 

     tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") { 
      group = "Reporting" 
      description = "Generate Jacoco coverage reports for the ${name.capitalize()} build." 

      classDirectories = fileTree(
        dir: "${project.buildDir}/intermediates/classes/${name}", 
        excludes: ['**/R.class', 
           '**/R$*.class', 
           '**/*$ViewInjector*.*', 
           '**/*$ViewBinder*.*', 
           '**/BuildConfig.*', 
           '**/Manifest*.*', 
           '**/*$ViewBinder*.*', 
           '**/*$ViewInjector*.*', 
           '**/Lambda$*.class', 
           '**/Lambda.class', 
           '**/*Lambda.class', 
           '**/*Lambda*.class', 
           '**/*InjectAdapter*.*', 
           '**/*StaticInjection*.*', 
           '**/*ModuleAdapter*.*'] 
      ) 

      sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs)) 
      executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec") 

      reports { 
       xml.enabled = true 
       html.enabled = true 
      } 
     } 
    } 
} 

私は、生成されたパーセルファイルを私のJacocoファイルのリストを除外しますか?もしそうなら、どうしたらいいですか?私は様々なバリエーションを試しましたが、どれもうまくいかないようです。

エラーは、次のファイルが見つからないと文句を言い、次のよう

User$Parcelable$Creator$0.class

それは、代わりにファイルが生成される:

User$$Parcelable.class

誰もがこれを説明することはできますか?

+0

働くあなたの創造主クラスの名前を確認してもらえますか?それはいくつかの '$'が欠けているようです。 'User $$ Parcelable $ Creator $$ 0.class'という名前にしてはいけませんか? –

+0

生成されたファイルのビルド出力には?その確かにUser $$ Parcelable.class –

+0

'Creator'内部クラスはどうですか?名前は何ですか?それは偶然にプロガードによって削除されていますか? –

答えて

1

は、私はちょうどこのように、jacocoAndroidCoverage.gradleでそれを除外し、それが今

def coverageSourceDirs = [ 
     '../app/src/main/java' 
] 

task jacocoStagingDebugCoverageReport(type:JacocoReport, dependsOn: ["connectedStagingDebugAndroidTest"]) { 
    group = "Reporting" 

    description = "Generate Jacoco coverage reports for staging debug" 
    classDirectories = fileTree(
      dir: '../app/build/intermediates/classes/staging/debug/com/', 
      excludes: ['**/R.class', 
         '**/R$*.class', 
         '**/*$ViewInjector*.*', 
         '**/*$ViewBinder*.*', 
         '**/*MembersInjector*.*', 
         '**/BuildConfig.*', 
         '**/Manifest*.*', 
         '**/*$Lambda$*.class', 
         '**/*Factory*.class', 
         '**/*$Builder*', 
         '**/*$Parcelable*.*', 
         '**/*DaggerApplicationComponent*.class', 
         '**/api'] 
    ) 

    additionalSourceDirs = files(coverageSourceDirs) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files('build/outputs/code-coverage/connected/flavors/staging/coverage.ec') 

    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 
} 
関連する問題