a54f917fd999bbaaeae7fd63deb7ec893fa1141e
[android/platform/tools/build.git] / gradle / src / main / groovy / com / android / build / gradle / internal / ApplicationVariant.groovy
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.build.gradle.internal
17
18 import com.android.build.gradle.BasePlugin
19 import com.android.build.gradle.internal.tasks.PrepareDependenciesTask
20 import com.android.build.gradle.internal.tasks.TestFlavorTask
21 import com.android.build.gradle.tasks.AidlCompile
22 import com.android.build.gradle.tasks.Dex
23 import com.android.build.gradle.tasks.GenerateBuildConfig
24 import com.android.build.gradle.tasks.MergeAssets
25 import com.android.build.gradle.tasks.MergeResources
26 import com.android.build.gradle.tasks.PackageApplication
27 import com.android.build.gradle.tasks.ProcessAndroidResources
28 import com.android.build.gradle.tasks.ProcessManifest
29 import com.android.build.gradle.tasks.RenderscriptCompile
30 import com.android.build.gradle.tasks.ZipAlign
31 import com.android.builder.AndroidBuilder
32 import com.android.builder.ProductFlavor
33 import com.android.builder.VariantConfiguration
34 import org.gradle.api.Task
35 import org.gradle.api.tasks.Copy
36 import org.gradle.api.tasks.bundling.Zip
37 import org.gradle.api.tasks.compile.JavaCompile
38
39 /**
40  * Represents something that can be packaged into an APK and installed.
41  */
42 public abstract class ApplicationVariant {
43
44     final VariantConfiguration config
45
46     PrepareDependenciesTask prepareDependenciesTask
47
48     ProcessManifest processManifestTask
49     RenderscriptCompile renderscriptCompileTask
50     AidlCompile aidlCompileTask
51     MergeResources mergeResourcesTask
52     MergeAssets mergeAssetsTask
53     ProcessAndroidResources processResourcesTask
54     GenerateBuildConfig generateBuildConfigTask
55
56     JavaCompile javaCompileTask
57     Copy processJavaResources
58
59     Dex dexTask
60     PackageApplication packageApplicationTask
61     ZipAlign zipAlignTask
62
63     Zip packageLibTask
64
65     File outputFile
66
67     Task assembleTask
68
69     Task installTask
70     Task uninstallTask
71
72     TestFlavorTask testFlavorTask
73
74     ApplicationVariant(VariantConfiguration config) {
75         this.config = config
76     }
77
78     public VariantConfiguration getVariantConfiguration() {
79         return config
80     }
81
82     abstract String getName()
83
84     abstract String getDescription()
85
86     abstract String getDirName()
87
88     String getFlavorDirName() {
89         if (config.hasFlavors()) {
90             return "${getFlavoredName(false)}"
91         } else {
92             return ""
93         }
94     }
95
96     String getFlavorName() {
97         if (config.hasFlavors()) {
98             return "${getFlavoredName(true)}"
99         } else {
100             return "Main"
101         }
102     }
103
104     abstract String getBaseName()
105
106     abstract boolean getZipAlign()
107
108     boolean isSigned() {
109         return config.isSigningReady()
110     }
111
112     abstract boolean getRunProguard()
113
114     String getPackageName() {
115         return config.getPackageName()
116     }
117
118     abstract AndroidBuilder createBuilder(BasePlugin androidBasePlugin)
119
120     protected String getFlavoredName(boolean capitalized) {
121         StringBuilder builder = new StringBuilder()
122         for (ProductFlavor flavor : config.flavorConfigs) {
123             builder.append(capitalized ? flavor.name.capitalize() : flavor.name)
124         }
125
126         return builder.toString()
127     }
128 }