【问题标题】:How to tell Gradle to use a different AndroidManifest from the command line?如何告诉 Gradle 从命令行使用不同的 AndroidManifest?
【发布时间】:2013-07-09 02:52:30
【问题描述】:

我有一个多模块项目。从我的项目的根目录(包含多个模块)开始,我希望能够调用“gradle build”并让它在我的一个模块中使用不同的 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 中的一个。而且我需要能够从命令行指定此更改。有什么想法吗?

【问题讨论】:

    标签: android command-line android-manifest gradle command-line-arguments


    【解决方案1】:

    我通过使用不同的构建类型解决了这个问题。

    这是我的 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 构建,我在不同的目录中指定了一个清单。有效。

    【讨论】:

    • 我发现不同 AndroidManifest.xml 文件合并在一起的问题不应合并。例如,我有一个 debug 和一个 qa buildType,它们在构建调试时被合并在一起。
    • 我认为这是设计使然,因此您可以对不同的构建拥有不同的权限。
    • 这个答案比整个插件文档更有用;)
    • 有没有办法禁用合并?我选择了一个不同的构建变体,它使用合并的清单进行构建,除非我在 build.gradle 中注释掉该变体
    • 对我来说根本不起作用。仅评估 gradle 文件中最后一个 build_variant 下的“manifest.srcFile”,忽略所有其他文件。甚至无效的路径也会被忽略。
    【解决方案2】:

    使用这个:

    manifest.srcFile "src/development/AndroidManifest.xml"
    

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多