Android Studio Gradle第一步

Android Studio Gradle第一步,android,gradle,android-studio,Android,Gradle,Android Studio,有些人可能已经看过Android Studio Gradle i/o,Xavier Ducrohet在他的快速演讲中提到了如何使用Android Gradle构建系统。我的问题是,文档和演示缺乏快速启动的信息。至少对我来说是这样。在我下面的代码中,我试图解决gradle android插件系统的使用问题,我确信我有一些步骤是错误的,也有一些是正确的。(我很少使用ant或maven) 也许我会用我到目前为止所做的一步一步地经历它 android { compileSdkVersion 17

有些人可能已经看过Android Studio Gradle i/o,Xavier Ducrohet在他的快速演讲中提到了如何使用Android Gradle构建系统。我的问题是,文档和演示缺乏快速启动的信息。至少对我来说是这样。在我下面的代码中,我试图解决gradle android插件系统的使用问题,我确信我有一些步骤是错误的,也有一些是正确的。(我很少使用ant或maven)

也许我会用我到目前为止所做的一步一步地经历它

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16

        signingStoreLocation = "debug.keystore"
        signingStorePassword = "***************"
        signingKeyAlias = "***************"
        signingKeyPassword = "**************"
    }
首先,我正在为调试构建(或使用默认设置的每个构建)配置默认设置。这意味着没有构建类型或风格

源集:

    sourceSets {

        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject']
            res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode']
            assets.srcDirs = ['assets']
        }
    }
在这一步中,我定义了sourceset。这是我的第一个问题。如果我有相同的代码要用于两个项目,是否可以/或者应该定义更多的源集,比如-->

…取决于基础src文件夹?还是应该像我的第一个sourceSets声明中那样,通过定义一组不同的文件夹来定义sourceSets,如Xavier Ducrohet提到的res文件夹?(也不清楚我是否只能以这种方式对res文件夹或java.srcDirs=['com.project.maingradle','com.otherproject.changedsourcefilesforthisproject']等java src代码文件夹执行此操作

签名配置:

    signingConfigs {
        debugRelease {
            storeFile file("debug.keystore")
        }

        release {
            storeFile file("release.keystore")
        }

        testflight {
            storeFile file("testflight.keystore")
        }
    }
在这一步中,我定义了用于不同版本的不同键。应该可以

建筑类型:

    buildTypes {

        debugRelease.initWith(buildTypes.release)
        testflight.initWith(buildTypes.release)

        sourceSets.debugRelease.setRoot("src/release")
        sourceSets.debugRelease.setRoot("src/release")
        sourceSets.debugRelease.setRoot("src/release")

        debugRelease {
            packageNameSuffix ".debugRelease"
            versionNameSuffix "-DEBUG"
            debuggable true
            signingConfig signingConfigs.debug
        }

        testflight {
            packageNameSuffix ".testflight"
            versionNameSuffix "-TESTFLIGHT"
            signingConfig signingConfigs.testflight
        }

        release {
            packageNameSuffix ".release"
            versionNameSuffix "-RELEASE"
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.release
        }
    }
这一步比gradle android插件的任何其他步骤都解释得更清楚。除了我不知道是否有一个预定义的版本或调试设置在后台工作…我是否需要澄清它…至少我认为是这样,因为使用了NameSuffix、proguard或声明此构建的密钥(signingConfig)

口味:

    flavorGroups "abi", "version"

    productFlavors {

        arm {
            flavorGroup "abi"
        }

        standardproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.normal"
            sourceSet sourceSets.main
        }

        standardproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.normal"
            sourceSet sourceSets.main
        }

        testflightproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.testflight"
            sourceSet sourceSets.main
        }

        testflightproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.testflight"
            sourceSet sourceSets.main
        }
    }
}
就个人而言,我认为风格是最有趣的部分。Xavier Ducrohet说,如果要为不同的风格构建使用不同的键,就不应该在构建类型中定义键(而是在风格中声明),我不知道我是否正确理解了这一点

无论如何,我在这里试图做的是定义不同的风格,这些风格应该用不同的设置来构建,比如,不同系统的sdk版本控制,一个专用的packagename和设置一个依赖的sourceset,就像你在示例中看到的那样。我不确定的是,构建类型如何依赖于风格……它们只是将每个风格相乘吗对于每种构建类型?以及…设置一个源集(如果可以设置更多的源集)可以吗,就像这样

构建类型是如何依赖于风格的……它们只是将每种风格与每种构建类型相乘吗

是的,Gradle将生成构建类型和产品风格的每个组合。根据,每个构建类型和产品风格组合称为构建变体

设置一个源集(如果可以设置更多的源集)可以吗


当然!产品风格(和构建变体)也会自动从
src/myFlavorName
中包含他们自己的源代码集,根据。

我已经尝试过类似的方法。你运行哪个命令来签署你的发布apk,
gradle build
?我在我的
build/apk
文件夹中只看到一个未签名的apk文件。很好的问题,gradle文档只是在重复源代码集.debugRelease.setRoot(“src/release”)三次?
    flavorGroups "abi", "version"

    productFlavors {

        arm {
            flavorGroup "abi"
        }

        standardproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.normal"
            sourceSet sourceSets.main
        }

        standardproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.normal"
            sourceSet sourceSets.main
        }

        testflightproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.testflight"
            sourceSet sourceSets.main
        }

        testflightproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.testflight"
            sourceSet sourceSets.main
        }
    }
}