問題タブ [android-flavors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
138 参照

android - ライブラリは、別のマルチフレーバー ライブラリからリソースを依存して読み取ることができますか?

使用: Android Studio 3.2.1 - Gradle 4.6

:app :lib1 (ライブラリ) :lib2 (ライブラリ) :app は lib1 と lib2 に依存します :lib 1 は lib2 に依存します lib2 はリソースのみを含むモジュールです (画像、文字列、色の res フォルダー) :app と :lib1 の両方から参照される一般的な値であり、Java コードではありません)

:app モジュールと :lib2 モジュールを同じフレーバーでフレーバーしたい (アプリごとに異なるパッケージを指定する顧客向けにアプリをカスタマイズするため)。:lib1 にはフレーバーがありません

フレーバーを追加する前に、すべてが正しく機能します。:app モジュールと :lib2 モジュールに "client1" というフレーバーを 1 つ追加しました。:lib2\src\client1 の "client1" フォルダーを :lib2 に追加しました。

Gradle コンパイルにより、次の関連するビルド バリアントが作成されました。

デバッグ ビルド バリアントを実行すると、アプリが正しくインストールされ、:lib2 モジュールの client1 フレーバーから適切なリソースが正常に取得されます

ここで、2 番目のフレーバー、つまり「client2」を :app および :lib2 モジュールに追加し、「:lib2\src\client2」に 2 番目の顧客カスタマイズ用のフレーバーのリソース用のフォルダーを追加しました。ライブラリ モジュール :lib2 の :app と :lib1 の gradle ファイルに productFlavors と構成、および相対的な依存関係を追加しました。

:app と :lib1 モジュールの両方が :lib2 モジュール リソースの適切なフレーバー バージョンを使用することを期待していました。gradle をビルド バリアントと同期します: :app-client1Debug :lib1-Debug //フレーバーはありません :lib2-client1Debug

Gradle 同期プロセスは例外で終了します: :app:processClient1DebugResources FAILED FAILURE: Build failed with an exception. • 問題: タスク ':app:processClient1DebugResources' の実行に失敗しました。Android リソースのリンクに失敗しました 出力: /Users/davide/Documents/......./android/MyApp/app/build/intermediates/incremental/mergeClient1DebugResources /merged.dir/values/values.xml:2601: エラー: リソース color/colorPrimary (別名 it.test.myapp.client1:color/colorPrimary) が見つかりません。</p>

および:lib1が:lib2 client1フレーバーから取得する必要がある他のリソースをリンクする他の同様のエラー。

:lib1 パッケージはこれらのリソースを読み取ることができないようです メニュー「Build->Rebuild Project」から再構築しようとすると、同様のエラーが発生します:

:lib1:javaPreCompileDebug /Users/david/Documents/...../android/MyApp/lib1/src/main/java/it/test/lib1/utils/Utils.java:183: エラー: シンボル textView が見つかりません。 setTextColor(MyApplication.getInstance().getResources().getColor(R.color.colorPrimaryDark)); ^ 記号: 変数 colorPrimaryDark 場所: クラス color .... ..... /Users/davide/Documents/......../android/MyApp/lib1/src/main/java/it/test/ lib1/utils/Utils.java:228: エラー: シンボル文字列が見つかりません channelId = context.getString(R.string.default_notification_channel_id); ^ 記号: 変数 default_notification_channel_id 場所: クラス string . . ....他の同様のエラー。. . 注: 一部の入力ファイルは、非推奨の API を使用またはオーバーライドします。注: 詳細については、-Xlint:deprecation を使用して再コンパイルしてください。50 エラー :lib1:compileDebugJavaWithJavac FAILED FAILURE: ビルドが例外で失敗しました。• 問題: タスク ':lib1:compileDebugJavaWithJavac' の実行に失敗しました。コンパイルに失敗しました。詳細については、コンパイラ エラー出力を参照してください。<br> • 試してみてください: --stacktrace オプションを指定して実行し、スタック トレースを取得します。--info または --debug オプションを指定して実行し、より多くのログ出力を取得します。--scan を指定して実行すると、完全な洞察が得られます。* でさらにヘルプを得る https://help.gradle.org


:app-client2Debug :lib1-Debug //フレーバーがありません:lib2-client2Debugでビルドバリアントを選択した場合

client2 フレーバーで同じエラーが発生し、:lib1 はそれらのリソースを読み取ることができません。誰かが私に正しい解決策を教えてくれませんか?ライブラリに依存関係があり、別の FLAVORED ライブラリからリソースを読み取ることはできますか? 私はこれを読みました https://android.jlelse.eu/product-flavors-for-android-library-d3b2d240fca2 とこれ https://proandroiddev.com/advanced-android-flavors-part-1-building-white-label- apps-on-android-ade16af23bcf と、非フレーバー アプリケーションから参照されるこの 1 つのAndroid マルチフレーバー ライブラリ - AAPT: リソースが見つかりません など...そして、私は正しかったのですが...しかし....動作しません

//UPDATE :lib2 gradle ファイルからフレーバーを削除し、:app と :lib1 からその依存フレーバー構成を削除しても、2 つのフレーバーがオンになっている :app モジュールを維持すると、アプリが実行され、boh バリアント用にインストールされ、この i の正しい versionNameSuffix が使用されます。 :lib2 の正しいフレーバーからリソースを読み取れるようにするために、:lib1 の構成に何かが欠けていると思います。

誰でも助けることができますか?ありがとう

0 投票する
2 に答える
4165 参照

android - Android フレーバーごとに異なるライブラリ モジュールを使用する

フレーバーごとに異なるライブラリ モジュールを使用したい。

例えば:

  • 無料のフレーバー -> 無料のライブラリ モジュールを使用する必要があります
  • 有料フレーバー -> 有料ライブラリ モジュールを使用する必要があります

私の味

私が試したこと

しかし、これを使用できないコンパイルエラーが発生しました

注: 重複した質問ではありません。私はすでにいくつかの StackOverflow の質問を試しました。時代遅れです(コンパイルを使用しています)

参考 - Android Gradle のマルチ フレーバー ライブラリに基づくマルチ フレーバー アプリ

解決策(Gabriele Mariotti のコメントから)