無料アプリと有料アプリを統合しようとしています。Android の新しいビルド システムの productFlavors は、私の問題に完全に適合しているようです。
freeApp フレーバーはうまく機能していますが、paidApp フレーバーをビルドすると、生成される R ファイルは、freeApp で定義されたパッケージ構造になっています。
gradle.build ファイルによるスニペットを次に示します。
productFlavors {
freeApp {
versionCode 201308020
versionName "2.0.13_free"
packageName "com.flyingspheres.android"
}
paidApp {
versionCode 201305110
versionName "2.0.10_paid"
packageName "com.flyingspheres.android.inventory"
}
R ファイルの場所は、マニフェストのパッケージ名によって定義されると常に信じていました。マニフェスト ファイルが正しく生成されていることを確認しました。
問題は、両方のフレーバーの R ファイルが同じ場所にあることです。Gradle は、マニフェストがメイン ソース ツリー内に存在することを要求するため、R.java ファイルが生成されるメイン ソース ツリーにマニフェストのどのバージョンを入れてもかまいません。
各フレーバーの正しい場所に R ファイルを生成すると仮定します。各フレーバーが正しい R ファイルを参照するように、R ファイルのインポート ステートメントをどのように管理する必要がありますか?
これが私のプロジェクト構造のスクリーンショットです:
各 AndroidManifest.xml ファイルは完全なマニフェストです。ドキュメントによると、メイン ツリーのマニフェストは製品フレーバー バージョンを完全に上書きする必要があります。ただし、起動する必要があるアクティビティとコンテンツ プロバイダーが上書きされていないため、明らかにそうではありません。
私が間違っていることについての洞察をいただければ幸いです。これは、packageName をオーバーライドする人が遭遇する非常に一般的な状況でなければなりません。私は約1週間それを理解しようとしてきましたが、自分でそこにたどり着くことができないようです.
ありがとう、
-アーロン