aboutsummaryrefslogtreecommitdiffstats
path: root/anttasks/src
diff options
context:
space:
mode:
Diffstat (limited to 'anttasks/src')
-rw-r--r--anttasks/src/anttasks.properties1
-rw-r--r--anttasks/src/com/android/ant/GetTargetTask.java14
-rw-r--r--anttasks/src/com/android/ant/GetUiTargetTask.java153
3 files changed, 161 insertions, 7 deletions
diff --git a/anttasks/src/anttasks.properties b/anttasks/src/anttasks.properties
index 78b6513..458f355 100644
--- a/anttasks/src/anttasks.properties
+++ b/anttasks/src/anttasks.properties
@@ -1,6 +1,7 @@
checkenv: com.android.ant.CheckEnvTask
gettype: com.android.ant.GetTypeTask
gettarget: com.android.ant.GetTargetTask
+getuitarget: com.android.ant.GetUiTargetTask
getprojectpaths: com.android.ant.GetProjectPathsTask
getlibpath: com.android.ant.GetLibraryPathTask
dependency: com.android.ant.ComputeDependencyTask
diff --git a/anttasks/src/com/android/ant/GetTargetTask.java b/anttasks/src/com/android/ant/GetTargetTask.java
index ca068fd..ef65e02 100644
--- a/anttasks/src/com/android/ant/GetTargetTask.java
+++ b/anttasks/src/com/android/ant/GetTargetTask.java
@@ -163,7 +163,7 @@ public class GetTargetTask extends Task {
}
System.out.println( "API level: " + androidTarget.getVersion().getApiString());
- antProject.setProperty(mMinSdkVersionOut,
+ antProject.setProperty(mTargetApiOut,
Integer.toString(androidTarget.getVersion().getApiLevel()));
// always check the manifest minSdkVersion.
@@ -195,7 +195,7 @@ public class GetTargetTask extends Task {
visitedJars.add(jarPath);
element = bootclasspath.createPathElement();
- element.setPath(library.getJarPath());
+ element.setPath(jarPath);
}
}
}
@@ -247,9 +247,9 @@ public class GetTargetTask extends Task {
codeName, value));
}
- // set the API level to the previous API level (which is actually the value in
+ // set the minSdkVersion to the previous API level (which is actually the value in
// androidVersion.)
- antProject.setProperty(mTargetApiOut,
+ antProject.setProperty(mMinSdkVersionOut,
Integer.toString(androidVersion.getApiLevel()));
} else if (value.length() > 0) {
@@ -266,8 +266,8 @@ public class GetTargetTask extends Task {
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION));
}
- // set the target api to the value
- antProject.setProperty(mTargetApiOut, value);
+ // set the minSdkVersion to the value
+ antProject.setProperty(mMinSdkVersionOut, value);
int projectApiLevel = androidVersion.getApiLevel();
if (minSdkValue > androidVersion.getApiLevel()) {
@@ -282,7 +282,7 @@ public class GetTargetTask extends Task {
"WARNING: No minSdkVersion value set. Application will install on all Android versions.");
// set the target api to 1
- antProject.setProperty(mTargetApiOut, "1");
+ antProject.setProperty(mMinSdkVersionOut, "1");
}
} catch (XPathExpressionException e) {
diff --git a/anttasks/src/com/android/ant/GetUiTargetTask.java b/anttasks/src/com/android/ant/GetUiTargetTask.java
new file mode 100644
index 0000000..4756b49
--- /dev/null
+++ b/anttasks/src/com/android/ant/GetUiTargetTask.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2012 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.IAndroidTarget;
+import com.android.sdklib.IAndroidTarget.IOptionalLibrary;
+import com.android.sdklib.ISdkLog;
+import com.android.sdklib.SdkManager;
+import com.android.sdklib.internal.project.ProjectProperties;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.Path.PathElement;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+
+/**
+ * Task to resolve the target of the current Android uiautomator project.
+ *
+ * Out params:
+ * <code>compileClassPathOut</code>: The compile class path for the project.
+ */
+public class GetUiTargetTask extends Task {
+
+ private String mCompileClassPathOut;
+
+ public void setCompileClassPathOut(String compileClassPathOut) {
+ mCompileClassPathOut = compileClassPathOut;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ if (mCompileClassPathOut == null) {
+ throw new BuildException("Missing attribute compileClassPathOut");
+ }
+
+ Project antProject = getProject();
+
+ // get the SDK location
+ File sdkDir = TaskHelper.getSdkLocation(antProject);
+
+ // get the target property value
+ String targetHashString = antProject.getProperty(ProjectProperties.PROPERTY_TARGET);
+
+ if (targetHashString == null) {
+ throw new BuildException("Android Target is not set.");
+ }
+
+ // load up the sdk targets.
+ final ArrayList<String> messages = new ArrayList<String>();
+ SdkManager manager = SdkManager.createManager(sdkDir.getPath(), new ISdkLog() {
+ @Override
+ public void error(Throwable t, String errorFormat, Object... args) {
+ if (errorFormat != null) {
+ messages.add(String.format("Error: " + errorFormat, args));
+ }
+ if (t != null) {
+ messages.add("Error: " + t.getMessage());
+ }
+ }
+
+ @Override
+ public void printf(String msgFormat, Object... args) {
+ messages.add(String.format(msgFormat, args));
+ }
+
+ @Override
+ public void warning(String warningFormat, Object... args) {
+ messages.add(String.format("Warning: " + warningFormat, args));
+ }
+ });
+
+ if (manager == null) {
+ // since we failed to parse the SDK, lets display the parsing output.
+ for (String msg : messages) {
+ System.out.println(msg);
+ }
+ throw new BuildException("Failed to parse SDK content.");
+ }
+
+ // resolve it
+ IAndroidTarget androidTarget = manager.getTargetFromHashString(targetHashString);
+
+ if (androidTarget == null) {
+ throw new BuildException(String.format(
+ "Unable to resolve project target '%s'", targetHashString));
+ }
+
+ // display the project info
+ System.out.println( "Project Target: " + androidTarget.getName());
+ if (androidTarget.isPlatform() == false) {
+ System.out.println("Vendor: " + androidTarget.getVendor());
+ System.out.println("Platform Version: " + androidTarget.getVersionName());
+ }
+ System.out.println( "API level: " + androidTarget.getVersion().getApiString());
+
+ if (androidTarget.getVersion().getApiLevel() < 16) {
+ throw new BuildException("UI Automator requires API 16");
+ }
+
+ // sets up the properties to find android.jar/framework.aidl/target tools
+ String androidJar = androidTarget.getPath(IAndroidTarget.ANDROID_JAR);
+ String uiAutomatorJar = androidTarget.getPath(IAndroidTarget.UI_AUTOMATOR_JAR);
+
+ // sets up the boot classpath
+
+ // create the Path object
+ Path compileclasspath = new Path(antProject);
+
+ // create a PathElement for the framework jars
+ PathElement element = compileclasspath.createPathElement();
+ element.setPath(androidJar);
+
+ element = compileclasspath.createPathElement();
+ element.setPath(uiAutomatorJar);
+
+ // create PathElement for each optional library.
+ IOptionalLibrary[] libraries = androidTarget.getOptionalLibraries();
+ if (libraries != null) {
+ HashSet<String> visitedJars = new HashSet<String>();
+ for (IOptionalLibrary library : libraries) {
+ String jarPath = library.getJarPath();
+ if (visitedJars.contains(jarPath) == false) {
+ visitedJars.add(jarPath);
+
+ element = compileclasspath.createPathElement();
+ element.setPath(jarPath);
+ }
+ }
+ }
+
+ // sets the path in the project with a reference
+ antProject.addReference(mCompileClassPathOut, compileclasspath);
+ }
+}