以下のファイル構造を持つAndroidライブラリがあります。
Android_Library
├── libs
└── src
├── instrumentTest
│ ├── assets
│ └── java
└── main
├── aidl
├── gen
├── java
└── res
ライブラリを Gradle でアセンブルすると、タスクは正常に実行されます。ただし、connectedCheck を実行しようとすると、R ファイルが見つからないという次のエラーが表示されます。
:validateDebugSigning
:packageDebug
:assembleDebug
:prepareTestDependencies
:compileTestAidl
:processTestTestManifest
:generateTestBuildConfig
:mergeTestAssets
:compileTestRenderscript
:mergeTestResources
:processTestResources
:compileTest
Android_Library/src/instrumentTest/java/com/example/library/util/UtilTests.java:514: error: package R does not exist
case R.plurals.time_days_ago: {
^
...
Note: Recompile with -Xlint:unchecked for details.
18 errors
:compileTest FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileTest'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
もともとRリソース生成の問題かと思っていたのですが、アセンブル時にも失敗すると思います。
編集:
R import ステートメント (これは間違っていることがわかっています) と R import ステートメントを持たないことの両方を試しました。どちらも同じエラーになります。
解決済み:
@Xav のヒント (以下) のおかげで: 私はより大きなプロジェクトからライブラリを抽出し、モジュール テスト用に独自にビルドしようとしています。
の変更
import com.example.app.R;
ライブラリ ファイル内のステートメントを
com.example.library.R
接続チェックの実行を許可します。
(明らかに、メイン アプリとライブラリの両方の res ファイルは同じです)。
その他の注意事項:
switch ステートメントは R id を受け取るため、switch ステートメントはコンパイル時に機能します。ただし、失敗しながらgradlew assemble
間違ったimport
ステートメントで動作する理由はまだわかりません。gradlew connectedCheck