Android Studio - 构建变体&模块选择

时间:2014-12-17 05:50:48

标签: android gradle android-studio android-gradle

我正在构建一个需要带有2个变体的库的应用程序 - 模拟器和放大器。实际。

我的目标是创建构建任务,例如assembleSimulatorDebug& assembleDebug。 assembleSimulatorDebug将包含模拟器模块/库,assembleDebug将包含构建apk的实际模块。

我正在考虑在build.gradle的依赖项部分中使用if else块。我能有这样的东西吗?

我很新,从昨天开始尝试设置这样的东西。如果任何人都可以提供一些提示或链接,我可以获得一个想法来实现这一点,这将是有帮助的。

2 个答案:

答案 0 :(得分:2)

<强>更新 找到另一个解决方这是我的另一个答案。

可以使用&#39; Flavor产品&#39; android gradle插件。您可以按产品风格拆分库实现。

初始要求&#39; com.android.tools.build:gradle:1.0.0&#39; Android Studio 1.0.1

我创建了project at GitHub,因此您可以获得,运行和学习。

您还需要创建两种版本的应用和库。例如,normalsimulator

应用程序build.gradle

apply plugin: 'com.android.application'

android {
    lintOptions {
        abortOnError false
    }
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.tivogi.gradle"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        normal {
        }
        simulator {
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    normalCompile project(path: ':library', configuration: 'normalRelease')
    simulatorCompile project(path: ':library', configuration: 'simulatorRelease')
}

图书馆build.gradle

apply plugin: 'com.android.library'

android {
    publishNonDefault true

    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        normal {
        }
        simulator {
        }
    }
}

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

<强>库:

  • productFlavors分隔各种口味之间的实施(如果对此有疑问,请参阅我的sample project);
  • publishNonDefault true添加到其build.gradle

    来自Gradle Plugin User Guide

      

    也可以发布库的所有变体。我们计划在使用正常的项目到项目依赖关系时允许这样做(如上所示),但由于Gradle的限制(我们正在努力修复这些),目前这是不可能的。   默认情况下不启用所有变体的发布。   启用它们:
      
      android {
      publishNonDefault true
      }

<强>应用

  • 添加normalsimulator种产品风格(productFlavors);
  • 将下一行添加到dependencies部分

    normalCompile project(path: ':library', configuration: 'normalRelease')
    simulatorCompile project(path: ':library', configuration: 'simulatorRelease')
    

    来自Gradle Plugin User Guide

      

    要创建对其他已发布工件的依赖关系,您需要指定要使用的工件:
      
      依赖性{
      flavor1Compile项目(路径:&#39;:lib1&#39;,配置:&#39; flavor1Release&#39;)
      flavor2Compile项目(路径:&#39;:lib1&#39;,配置:&#39; flavor2Release&#39;)
      }

在完成所有这些之后,您将能够构建2个应用程序变体:normal和simulator。

答案 1 :(得分:2)

找到2个库的解决方案,看起来更简单。它基于official guide

的下一个
  

最后,与Build Types一样,Product Flavors可以拥有自己的依赖项。例如,如果使用各种口味生成基于广告的应用和付费应用,其中一种口味可能依赖于广告SDK,而另一种则不依赖。   
  依赖性{
      flavor1Compile&#34; ...&#34;
  }

因此,您可以创建2个单独的库并创建2种风格,例如,库library-normallibrary-simulator,风味为normalsimulator

申请build.gradle

apply plugin: 'com.android.application'

android {
    lintOptions {
        abortOnError false
    }
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.tivogi.gradle"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        normal {
        }
        simulator {
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    normalCompile project(":library-normal")
    simulatorCompile project(":library-simulator")
}

<强>应用

  • 只将这些行添加到dependencies;

    normalCompile project(":library-normal")
    simulatorCompile project(":library-simulator")
    

<强>库:

  • 不需要任何更改;

我在individual-libraries分支发布了此解决方案的示例项目。