2017-09-27 8 views
1

私はbaseモジュールとqueryというフィーチャモジュールをインスタントアプリケーションプロジェクトに持っています。Androidインスタントアプリケーションを再構築した後に、フィーチャモジュールのベースモジュールで定義された色を使用できない

私のQueryActivity内側queryモジュールは、baseモジュールにある色を使用します。

QueryActivity.kt

:私は runプロジェクトにしようと

@ColorInt 
val textColor: Int = when (resultCode) { 
    FetchAddressIntentService.RESULT_SUCCESS -> android.R.color.white 
    FetchAddressIntentService.RESULT_FAILURE -> R.color.accent // this color is inside the base module 
    else -> R.color.accent // this color is inside the base module 
} 

は、それが何の問題もなく正常に動作します。しかし、rebuildプロジェクトでは、次のエラーが表示されます。

../net/epictimes/uvindex/query/QueryActivity.kt 
Error:(133, 63) Unresolved reference: color 
Error:(134, 27) Unresolved reference: color 

これらの色の値を指しています。

colors.xmlファイルをqueryモジュール内に追加し、baseの色を参照して解決しました。それは正常に働いた。差分はthis commitに表示されます。

<color name="query_location_success_text">@android:color/white</color> 
<color name="query_location_fail_text">@color/accent</color> 

今のところ動作しますが、わかりません。これは正しい方法ですか?私の質問は、機能モジュールからアクセス可能なbaseモジュール内のリソースであってはなりませんか?

バージョン:

Android target/compile SDK: 26

Kotlin: 1.1.50

Instant Apps: 1.1.0

鉱山のオープンソースプロジェクトである、あなたはプロジェクト全体hereを見ることができます。

は、あなたが完全修飾名(package_name.R.resource_name)とそれを参照するときに

答えて

5

はい、ベースモジュール内のリソースは、機能モジュールからアクセス可能ですありがとうございます。

ベースモジュールとサブモジュールのパッケージ名は異なります(ベースフィーチャーパッケージ名はnet.epictimes.uvindex、フィーチャーモジュールパッケージ名はnet.epictimes.uvindex.query)。

各パッケージには、リソースの独自のセットが含まれており、そのリソースIDは、コンパイル時に別々のRパッケージで収集されます

  • net.epictimes.uvindex.R - あなたの基本機能モジュール
  • net.epictimes.uvindex.query.Rのために - あなたの機能モジュール
  • のために

「照会」機能モジュールからベースフィーチャーの「アクセント」カラーリソースにアクセスするには、net.epictimes.uvindex.R.color.accent識別子:

を使用してください

FetchAddressIntentService.RESULT_FAILURE -> net.epictimes.uvindex.R.color.accent

+0

インスタントアプリのリソース管理は、この時点では完全に欠陥があります。それは現在のところ実行不可能な部分です... Lintは間違って使用されたR.xステートメントについて不平を言っていません。 多くの場合、リソースはベースモジュールからのみ使用できます。 をフィーチャモジュール内で使用すると、インクルードがベースモジュールからフェッチされるはずです。 モジュール間の相互依存関係を検出できないproguardを使用した場合、完全な破壊については言及していません。 –

+0

あなたは正しいです。各モジュールは独自のR.javaを生成します。ここで問題となるのは、間違ったRファイルを参照していたことです。ご協力ありがとうございました。しかし、私はその奇妙な "実行"はうまく動作しますが、 "再構築"は未解決の参照エラーで失敗すると思います。 –

関連する問題