問題タブ [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.
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 の構成に何かが欠けていると思います。
誰でも助けることができますか?ありがとう
android - Android フレーバーごとに異なるライブラリ モジュールを使用する
フレーバーごとに異なるライブラリ モジュールを使用したい。
例えば:
- 無料のフレーバー -> 無料のライブラリ モジュールを使用する必要があります
- 有料フレーバー -> 有料ライブラリ モジュールを使用する必要があります
私の味
私が試したこと
しかし、これを使用できないコンパイルエラーが発生しました
注: 重複した質問ではありません。私はすでにいくつかの StackOverflow の質問を試しました。時代遅れです(コンパイルを使用しています)
参考 - Android Gradle のマルチ フレーバー ライブラリに基づくマルチ フレーバー アプリ
解決策(Gabriele Mariotti のコメントから)