1 |
// APKBuilder Ant Task |
2 |
// |
3 |
// Douglas Thrift |
4 |
// |
5 |
// $Id$ |
6 |
|
7 |
/* Copyright 2008 Douglas Thrift |
8 |
* |
9 |
* Licensed under the Apache License, Version 2.0 (the "License"); |
10 |
* you may not use this file except in compliance with the License. |
11 |
* You may obtain a copy of the License at |
12 |
* |
13 |
* http://www.apache.org/licenses/LICENSE-2.0 |
14 |
* |
15 |
* Unless required by applicable law or agreed to in writing, software |
16 |
* distributed under the License is distributed on an "AS IS" BASIS, |
17 |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
18 |
* See the License for the specific language governing permissions and |
19 |
* limitations under the License. |
20 |
*/ |
21 |
|
22 |
package net.douglasthrift.anttasks; |
23 |
|
24 |
import java.io.File; |
25 |
|
26 |
import java.util.Iterator; |
27 |
|
28 |
import org.apache.tools.ant.Project; |
29 |
import org.apache.tools.ant.BuildException; |
30 |
import org.apache.tools.ant.taskdefs.UpToDate; |
31 |
import org.apache.tools.ant.taskdefs.condition.Os; |
32 |
import org.apache.tools.ant.types.FileSet; |
33 |
import org.apache.tools.ant.types.Path; |
34 |
import org.apache.tools.ant.types.resources.FileResource; |
35 |
import org.apache.tools.ant.types.resources.Union; |
36 |
|
37 |
public class APKBuilder extends CommandTask |
38 |
{ |
39 |
private File output_; |
40 |
private boolean verbose_; |
41 |
private boolean unsigned_; |
42 |
private String storeType_; |
43 |
private Path zip_; |
44 |
private Path file_; |
45 |
private Path folder_; |
46 |
private Path jar_; |
47 |
|
48 |
public void setOutput(File output) |
49 |
{ |
50 |
output_ = output; |
51 |
} |
52 |
|
53 |
public void setVerbose(boolean verbose) |
54 |
{ |
55 |
verbose_ = verbose; |
56 |
} |
57 |
|
58 |
public void setUnsigned(boolean unsigned) |
59 |
{ |
60 |
unsigned_ = unsigned; |
61 |
} |
62 |
|
63 |
public void setStoreType(String storeType) |
64 |
{ |
65 |
storeType_ = storeType; |
66 |
} |
67 |
|
68 |
public void setZip(Path zip) |
69 |
{ |
70 |
zip_ = zip; |
71 |
} |
72 |
|
73 |
public void setFile(Path file) |
74 |
{ |
75 |
file_ = file; |
76 |
} |
77 |
|
78 |
public void setFolder(Path folder) |
79 |
{ |
80 |
folder_ = folder; |
81 |
} |
82 |
|
83 |
public void setJar(Path jar) |
84 |
{ |
85 |
jar_ = jar; |
86 |
} |
87 |
|
88 |
@Override |
89 |
public void execute() |
90 |
{ |
91 |
if (output_ == null) |
92 |
throw new BuildException("no output file specified"); |
93 |
|
94 |
if (isUpToDate()) |
95 |
return; |
96 |
|
97 |
command(Os.isFamily(Os.FAMILY_WINDOWS) ? "apkbuilder.bat" : "apkbuilder"); |
98 |
argument(output_); |
99 |
|
100 |
if (verbose_) |
101 |
argument("-v"); |
102 |
|
103 |
if (unsigned_) |
104 |
argument("-u"); |
105 |
|
106 |
if (storeType_ != null) |
107 |
arguments("-storetype", storeType_); |
108 |
|
109 |
if (zip_ != null) |
110 |
for (Iterator iterator = zip_.iterator(); iterator.hasNext();) |
111 |
arguments("-z", iterator.next().toString()); |
112 |
|
113 |
if (file_ != null) |
114 |
for (Iterator iterator = file_.iterator(); iterator.hasNext();) |
115 |
arguments("-f", iterator.next().toString()); |
116 |
|
117 |
if (folder_ != null) |
118 |
for (Iterator iterator = folder_.iterator(); iterator.hasNext();) |
119 |
arguments("-rf", iterator.next().toString()); |
120 |
|
121 |
if (jar_ != null) |
122 |
for (Iterator iterator = jar_.iterator(); iterator.hasNext();) |
123 |
arguments("-rj", iterator.next().toString()); |
124 |
|
125 |
super.execute(); |
126 |
} |
127 |
|
128 |
private boolean isUpToDate() |
129 |
{ |
130 |
Project project = getProject(); |
131 |
UpToDate upToDate = (UpToDate)project.createTask("uptodate"); |
132 |
|
133 |
upToDate.setTargetFile(output_); |
134 |
|
135 |
Union union = upToDate.createSrcResources(); |
136 |
|
137 |
if (zip_ != null) |
138 |
union.add(zip_); |
139 |
|
140 |
if (file_ != null) |
141 |
union.add(file_); |
142 |
|
143 |
if (folder_ != null) |
144 |
for (Iterator iterator = folder_.iterator(); iterator.hasNext();) |
145 |
{ |
146 |
FileSet fileSet = (FileSet)project.createDataType("fileset"); |
147 |
|
148 |
fileSet.setDir(((FileResource)iterator.next()).getFile()); |
149 |
fileSet.setExcludes("**/_*/** **/*.aidl **/*.class **/*.java **/META-INF/** **/overview.html **/package.html"); |
150 |
union.add(fileSet); |
151 |
} |
152 |
|
153 |
if (jar_ != null) |
154 |
for (Iterator iterator = jar_.iterator(); iterator.hasNext();) |
155 |
{ |
156 |
FileSet fileSet = (FileSet)project.createDataType("fileset"); |
157 |
File file = ((FileResource)iterator.next()).getFile(); |
158 |
|
159 |
if (file.isDirectory()) |
160 |
{ |
161 |
fileSet.setDir(file); |
162 |
fileSet.setIncludes("*.jar"); |
163 |
} |
164 |
else |
165 |
fileSet.setFile(file); |
166 |
|
167 |
union.add(fileSet); |
168 |
} |
169 |
|
170 |
return upToDate.eval(); |
171 |
} |
172 |
} |