2015-02-10 5 views
1

Я использую ANT до (Android Project) и я имел «статические» файлы в те же пакеты, как мой кодкопировать статические файлы для создания папки вывода в Gradle

Ниже приведен пример

SRC /com/my/app/test/Parser.java

SRC/COM/мой/приложение/тест/json_to_parse.json

При выполнении модульных тестов, файл JSON был скопирован в ВОЛП ген дер, therfor можно было получить доступ к JSON в тесте с

getClass().getResourceAsStream(fileName)

Я должен был преобразовать проект в Gradle, но теперь испытания терпят неудачу. После проверки папки «build» я понял, что .json-файлов нет, поэтому метод getResourceAsStream возвращает значение null.

Любая идея, как включить эти «статические» файлы (json, xml, ...) в папку сборки?

+0

Почему вы не размещаете файлы под 'src/test/resources'? – Opal

+0

Это то, что я собираюсь на самом деле. Но даже это не работает прямо из коробки в Android Studio (в AS 1.1, по слухам, оно будет исправлено в версии 1.2) – Christoph

ответ

1

Файлы, о которых вы просите, называются «файлами ресурсов» в Maven/Gradle lingo.

Gradle предполагает, что вы используете Maven Standard Directory Layout.

Итак, либо вы перемещаете свои файлы в src/test/resources (тогда Gradle автоматически их забирает), либо вы говорите Gradle, что он должен искать ресурсы в каком-то другом месте.

В последнем случае вам необходимо modify the processTestResources task. Однако сохранение файлов ресурсов в том же каталоге, что и исходный код, является плохой практикой. Поэтому я рекомендую первый вариант.

+0

На самом деле вы дали правильный ответ, поэтому я буду отмечать это как правильно. Но поскольку мой случай был довольно специфичным (и на самом деле проблема Android Studio <= 1.1 не является самой градицией), я добавил еще один ответ. Спасибо в любом случае – Christoph

+0

Первая ссылка сейчас нарушена. – stkent

+0

Спасибо, я обновил ссылку. – Jolta

2

Перемещение файлов в папку ресурсов не работает из коробки в Android Studio (даже если есть должно быть)

Это должно быть указано в Android Studio 1.2. Однако это то, что я сделал:

Перемещено все статические файлы в папку ресурсов.

В моем модульном тестировании модуля я добавил это к build.gradle файлу

task copyTestResources(type: Copy) { 
    from "${projectDir}/src/test/resources" 
    into "${buildDir}/classes/test" 
} 
processTestResources.dependsOn copyTestResources 

Теперь все файлы, находящимся внутри SRC/тест/ресурсы будут скопированы в/классах/тест, где я могу доступ к ним с

getClass().getResourceAsStream(fileName) 

Если я сохранить структуру пакета в папку ресурсов так же, как это было в папке Java, мне не нужно корректировать любой код.

Чтобы завершить историю немного больше:

JUnit4 бегун требует

getClass().getResourceAsStream(name)

в то время как Robolectric требует

getClass().getClassLoader().getResourceAsStream(name)

+0

Это все еще возвращает нуль, а не файл. есть идеи? Я использую robolectric 3, AS 1.3, gradle 1.2.2 – nitzanwe

+0

Кажется, что проблема связана с использованием java-модуля, который задает ресурсы с помощью sourceSets {test {resources {***. Это как и Android-студия 1.4. – Tez

0

если ваша проблема случается, когда вы создаете APK с AndroidStudio.

вы можете создать .jar файл, который включает в свои ресурсы с jar.exe

, например, я поставил a.txt в каталог ресурсов и запустить этот код в CMD:

"C:\Program Files\Java\jdk1.7.0_79\bin\jar" cvfe res.jar -c resources 

после этого jar файл «res.jar» был создан , затем добавьте, что res.jar в папку libs в вашем проекте , когда ваш apk создает ресурсы, добавляется в ваш последний apk, и вы можете использовать этот код для acsess a.txt:

someclass.class.getClassLoader().getResourceAsStream("resources/a.txt"); 

с этой работой нет необходимости менять настройку уровня.

Смежные вопросы