私は無料のアプリと有料アプリを結合しようとしています。 Androidの新しいビルドシステムのproductFlavorsは、私の問題に完全に適合しているようです。Gradle Androidプラグインは、さまざまな製品の味のためにRファイルを生成しますか?
私はfreeAppフレーバーをうまく使っていますが、私がpayappフレーバーを作成すると、生成されるRファイルはfreeAppで定義されたパッケージ構造になります。私はいつもRファイルの場所は、マニフェストにパッケージ名によって定義されていると信じ
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"
}
:ここ
はgradle.buildファイルによってからの抜粋です。マニフェストファイルが正しく生成されていることを確認しました。
問題は、両方のフレーバのRファイルが同じ場所にあることです。 Gradleはメインソースツリー内にマニフェストが存在することを要求します。つまり、メインソースツリーに置かれたマニフェストのどのバージョンであれ、R.javaファイルが生成されます。
各フレーバの正しい場所に生成するRファイルを取得すると仮定します。各フレーバが正しいRファイルを参照するように、Rファイルのインポート文をどのように管理する必要がありますか?ここで
は私のプロジェクト構造のスクリーンショットです:
それぞれのAndroidManifest.xmlファイルには、完全かつ完全なマニフェストである - マニュアルに従って、メインツリー内のマニフェストには、製品を完全に上書きする必要があります風味のバージョン。しかし、これは明らかに起こっていません。なぜなら、開始されるべき活動とコンテンツプロバイダーが上書きされていないからです。
私が間違っていることについての洞察は、最も高く評価されます。これは、packageNameをオーバーライドする誰もが実行される非常に一般的な状況でなければなりません。私は今約1週間それを把握しようとしていて、自分でそこに着くことができないようです。
おかげで、AndroidののGradleプラグイン0.7.3の下で
-Aaron
これは正しい回答です。受け入れられるべきである。 – osayilgan