diff options
| -rw-r--r-- | anttasks/src/com/android/ant/AaptExecLoopTask.java | 10 | ||||
| -rw-r--r-- | anttasks/src/com/android/ant/ApkBuilderTask.java | 8 | ||||
| -rw-r--r-- | anttasks/src/com/android/ant/IfElseTask.java | 96 | ||||
| -rw-r--r-- | anttasks/src/com/android/ant/MultiApkExportTask.java | 12 | ||||
| -rw-r--r-- | apkbuilder/src/com/android/apkbuilder/ApkBuilder.java | 1 | ||||
| -rw-r--r-- | files/ant_rules_r3.xml | 17 |
6 files changed, 129 insertions, 15 deletions
diff --git a/anttasks/src/com/android/ant/AaptExecLoopTask.java b/anttasks/src/com/android/ant/AaptExecLoopTask.java index d9ec6bc1a..f93a20811 100644 --- a/anttasks/src/com/android/ant/AaptExecLoopTask.java +++ b/anttasks/src/com/android/ant/AaptExecLoopTask.java @@ -197,7 +197,7 @@ public final class AaptExecLoopTask extends Task { @Deprecated public void setBasename(String baseName) { System.out.println("WARNNG: Using deprecated 'basename' attribute in AaptExecLoopTask." + - "Use 'resourceFilename' (string) instead."); + "Use 'resourcefilename' (string) instead."); mApkBaseName = baseName; } @@ -207,15 +207,15 @@ public final class AaptExecLoopTask extends Task { */ public void setApkbasename(String apkbaseName) { System.out.println("WARNNG: Using deprecated 'apkbasename' attribute in AaptExecLoopTask." + - "Use 'resourceFilename' (string) instead."); + "Use 'resourcefilename' (string) instead."); mApkBaseName = apkbaseName; } /** - * Sets the value of the apkname attribute + * Sets the value of the resourcefilename attribute * @param apkName the value */ - public void setResourceFilename(String apkName) { + public void setResourcefilename(String apkName) { mApkName = apkName; } @@ -227,7 +227,7 @@ public final class AaptExecLoopTask extends Task { mRFolder = TaskHelper.checkSinglePath("rfolder", rFolder); } - public void setresourceFilter(String filter) { + public void setresourcefilter(String filter) { if (filter != null && filter.length() > 0) { mResourceFilter = filter; } diff --git a/anttasks/src/com/android/ant/ApkBuilderTask.java b/anttasks/src/com/android/ant/ApkBuilderTask.java index e34eb6ea1..a49c2c564 100644 --- a/anttasks/src/com/android/ant/ApkBuilderTask.java +++ b/anttasks/src/com/android/ant/ApkBuilderTask.java @@ -69,7 +69,7 @@ public class ApkBuilderTask extends Task { */ public void setBasename(String baseName) { System.out.println("WARNNG: Using deprecated 'basename' attribute in ApkBuilderTask." + - "Use 'apkFilename' (path) instead."); + "Use 'apkfilepath' (path) instead."); mBaseName = baseName; } @@ -77,15 +77,15 @@ public class ApkBuilderTask extends Task { * Sets the full filepath to the apk to generate. * @param filepath */ - public void setApkFilepath(String filepath) { + public void setApkfilepath(String filepath) { mApkFilepath = filepath; } /** - * Sets the + * Sets the resourcefile attribute * @param resourceFile */ - public void setResourceFile(String resourceFile) { + public void setResourcefile(String resourceFile) { mResourceFile = resourceFile; } diff --git a/anttasks/src/com/android/ant/IfElseTask.java b/anttasks/src/com/android/ant/IfElseTask.java new file mode 100644 index 000000000..fd4f9d0c3 --- /dev/null +++ b/anttasks/src/com/android/ant/IfElseTask.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2010 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 org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Sequential; + +/** + * If (condition) then: {@link Sequential} else: {@link Sequential}. + * + * In XML: + * <if condition="${some.condition}"> + * <then> + * </then> + * <else> + * </else> + * </if> + * + * both <then> and <else> behave like <sequential>. + * + * The presence of both <then> and <else> is not required, but one of them must be present. + * <if condition="${some.condition}"> + * <else> + * </else> + * </if> + * is perfectly valid. + * + */ +public class IfElseTask extends Task { + + private boolean mCondition; + private boolean mConditionIsSet = false; + private Sequential mThen; + private Sequential mElse; + + /** + * Sets the condition value + */ + public void setCondition(boolean condition) { + mCondition = condition; + mConditionIsSet = true; + } + + /** + * Creates and returns the <then> {@link Sequential} + */ + public Object createThen() { + mThen = new Sequential(); + return mThen; + } + + /** + * Creates and returns the <else> {@link Sequential} + */ + public Object createElse() { + mElse = new Sequential(); + return mElse; + } + + @Override + public void execute() throws BuildException { + if (mConditionIsSet == false) { + throw new BuildException("Condition has not been set."); + } + + // need at least one. + if (mThen == null && mElse == null) { + throw new BuildException("Need at least <then> or <else>"); + } + + if (mCondition) { + if (mThen != null) { + mThen.execute(); + } + } else { + if (mElse != null) { + mElse.execute(); + } + } + } +} diff --git a/anttasks/src/com/android/ant/MultiApkExportTask.java b/anttasks/src/com/android/ant/MultiApkExportTask.java index 1babcf782..89123d842 100644 --- a/anttasks/src/com/android/ant/MultiApkExportTask.java +++ b/anttasks/src/com/android/ant/MultiApkExportTask.java @@ -53,6 +53,13 @@ import javax.xml.xpath.XPathFactory; */ public class MultiApkExportTask extends Task { + /** + * Class representing one apk that needs to be generated. This contains + * which project it must be created from, and which filters should be used. + * + * This class is meant to be sortable in a way that allows generation of the buildInfo + * value that goes in the composite versionCode. + */ private static class ExportData implements Comparable<ExportData> { String relativePath; @@ -169,6 +176,10 @@ public class MultiApkExportTask extends Task { } System.out.println("versionCode: " + version); + // checks whether the projects can be signed. + boolean canSign = true; + + ExportData[] projects = getProjects(antProject, appPackage); HashSet<String> compiledProject = new HashSet<String>(); @@ -223,7 +234,6 @@ public class MultiApkExportTask extends Task { // set the output file names/paths. Keep all the temporary files in the project // folder, and only put the final file (which is different depending on whether // the file can be signed) locally. - boolean canSign = false; // read the base name from the build.xml file. String name = null; diff --git a/apkbuilder/src/com/android/apkbuilder/ApkBuilder.java b/apkbuilder/src/com/android/apkbuilder/ApkBuilder.java index 236ebbb72..dd6da8d5b 100644 --- a/apkbuilder/src/com/android/apkbuilder/ApkBuilder.java +++ b/apkbuilder/src/com/android/apkbuilder/ApkBuilder.java @@ -44,7 +44,6 @@ public final class ApkBuilder { public ApkCreationException(Throwable throwable) { super(throwable); } - } /** diff --git a/files/ant_rules_r3.xml b/files/ant_rules_r3.xml index 50b2f3a49..d6e8ab98e 100644 --- a/files/ant_rules_r3.xml +++ b/files/ant_rules_r3.xml @@ -26,6 +26,10 @@ classname="com.android.ant.XPathTask" classpathref="android.antlibs" /> + <taskdef name="if" + classname="com.android.ant.IfElseTask" + classpathref="android.antlibs" /> + <!-- Properties --> <!-- Tells adb which device to target. You can change this from the command line @@ -172,8 +176,8 @@ <sequential> <apkbuilder outfolder="${out.absolute.dir}" - resourceFile="${resource.package.file.name}" - apkFilepath="@{output.filepath}" + resourcefile="${resource.package.file.name}" + apkfilepath="@{output.filepath}" signed="@{sign.package}" debug="${manifest.debuggable}" abifilter="${filter.abi}" @@ -318,8 +322,8 @@ assets="${asset.absolute.dir}" androidjar="${android.jar}" apkfolder="${out.absolute.dir}" - resourceFilename="${resource.package.file.name}" - resourceFilter="${aapt.resource.filter}"> + resourcefilename="${resource.package.file.name}" + resourcefilter="${aapt.resource.filter}"> <res path="${resource.absolute.dir}" /> <!-- <nocompress /> forces no compression on any files in assets or res/raw --> <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw --> @@ -363,12 +367,17 @@ </condition> </target> + <!-- Runs -release-check first, which sets release.sign, and then runs + only if release.sign is false. --> <target name="-release-nosign" depends="-release-check" unless="release.sign"> <echo>No key.store and key.alias properties found in build.properties.</echo> <echo>Please sign ${out.unsigned.file} manually</echo> <echo>and run zipalign from the Android SDK tools.</echo> </target> + <!-- This runs -package-release and -release-nosign first and then runs + only if release-sign is true (set in -release-check, + called by -release-no-sign)--> <target name="release" depends="-package-release, -release-nosign" if="release.sign" description="Builds the application. The generated apk file must be signed before it is published."> |
