webdevqa.jp.net

コマンドラインから別のAndroidManifestを使用するようにGradleに指示するにはどうすればよいですか?

マルチモジュールプロジェクトがあります。プロジェクトのルート(複数のモジュールを含む)から、「gradle build」を呼び出して、渡したパラメーターに応じて、モジュールの1つで異なるAndroidManifestを使用できるようにしたいと考えています。達成するための最良の方法は何ですかこの? gradle.propertiesファイルを使用する必要がありますか、それともsettings.gradleファイルで別のbuild.gradleを指定できますか?助けていただければ幸いです。

settings.gradle:

include 'ActionBarSherlock'
include '<main_app>'

build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.Android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'Android'

dependencies {
    compile project(':ActionBarSherlock')
}

Android {
    buildToolsVersion "17.0"
    compileSdkVersion 17

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            Java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

別のAndroidManifest.xmlを使用するための最良の方法を探しています。たとえば、// test /AndroidManifest.xmlにある方法です。そして、コマンドラインからこの変更を指定できる必要があります。何か案は?

15
Karim Varela

さまざまなビルドタイプを使用してこれを解決しました。

これが私のbuild.gradleです:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.Android.tools.build:gradle:0.4.2'
   }
}

apply plugin: 'Android'

dependencies {
    compile project(':facebook-Android-sdk-3.0.1:facebook')
    compile project(':google-play-services_lib')
    compile project(':nineoldandroids')
    compile project(':SlidingMenu-master:library')
    compile project(':ViewPagerIndicator')
    compile project(':volley')
    compile project(':windowed-seek-bar')
    compile files('compile-libs/androidannotations-2.7.1.jar', 'libs/Flurry_3.2.1.jar', 'libs/google-play-services.jar', 'libs/gson-2.2.4.jar', 'libs/picasso-1.1.1.jar', 'libs/crittercism_v3_0_11_sdkonly.jar', 'libs/gcm.jar', 'libs/apphance-library.jar')
}

Android {
    buildToolsVersion "17.0"
    compileSdkVersion 17

    signingConfigs {
        debug {
            storeFile file('keystores/debug.keystore')
        }
    }

    buildTypes {
        debug {
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    Java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }

        release {
            zipAlign true
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    Java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }

        utest {
            debuggable true
            signingConfig signingConfigs.debug

            sourceSets {
                main {
                    manifest.srcFile 'utest/AndroidManifest.xml'
                    Java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }
    }
}

私のutestビルドでは、別のディレクトリでマニフェストを指定していることがわかります。動作します。

15
Karim Varela