2015-10-17 2 views
1

Вот моя ситуация:упаковка jacoco-agent.properties в APK, чтобы ее можно было прочитать?

фон

  • Я расследую код-покрытие для нашего Android приложения. Приложение построено с помощью Gradle и Android Studio.
  • Мне нужны отчеты о покрытии кода в двух ситуациях: во время ручных тестов и во время автоматических тестов, построенных с помощью нашего обширного набора Appium.
  • Мне нужно получить доказательство концепции быстро (разве это не всегда так?), Поэтому у меня не было возможности сделать тщательный R & D. Так что прошу простить любое незнание, которое я показываю:)
  • У меня есть доступ к источнику приложения, но у меня мало знаний о движущихся частях.
  • Я исследовал JaCoCo и Эмма. Этот вопрос относится к JaCoCo.
  • Учитывая, что нам нужно покрытие для тестов Appium и ручных тестов, я считаю, что автономное оборудование с JaCoCo - это то, что мне нужно.

Progress Made

  • Я использовал the JaCoCo plugin page и the Android Tools page и может настроить build.gradle правильно.
  • Я проверил, что классы (присутствующие в build\intermediates\classes) оснащены инструментами JaCoCo и упакованы в APK.
  • Я написал BroadCastReceiver за this SO discussion, который получит широковещательную передачу "end coverage".

Проблема

Когда я запустить приложение вручную, я продолжаю видеть ошибки в LogCat W/System.err: java.io.FileNotFoundException: /jacoco.exec: открыть не удалось: EROFS (только для чтения файловой системы)

Из this SO question и the JaCoCo docs Я понимаю, что Jacoco должен знать, где хранить файл jacoco.exec - и что мне нужно упаковать jacoco-agent.properties (содержащий destfile свойство) с APK.

Я попытался положить jacoco-agent.properties в assets - он был упакован в APK правильно, но, похоже, не имеют никакого эффекта (т.е. Jacoco не удалось, как обычно) я попытался положить его в res - это не упакуйте в APK. Я пробовал res/raw и ударил ошибку о тире в имени файла, как в this SO question.

Я нахожусь в конце своего ума и очень ценю помощь. Как мне упаковать jacoco-agent.properties, используя мою сборку Gradle в APK, чтобы JaCoCo прочитал ее?

Вопросы, относящиеся

this SO question, имеет ответ с 2013 года, и это для Ant, не Gradle.

ответ

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 = [ ''] в исходные тексты res.srcDirs = [» res '] res.includes = [' **/jacoco-agent.properties '] } ' – Vish

+0

@Vish, Ваше закрытие Я вижу, что вы указали' ... res.includes = [' **/jacoco-agent. properties '] '' 'res' указывает на android' Resources', а не на Plain Old Java, который включает 'resources.includes = [' **/jacoco-agent.properties ']' Обратите внимание на 'res' vs' resources' – JBirdVegas