2015-10-17 81 views
1

這裏是我的情況:將jacoco-agent.properties打包成APK以便它可以被讀取?

背景

  • 我調查代碼覆蓋我們的Android應用程序。該應用程序是用Gradle和Android Studio構建的。
  • 我需要兩種情況下的代碼覆蓋率報告:在手動測試期間以及在使用我們規模較大的Appium套件構建的自動化測試期間。
  • 我需要得到一個概念驗證(並不總是這樣?)所以我沒有機會做徹底的R & D.所以請原諒我顯示的任何無知: )
  • 我可以訪問應用程序源,但對運動部件知之甚少。
  • 我調查了JaCoCo和Emma。這個問題與JaCoCo有關。
  • 鑑於我們需要覆蓋Appium和手動測試,我相信JaCoCo的離線儀器就是我所需要的。

進展情況

  • 我用the JaCoCo plugin pagethe Android Tools page並能正確配置的build.gradle。
  • 我已經驗證了這些類(存在於build\intermediates\classes中)與JaCoCo配合使用,並且包裝在APK中。
  • 我按照this SO discussion寫了一個BroadCastReceiver,它會收到「end coverage」廣播。

問題

當我手動運行該應用程序,我總是看到在logcat的 W/System.err的錯誤:java.io.FileNotFoundException:/jacoco.exec:打開失敗:EROFS(只讀文件系統)

this SO questionthe JaCoCo docs據我所知,Jacoco需要知道在哪裏存儲jacoco.exec文件 - 和我需要打包jacoco-agent.properties(含destfile屬性)與APK。

我試圖把jacoco-agent.properties在assets - 它被打包成APK正常,但似乎沒有任何效果(即Jacoco未能像往常一樣) 我試圖把它裏面res - 它沒有打包成APK。 我試過res/raw,並在文件名中輸入了一個破折號的錯誤,如this SO question

我在我的智慧結束,並會真正感謝幫助。如何使用我的Gradle構建將jacoco-agent.properties打包到APK中,以便JaCoCo能夠讀取它?

相關問題

this SO question,有從2013年的答案,它是螞蟻,而不是搖籃。

回答

0

我不熟悉執行Jacoco工作的要求,但是您可以很輕鬆地打包包含apk文件。下面的代碼將把jacoco-agent.properties放在你的apk包的根目錄下。

使這些更改build.gradle爲您的應用程序模塊:

android { 
    ... 
    sourceSets { 
     main { 
      resources.includes = [ '**/jacoco-agent.properties' ] 
     }  
    } 
} 
+0

我編輯的答案,因此它可能對於像我這樣的新手更清晰:)請讓我知道如果我的編輯是正確的。 – Vish

+0

感謝您的回覆;我添加了代碼,但它似乎沒有幫助。 (我解壓APK並檢查jacoco-agent.properties沒有打包)。我的build.gradle看起來是這樣的:'sourceSets { 主要{ manifest.srcFile '的AndroidManifest.xml' assets.srcDirs = [ '資產'] java.srcDirs = [ 'src' 中] res.srcDirs = [」 res'] res.includes = ['**/jacoco-agent.properties'] }' – Vish

+0

@Vish,你近我看你指定'... res.includes = ['**/jacoco-agent。屬性']'res'指向android'Resources'而不是Plain Old Java包含哪個'resources.includes = ['**/jacoco-agent.properties']'注意'res' vs'resources' – JBirdVegas

相關問題