diff options
Diffstat (limited to 'anttasks/src')
-rw-r--r-- | anttasks/src/anttasks.properties | 1 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/GetTargetTask.java | 14 | ||||
-rw-r--r-- | anttasks/src/com/android/ant/GetUiTargetTask.java | 153 |
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); + } +} |