Подтвердить что ты не робот

Не удалось найти Java Runtime Android Studio Robolectric

Я добавил Robolectric в проект Android. Я использую Android Studio с инструментами Build Tools в 19.0.1.

Я могу запустить тесты с помощью:

$./gradlew test

Какие выполняются нормально.

Если я попробую:

$ gradle installDebug

Он также отлично работает:

$ ./gradlew installDebug
WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead.
:app:compileDebugNdk
:app:preBuild
:app:preDebugBuild
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig
:app:mergeDebugAssets
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava
:app:preDexDebug
:app:dexDebug
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
:app:installDebug
8266 KB/s (46166 bytes in 0.005s)
 pkg: /data/local/tmp/app-debug-unaligned.apk
Success

BUILD SUCCESSFUL

Total time: 4.291 secs

Однако, когда я пытаюсь запустить свой проект на устройстве или эмуляторе из Android Studio, я получаю следующее:

Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Applications/Android Studio.app/sdk/build-tools/19.0.1/dx --dex --output /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/dex/debug /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/classes/debug /Users/fstephany/Code/android/RoboElectricTestingProject/app/build/dependency-cache/debug
Error Code:
  1
Output:
  Unable to locate a Java Runtime to invoke.

Любой намек на то, где искать эту проблему? Я всегда могу installDebug запустить приложение из CLI или Studio, но это мешает.

4b9b3361

Ответ 1

Истекший демон gradle может вызвать некоторые проблемы с производительностью в фоновом режиме. Я думал, что gradle очистит его после 3 часов простоя, но это, похоже, не так. Перейдите в свой терминал, перейдите в корневую папку проекта, где находятся файлы gradle, и введите команду

./gradlew --stop

и попробуйте снова запустить сборку. Надеюсь, что эта проблема будет решена, как и моя.

Я пытаюсь понять, почему это вызвало проблему, но я еще не нашел достаточно хорошей причины. Я отредактирую ответ, если найду что-нибудь.

UPDATE

На странице Gradle Design Github:

В настоящее время у демона возникают серьезные проблемы, когда происходит давление памяти. Когда под давлением процесс демона демонстрирует GC thrash.

Одной из гипотез для этого является использование слабых опорных кэшей, особенно в метаклассовой системе Groovy, где экземпляры метакласса хранятся в слабом кэше ссылок. Обратите внимание, что это не обязательно проблема с демоном, так как это также относится к случаю не демона. Однако он усугубляется утечкой памяти демоном, тем самым увеличивая вероятность возникновения ситуации с давлением памяти.

Это не дает окончательного ответа, но это дает догадку, что демон может быть виновником того, что вы видите (наряду с другими вещами). Я видел, что некоторые задачи gradle занимают 10 раз, как обычно, и работает --stop также устраняет эти проблемы.

Ответ 2

Для меня добавление JAVA_HOME к вашим переменным пути (Android Studio → Настройки → Переменные пути), а затем перезапуск демона Gradle, как упоминалось выше (./gradlew --stop), сделал трюк.

На Mac вы можете найти свой каталог Java (версия 6) с помощью /usr/libexec/java_home -v 1.6

Ответ 3

Переключение на Gradle 1.10 работало для меня (на OS-X). Вы можете отредактировать свойства gradle -wrapper или настроить локальный дистрибутив Gradle в Android-Studio

Ответ 4

Попробуйте установить sourceCompatibility и targetCompatibility в файле build.gradle. Для Java 1.7 он должен выглядеть так:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}