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