f104b300577d95dea8e396567871019ecb767dbb
[android/platform/tools/build.git] / gradle / src / main / groovy / com / android / build / gradle / PrepareDependenciesTask.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
17
18 import com.android.utils.Pair
19 import org.gradle.api.tasks.InputFiles
20 import org.gradle.api.tasks.OutputDirectories
21 import org.gradle.api.tasks.TaskAction
22
23 class PrepareDependenciesTask extends BaseTask {
24     final Map<File, File> bundles = [:]
25     final Set<Pair<Integer, String>> androidDependencies = []
26
27     void add(File bundle, File explodedDir) {
28         bundles[bundle] = explodedDir
29     }
30
31     void addDependency(Pair<Integer, String> api) {
32         androidDependencies.add(api)
33     }
34
35     @InputFiles
36     Iterable<File> getBundles() {
37         return bundles.keySet()
38     }
39
40
41     @OutputDirectories
42     Iterable<File> getExplodedBundles() {
43         return bundles.values()
44     }
45
46     @TaskAction
47     def prepare() {
48         bundles.each { bundle, explodedDir ->
49             project.copy {
50                 from project.zipTree(bundle)
51                 into explodedDir
52             }
53         }
54
55         // TODO check against variant's minSdkVersion
56         if (!androidDependencies.isEmpty()) {
57             def builder = getBuilder();
58             def target = builder.getTargetApiLevel()
59             for (Pair<Integer, String> dependency : androidDependencies) {
60                 if (dependency.getFirst() > target) {
61                     String parentDependency = dependency.getSecond()
62                     if (parentDependency != null) {
63                         throw new RuntimeException(String.format(
64                                 "ERROR: %s depends on Android API level %d, but project target is API level %d",
65                                 parentDependency, dependency.getFirst(), target))
66                     } else {
67                         throw new RuntimeException(String.format(
68                                 "ERROR: project depends on Android API level %d, but project target is API level %d",
69                                 dependency.getFirst(), target))
70                     }
71                 }
72             }
73         }
74     }
75 }