aboutsummaryrefslogtreecommitdiffstats
path: root/anttasks/src/com/android/ant/AaptExecLoopTask.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:29:09 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:29:09 -0800
commit55a2c71f27d3e0b8344597c7f281e687cb7aeb1b (patch)
treeecd18b995aea8eeeb8b3823266280d41245bf0f7 /anttasks/src/com/android/ant/AaptExecLoopTask.java
parent82ea7a177797b844b252effea5c7c7c5d63ea4ac (diff)
downloadsdk-55a2c71f27d3e0b8344597c7f281e687cb7aeb1b.zip
sdk-55a2c71f27d3e0b8344597c7f281e687cb7aeb1b.tar.gz
sdk-55a2c71f27d3e0b8344597c7f281e687cb7aeb1b.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'anttasks/src/com/android/ant/AaptExecLoopTask.java')
-rw-r--r--anttasks/src/com/android/ant/AaptExecLoopTask.java218
1 files changed, 218 insertions, 0 deletions
diff --git a/anttasks/src/com/android/ant/AaptExecLoopTask.java b/anttasks/src/com/android/ant/AaptExecLoopTask.java
new file mode 100644
index 0000000..d2c7162
--- /dev/null
+++ b/anttasks/src/com/android/ant/AaptExecLoopTask.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ant;
+
+import com.android.sdklib.project.ApkConfigurationHelper;
+import com.android.sdklib.project.ProjectProperties;
+import com.android.sdklib.project.ProjectProperties.PropertyType;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.ExecTask;
+import org.apache.tools.ant.types.Path;
+
+import java.io.File;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+/**
+ * Task able to run an Exec task on aapt several times.
+ * It does not follow the exec task format, instead it has its own parameters, which maps
+ * directly to aapt.
+ *
+ */
+public final class AaptExecLoopTask extends Task {
+
+ private String mExecutable;
+ private String mCommand;
+ private String mManifest;
+ private String mResources;
+ private String mAssets;
+ private String mAndroidJar;
+ private String mOutFolder;
+ private String mBaseName;
+
+ /**
+ * Sets the value of the "executable" attribute.
+ * @param executable the value.
+ */
+ public void setExecutable(String executable) {
+ mExecutable = executable;
+ }
+
+ /**
+ * Sets the value of the "command" attribute.
+ * @param command the value.
+ */
+ public void setCommand(String command) {
+ mCommand = command;
+ }
+
+ /**
+ * Sets the value of the "manifest" attribute.
+ * @param manifest the value.
+ */
+ public void setManifest(Path manifest) {
+ mManifest = manifest.toString();
+ }
+
+ /**
+ * Sets the value of the "resources" attribute.
+ * @param resources the value.
+ */
+ public void setResources(Path resources) {
+ mResources = resources.toString();
+ }
+
+ /**
+ * Sets the value of the "assets" attribute.
+ * @param assets the value.
+ */
+ public void setAssets(Path assets) {
+ mAssets = assets.toString();
+ }
+
+ /**
+ * Sets the value of the "androidjar" attribute.
+ * @param androidJar the value.
+ */
+ public void setAndroidjar(Path androidJar) {
+ mAndroidJar = androidJar.toString();
+ }
+
+ /**
+ * Sets the value of the "outfolder" attribute.
+ * @param outFolder the value.
+ */
+ public void setOutfolder(Path outFolder) {
+ mOutFolder = outFolder.toString();
+ }
+
+ /**
+ * Sets the value of the "basename" attribute.
+ * @param baseName the value.
+ */
+ public void setBasename(String baseName) {
+ mBaseName = baseName;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * Executes the loop. Based on the values inside default.properties, this will
+ * create alternate temporary ap_ files.
+ *
+ * @see org.apache.tools.ant.Task#execute()
+ */
+ @Override
+ public void execute() throws BuildException {
+ Project taskProject = getProject();
+
+ // first do a full resource package
+ createPackage(null /*configName*/, null /*resourceFilter*/);
+
+ // now see if we need to create file with filtered resources.
+ // Get the project base directory.
+ File baseDir = taskProject.getBaseDir();
+ ProjectProperties properties = ProjectProperties.load(baseDir.getAbsolutePath(),
+ PropertyType.DEFAULT);
+
+ Map<String, String> apkConfigs = ApkConfigurationHelper.getConfigs(properties);
+ if (apkConfigs.size() > 0) {
+ Set<Entry<String, String>> entrySet = apkConfigs.entrySet();
+ for (Entry<String, String> entry : entrySet) {
+ createPackage(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ /**
+ * Creates a resource package.
+ * @param configName the name of the filter config. Can be null in which case a full resource
+ * package will be generated.
+ * @param resourceFilter the resource configuration filter to pass to aapt (if configName is
+ * non null)
+ */
+ private void createPackage(String configName, String resourceFilter) {
+ Project taskProject = getProject();
+
+ if (configName == null || resourceFilter == null) {
+ System.out.println("Creating full resource package...");
+ } else {
+ System.out.println(String.format(
+ "Creating resource package for config '%1$s' (%2$s)...",
+ configName, resourceFilter));
+ }
+
+ // create a task for the default apk.
+ ExecTask task = new ExecTask();
+ task.setExecutable(mExecutable);
+ task.setFailonerror(true);
+
+ // aapt command. Only "package" is supported at this time really.
+ task.createArg().setValue(mCommand);
+
+ // filters if needed
+ if (configName != null && resourceFilter != null) {
+ task.createArg().setValue("-c");
+ task.createArg().setValue(resourceFilter);
+ }
+
+ // force flag
+ task.createArg().setValue("-f");
+
+ // manifest location
+ task.createArg().setValue("-M");
+ task.createArg().setValue(mManifest);
+
+ // resources location
+ task.createArg().setValue("-S");
+ task.createArg().setValue(mResources);
+
+ // assets location. this may not exists, and aapt doesn't like it, so we check first.
+ File assets = new File(mAssets);
+ if (assets.isDirectory()) {
+ task.createArg().setValue("-A");
+ task.createArg().setValue(mAssets);
+ }
+
+ // android.jar
+ task.createArg().setValue("-I");
+ task.createArg().setValue(mAndroidJar);
+
+ // out file. This is based on the outFolder, baseName, and the configName (if applicable)
+ String filename;
+ if (configName != null && resourceFilter != null) {
+ filename = mBaseName + "-" + configName + ".ap_";
+ } else {
+ filename = mBaseName + ".ap_";
+ }
+
+ File file = new File(mOutFolder, filename);
+ task.createArg().setValue("-F");
+ task.createArg().setValue(file.getAbsolutePath());
+
+ // final setup of the task
+ task.setProject(taskProject);
+ task.setOwningTarget(getOwningTarget());
+
+ // execute it.
+ task.execute();
+ }
+}