web-dev-qa-db-ja.com

JavaランタイムAndroid Studio Robolectric

AndroidプロジェクトにRobolectricを追加しました。19.0.1のビルドツールでAndroid Studioを使用しています。

次のコマンドでテストを実行できます。

$./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からアプリを起動できますが、邪魔になります。

26
fstephany

期限切れのgradleデーモンが原因で、バックグラウンドでパフォーマンスの問題が発生している可能性があります。 3時間アイドル状態になった後、gradleでクリーンアップできると思いましたが、そうではないようです。ターミナルに移動し、gradleファイルがあるプロジェクトのルートフォルダーに移動して、コマンドを入力します

./gradlew --stop

ビルドをもう一度実行してみてください。うまくいけば、それは私のようにあなたの問題を解決します。

これが問題の原因となった理由を理解しようとしていますが、まだ十分な理由が見つかりません。何か見つけたら答えを編集します。

[〜#〜]更新[〜#〜]

Gradle Design Githubページ から:

現在、メモリ不足が発生すると、デーモンに深刻な問題が発生します。プレッシャーがかかると、デーモンプロセスはGCスラッシュを示します。

これに関する1つの仮説は、特にメタクラスインスタンスが弱参照キャッシュに保持されているGroovyメタクラスシステムでの弱参照キャッシュの使用です。これはデーモン以外の場合にも当てはまるため、必ずしもデーモンの問題ではないことに注意してください。ただし、デーモンがメモリをリークすることで悪化するため、メモリプレッシャー状態が発生する可能性が高くなります。

これは決定的な答えを与えるものではありませんが、デーモンが(他のものと一緒に)あなたが見ているものの原因であるかもしれないという予感を与えます。いくつかのgradleタスクは通常の10倍の時間がかかるのを見てきましたが、-stopを実行するとこれらの問題も軽減されます。

110
Maxwell

私の場合、パス変数にJava_HOMEを追加し(Android Studio->設定->パス変数)、前述のようにGradleデーモンを再起動します(./gradlew --stop)。

Macでは、/usr/libexec/Java_home -v 1.6を使用してJavaディレクトリ(バージョン6)を見つけることができます。

3
c2knaps

Gradle 1.10に戻すと、(OS-Xで)うまくいきました。 Android-Studioでgradle-wrapperプロパティを編集したり、ローカルのgradleディストリビューションを構成したりできます

1

Build.gradleファイルでsourceCompatibilityとtargetCompatibilityを設定してみてください。 Java 1.7の場合、次のようになります。

Android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
1
jdonmoyer