21 |
|
|
22 |
|
package net.douglasthrift.anttasks; |
23 |
|
|
24 |
< |
import org.apache.tools.ant.Task; |
24 |
> |
import java.io.File; |
25 |
|
|
26 |
< |
public class APKBuilder extends Task |
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 |
|
} |