Android Studio buildflavors

Android Studio buildflavors

开始使用新的 android 工作室似乎非常灵活,但通常会带来陡峭的学习曲线。希望在这里得到一些帮助。

我构建了一个应用程序并使用此 build.gradle 文件部署了它

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "me.test.simpleProject
        minSdkVersion 10
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    signingConfigs {
        release {
            storeFile file("../my.keystore.jks")
            storePassword System.getenv("and_ks_pw")
            keyAlias System.getenv("and_ky_alias")
            keyPassword System.getenv("and_k_pw")
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            debuggable true
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'

    compile project(":Library:lib_my_lib_a")
    compile project(":Library:lib_my_lib_b")
    compile project(":Library:lib_my_lib_c")
}

这很好用,一旦我学会了语法,它就会比以前的系统更容易使用。

现在我的问题。

我想基本上添加几个产品口味。

我目前使用 google 分析来跟踪点击次数、使用情况统计数据等简单的事情。

过去 [在 android studio 之前] 通常以免费/付费版本分发我的应用程序。

我想为以下项目创建 say build flavors: google 免费玩 google玩付费 亚马逊免费 亚马逊付费

这些应用程序的代码应该大部分相同,但它们不可能是因为,例如在您的亚马逊应用程序中将 links 添加到 google play 会给您带来一些麻烦。所以我需要在构建风格中具有独特的 类。

我正在阅读一些文档并观看 google 关于设置构建风格的讨论,但我有点困惑。

谁能帮我定义这个项目的文件夹结构?

当前应用结构

test/
.gradle/
.idea/
app/
app/build
app/libs <-- empty
app/src
app/.gitignore
app/app.iml
app/build.gradle
app/proguard-rules.pro
build/
gradle/
Library/lib_a
Library/lib_b
Library/lib_c
.gitignore
build.gradle
gradle.properties
gradlew
gradlew.bat
local.properties
settings.gradle
test.iml

我可以将新文件夹放在任何地方吗?我如何 link 升级它们以正确构建变体?

要在您的应用中使用风味,您应该具有如下结构:

   app
       src
         flavor1
             java
             res
         flavor2
           java
           res
         main
           java
           res

您必须在 build.gradle:

中定义口味
productFlavors {
    flavor1 {
        //
    }
    flavor2 {
        //
    }
}

然后你可以使用不同的依赖项:

dependencies {
    releaseCompile 
    debugCompile 
    flavor1Compile 
    flavor1DegubCompile 
}

例如:

 dependencies {
     freeCompile 'com.google.android.gms:play-services:7.5.0'
 }

您应该做的第一件事是将这些风格添加到 gradle 脚本的 android 部分内:

productFlavors {
    googleFree {
        applicationId = "com.your.app.gfree"
    }
    googlePaid {
        applicationId = "com.your.app.gpaid"
    }
    amazonFree {
        applicationId = "com.your.app.afree"
    }
    amazonPaid {
        applicationId = "com.your.app.apaid"
    }
}

请注意,如果需要,您可以为您的应用程序定义不同的包名称,以及一些额外的属性。完整详情:Gradle Plugin - Build Variants

此时,您的应用程序中将具有三个不同的概念:

构建类型: DebugRelease

产品口味:googleFreegooglePaidamazonFreeamazonPaid

构建变体:构建类型和风格的组合

googleFreeDebug googleFreeRelease googlePaidDebug googlePaidRelease amazonFreeDebug amazonFreeRelease amazonPaidDebug amazonPaidRelease

风味特定资源:

要定义资源,您应该:

app
  src        
    main
      java
      res
    googlePaid
      java
      res
    googleFree
      java
      res
    amazonPaid
      java
      res
    amazonFree
      java
      res

有了这个结构,您可以将所有共享的东西放在 main 下,而特定风味的东西将存在于每个风味的文件夹中。然后,在构建应用程序的特定 变体 时,android 和 gradle 将为您解析正确的资源。如果您对更多详细信息感兴趣,请参阅 Resource Merging

将风格添加到您的 build.gradle 文件后,如果您同步项目,Android Studio 将能够选择您的构建变体,您可以 select 这些来自IDE: