35

私のビルド システムでは、いくつかのアプリ バリアントをビルドする必要があり、それぞれが異なるアクセス許可のセットを要求します。別のスクリプトを呼び出さずに、Gradle でこれを行うにはどうすればよいですか?

4

1 に答える 1

62

gradle ファイルにさまざまなフレーバーを含めることで、これを行うことができました。

    free {
        packageName 'com.sample.free'
        buildConfigField "boolean", "HAS_AD", "true"
    }

    paid {
        packageName 'com.sample.paid'
        buildConfigField "boolean", "HAS_AD", "false"
    }

次に、srcの下に「free」という新しいフォルダーを作成し、その下に「res」というフォルダーを作成しました

src/
 + free/
 |   + res/
 + src/

そのフォルダーに、次のコードを含む新しいファイル「AndroidManifest.xml」を作成します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.sample" >
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

Android Tools Project Site のGradle Plugin User Guideによると:

ビルド タイプと同様に、プロダクト フレーバーも独自のソースセットを通じてコードとリソースを提供します。

1 つの APK のビルドに使用されるすべてのソースセットを処理する場合、次のルールが使用されます。

  • すべてのソース コード (src/*/java) は、1 つの出力を生成する複数のフォルダーとして一緒に使用されます。
  • マニフェストはすべて 1 つのマニフェストにまとめられます。これにより、ビルド タイプと同様に、製品フレーバーにさまざまなコンポーネントや権限を持たせることができます。
  • すべてのリソース (Android のリソースとアセット) は、ビルド タイプがメインの sourceSet をオーバーライドするプロダクト フレーバーをオーバーライドするオーバーレイ優先度を使用して使用されます。
  • 各ビルド バリアントは、リソースから独自の R クラス (またはその他の生成されたソース コード) を生成します。バリアント間で共有されるものはありません。

つまり、src の下に各フレーバー名のフォルダーを作成し、カスタム ファイルをその中に入れることができます。上記のファイルが AndroidManifest gradle である場合、メインのマニフェストとマージされます。

于 2013-07-01T22:18:23.407 に答える