Merge change I663d4cb7 into eclair
* changes: Update the project creation (from the command line):
This commit is contained in:
@@ -51,9 +51,6 @@ obj/framework.aidl platforms/${PLATFORM_NAME}/framework.aidl
|
|||||||
# sdk scripts
|
# sdk scripts
|
||||||
development/tools/scripts/AndroidManifest.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.template
|
development/tools/scripts/AndroidManifest.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.template
|
||||||
development/tools/scripts/AndroidManifest.tests.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.tests.template
|
development/tools/scripts/AndroidManifest.tests.template platforms/${PLATFORM_NAME}/templates/AndroidManifest.tests.template
|
||||||
development/tools/scripts/iml.template platforms/${PLATFORM_NAME}/templates/iml.template
|
|
||||||
development/tools/scripts/ipr.template platforms/${PLATFORM_NAME}/templates/ipr.template
|
|
||||||
development/tools/scripts/iws.template platforms/${PLATFORM_NAME}/templates/iws.template
|
|
||||||
development/tools/scripts/java_file.template platforms/${PLATFORM_NAME}/templates/java_file.template
|
development/tools/scripts/java_file.template platforms/${PLATFORM_NAME}/templates/java_file.template
|
||||||
development/tools/scripts/java_tests_file.template platforms/${PLATFORM_NAME}/templates/java_tests_file.template
|
development/tools/scripts/java_tests_file.template platforms/${PLATFORM_NAME}/templates/java_tests_file.template
|
||||||
development/tools/scripts/layout.template platforms/${PLATFORM_NAME}/templates/layout.template
|
development/tools/scripts/layout.template platforms/${PLATFORM_NAME}/templates/layout.template
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.SdkConstants;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import javax.xml.XMLConstants;
|
|
||||||
import javax.xml.namespace.NamespaceContext;
|
|
||||||
import javax.xml.xpath.XPath;
|
|
||||||
import javax.xml.xpath.XPathFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* XPath factory with automatic support for the android namespace.
|
|
||||||
*/
|
|
||||||
class AndroidXPathFactory {
|
|
||||||
public final static String DEFAULT_NS_PREFIX = "android"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
private final static XPathFactory sFactory = XPathFactory.newInstance();
|
|
||||||
|
|
||||||
/** Namespace context for Android resource XML files. */
|
|
||||||
private static class AndroidNamespaceContext implements NamespaceContext {
|
|
||||||
private String mAndroidPrefix;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct the context with the prefix associated with the android namespace.
|
|
||||||
* @param androidPrefix the Prefix
|
|
||||||
*/
|
|
||||||
public AndroidNamespaceContext(String androidPrefix) {
|
|
||||||
mAndroidPrefix = androidPrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getNamespaceURI(String prefix) {
|
|
||||||
if (prefix != null) {
|
|
||||||
if (prefix.equals(mAndroidPrefix)) {
|
|
||||||
return SdkConstants.NS_RESOURCES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return XMLConstants.NULL_NS_URI;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPrefix(String namespaceURI) {
|
|
||||||
// This isn't necessary for our use.
|
|
||||||
assert false;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Iterator<?> getPrefixes(String namespaceURI) {
|
|
||||||
// This isn't necessary for our use.
|
|
||||||
assert false;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new XPath object, specifying which prefix in the query is used for the
|
|
||||||
* android namespace.
|
|
||||||
* @param androidPrefix The namespace prefix.
|
|
||||||
*/
|
|
||||||
public static XPath newXPath(String androidPrefix) {
|
|
||||||
XPath xpath = sFactory.newXPath();
|
|
||||||
xpath.setNamespaceContext(new AndroidNamespaceContext(androidPrefix));
|
|
||||||
return xpath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new XPath object using the default prefix for the android namespace.
|
|
||||||
* @see #DEFAULT_NS_PREFIX
|
|
||||||
*/
|
|
||||||
public static XPath newXPath() {
|
|
||||||
return newXPath(DEFAULT_NS_PREFIX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,7 @@ import com.android.sdklib.SdkManager;
|
|||||||
import com.android.sdklib.IAndroidTarget.IOptionalLibrary;
|
import com.android.sdklib.IAndroidTarget.IOptionalLibrary;
|
||||||
import com.android.sdklib.internal.project.ProjectProperties;
|
import com.android.sdklib.internal.project.ProjectProperties;
|
||||||
import com.android.sdklib.xml.AndroidXPathFactory;
|
import com.android.sdklib.xml.AndroidXPathFactory;
|
||||||
import com.android.sdklib.xml.ManifestConstants;
|
import com.android.sdklib.xml.AndroidManifest;
|
||||||
|
|
||||||
import org.apache.tools.ant.BuildException;
|
import org.apache.tools.ant.BuildException;
|
||||||
import org.apache.tools.ant.Project;
|
import org.apache.tools.ant.Project;
|
||||||
@@ -264,10 +264,11 @@ public final class SetupTask extends ImportTask {
|
|||||||
|
|
||||||
XPath xPath = AndroidXPathFactory.newXPath();
|
XPath xPath = AndroidXPathFactory.newXPath();
|
||||||
|
|
||||||
String value = xPath.evaluate("/" + ManifestConstants.NODE_MANIFEST +"/" +
|
String value = xPath.evaluate(
|
||||||
ManifestConstants.NODE_USES_SDK + "/@" +
|
"/" + AndroidManifest.NODE_MANIFEST +
|
||||||
AndroidXPathFactory.DEFAULT_NS_PREFIX + ":" +
|
"/" + AndroidManifest.NODE_USES_SDK +
|
||||||
ManifestConstants.ATTRIBUTE_MIN_SDK_VERSION,
|
"/@" + AndroidXPathFactory.DEFAULT_NS_PREFIX + ":" +
|
||||||
|
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION,
|
||||||
new InputSource(new FileInputStream(manifest)));
|
new InputSource(new FileInputStream(manifest)));
|
||||||
|
|
||||||
if (androidVersion.isPreview()) {
|
if (androidVersion.isPreview()) {
|
||||||
@@ -290,19 +291,19 @@ public final class SetupTask extends ImportTask {
|
|||||||
// looks like it's not a number: error!
|
// looks like it's not a number: error!
|
||||||
throw new BuildException(String.format(
|
throw new BuildException(String.format(
|
||||||
"Attribute %1$s in AndroidManifest.xml must be an Integer!",
|
"Attribute %1$s in AndroidManifest.xml must be an Integer!",
|
||||||
ManifestConstants.ATTRIBUTE_MIN_SDK_VERSION));
|
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION));
|
||||||
}
|
}
|
||||||
|
|
||||||
int projectApiLevel = androidVersion.getApiLevel();
|
int projectApiLevel = androidVersion.getApiLevel();
|
||||||
if (minSdkValue < projectApiLevel) {
|
if (minSdkValue < projectApiLevel) {
|
||||||
System.out.println(String.format(
|
System.out.println(String.format(
|
||||||
"WARNING: Attribute %1$s in AndroidManifest.xml (%2$d) is lower than the project target API level (%3$d)",
|
"WARNING: Attribute %1$s in AndroidManifest.xml (%2$d) is lower than the project target API level (%3$d)",
|
||||||
ManifestConstants.ATTRIBUTE_MIN_SDK_VERSION,
|
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION,
|
||||||
minSdkValue, projectApiLevel));
|
minSdkValue, projectApiLevel));
|
||||||
} else if (minSdkValue > androidVersion.getApiLevel()) {
|
} else if (minSdkValue > androidVersion.getApiLevel()) {
|
||||||
System.out.println(String.format(
|
System.out.println(String.format(
|
||||||
"WARNING: Attribute %1$s in AndroidManifest.xml (%2$d) is higher than the project target API level (%3$d)",
|
"WARNING: Attribute %1$s in AndroidManifest.xml (%2$d) is higher than the project target API level (%3$d)",
|
||||||
ManifestConstants.ATTRIBUTE_MIN_SDK_VERSION,
|
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION,
|
||||||
minSdkValue, projectApiLevel));
|
minSdkValue, projectApiLevel));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.ant;
|
package com.android.ant;
|
||||||
|
|
||||||
|
import com.android.sdklib.xml.AndroidXPathFactory;
|
||||||
|
|
||||||
import org.apache.tools.ant.BuildException;
|
import org.apache.tools.ant.BuildException;
|
||||||
import org.apache.tools.ant.Task;
|
import org.apache.tools.ant.Task;
|
||||||
import org.apache.tools.ant.types.Path;
|
import org.apache.tools.ant.types.Path;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import com.android.ide.eclipse.adt.AdtPlugin;
|
|||||||
import com.android.ide.eclipse.adt.AndroidConstants;
|
import com.android.ide.eclipse.adt.AndroidConstants;
|
||||||
import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler.XmlErrorListener;
|
import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler.XmlErrorListener;
|
||||||
import com.android.sdklib.SdkConstants;
|
import com.android.sdklib.SdkConstants;
|
||||||
import com.android.sdklib.xml.ManifestConstants;
|
import com.android.sdklib.xml.AndroidManifest;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
@@ -285,55 +285,55 @@ public class AndroidManifestParser {
|
|||||||
String value;
|
String value;
|
||||||
switch (mValidLevel) {
|
switch (mValidLevel) {
|
||||||
case LEVEL_MANIFEST:
|
case LEVEL_MANIFEST:
|
||||||
if (ManifestConstants.NODE_MANIFEST.equals(localName)) {
|
if (AndroidManifest.NODE_MANIFEST.equals(localName)) {
|
||||||
// lets get the package name.
|
// lets get the package name.
|
||||||
mPackage = getAttributeValue(attributes,
|
mPackage = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_PACKAGE,
|
AndroidManifest.ATTRIBUTE_PACKAGE,
|
||||||
false /* hasNamespace */);
|
false /* hasNamespace */);
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LEVEL_APPLICATION:
|
case LEVEL_APPLICATION:
|
||||||
if (ManifestConstants.NODE_APPLICATION.equals(localName)) {
|
if (AndroidManifest.NODE_APPLICATION.equals(localName)) {
|
||||||
value = getAttributeValue(attributes,
|
value = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_PROCESS,
|
AndroidManifest.ATTRIBUTE_PROCESS,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
addProcessName(value);
|
addProcessName(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
value = getAttributeValue(attributes,
|
value = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_DEBUGGABLE,
|
AndroidManifest.ATTRIBUTE_DEBUGGABLE,
|
||||||
true /* hasNamespace*/);
|
true /* hasNamespace*/);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
mDebuggable = Boolean.parseBoolean(value);
|
mDebuggable = Boolean.parseBoolean(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
} else if (ManifestConstants.NODE_USES_SDK.equals(localName)) {
|
} else if (AndroidManifest.NODE_USES_SDK.equals(localName)) {
|
||||||
mApiLevelRequirement = getAttributeValue(attributes,
|
mApiLevelRequirement = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_MIN_SDK_VERSION,
|
AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
} else if (ManifestConstants.NODE_INSTRUMENTATION.equals(localName)) {
|
} else if (AndroidManifest.NODE_INSTRUMENTATION.equals(localName)) {
|
||||||
processInstrumentationNode(attributes);
|
processInstrumentationNode(attributes);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LEVEL_ACTIVITY:
|
case LEVEL_ACTIVITY:
|
||||||
if (ManifestConstants.NODE_ACTIVITY.equals(localName)) {
|
if (AndroidManifest.NODE_ACTIVITY.equals(localName)) {
|
||||||
processActivityNode(attributes);
|
processActivityNode(attributes);
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
} else if (ManifestConstants.NODE_SERVICE.equals(localName)) {
|
} else if (AndroidManifest.NODE_SERVICE.equals(localName)) {
|
||||||
processNode(attributes, AndroidConstants.CLASS_SERVICE);
|
processNode(attributes, AndroidConstants.CLASS_SERVICE);
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
} else if (ManifestConstants.NODE_RECEIVER.equals(localName)) {
|
} else if (AndroidManifest.NODE_RECEIVER.equals(localName)) {
|
||||||
processNode(attributes, AndroidConstants.CLASS_BROADCASTRECEIVER);
|
processNode(attributes, AndroidConstants.CLASS_BROADCASTRECEIVER);
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
} else if (ManifestConstants.NODE_PROVIDER.equals(localName)) {
|
} else if (AndroidManifest.NODE_PROVIDER.equals(localName)) {
|
||||||
processNode(attributes, AndroidConstants.CLASS_CONTENTPROVIDER);
|
processNode(attributes, AndroidConstants.CLASS_CONTENTPROVIDER);
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
} else if (ManifestConstants.NODE_USES_LIBRARY.equals(localName)) {
|
} else if (AndroidManifest.NODE_USES_LIBRARY.equals(localName)) {
|
||||||
value = getAttributeValue(attributes,
|
value = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_NAME,
|
AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
mLibraries.add(value);
|
mLibraries.add(value);
|
||||||
@@ -343,26 +343,26 @@ public class AndroidManifestParser {
|
|||||||
case LEVEL_INTENT_FILTER:
|
case LEVEL_INTENT_FILTER:
|
||||||
// only process this level if we are in an activity
|
// only process this level if we are in an activity
|
||||||
if (mCurrentActivity != null &&
|
if (mCurrentActivity != null &&
|
||||||
ManifestConstants.NODE_INTENT.equals(localName)) {
|
AndroidManifest.NODE_INTENT.equals(localName)) {
|
||||||
mCurrentActivity.resetIntentFilter();
|
mCurrentActivity.resetIntentFilter();
|
||||||
mValidLevel++;
|
mValidLevel++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LEVEL_CATEGORY:
|
case LEVEL_CATEGORY:
|
||||||
if (mCurrentActivity != null) {
|
if (mCurrentActivity != null) {
|
||||||
if (ManifestConstants.NODE_ACTION.equals(localName)) {
|
if (AndroidManifest.NODE_ACTION.equals(localName)) {
|
||||||
// get the name attribute
|
// get the name attribute
|
||||||
String action = getAttributeValue(attributes,
|
String action = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_NAME,
|
AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
mCurrentActivity.setHasAction(true);
|
mCurrentActivity.setHasAction(true);
|
||||||
mCurrentActivity.setHasMainAction(
|
mCurrentActivity.setHasMainAction(
|
||||||
ACTION_MAIN.equals(action));
|
ACTION_MAIN.equals(action));
|
||||||
}
|
}
|
||||||
} else if (ManifestConstants.NODE_CATEGORY.equals(localName)) {
|
} else if (AndroidManifest.NODE_CATEGORY.equals(localName)) {
|
||||||
String category = getAttributeValue(attributes,
|
String category = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_NAME,
|
AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (CATEGORY_LAUNCHER.equals(category)) {
|
if (CATEGORY_LAUNCHER.equals(category)) {
|
||||||
mCurrentActivity.setHasLauncherCategory(true);
|
mCurrentActivity.setHasLauncherCategory(true);
|
||||||
@@ -462,14 +462,14 @@ public class AndroidManifestParser {
|
|||||||
*/
|
*/
|
||||||
private void processActivityNode(Attributes attributes) {
|
private void processActivityNode(Attributes attributes) {
|
||||||
// lets get the activity name, and add it to the list
|
// lets get the activity name, and add it to the list
|
||||||
String activityName = getAttributeValue(attributes, ManifestConstants.ATTRIBUTE_NAME,
|
String activityName = getAttributeValue(attributes, AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (activityName != null) {
|
if (activityName != null) {
|
||||||
activityName = combinePackageAndClassName(mPackage, activityName);
|
activityName = AndroidManifest.combinePackageAndClassName(mPackage, activityName);
|
||||||
|
|
||||||
// get the exported flag.
|
// get the exported flag.
|
||||||
String exportedStr = getAttributeValue(attributes,
|
String exportedStr = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_EXPORTED, true);
|
AndroidManifest.ATTRIBUTE_EXPORTED, true);
|
||||||
boolean exported = exportedStr == null ||
|
boolean exported = exportedStr == null ||
|
||||||
exportedStr.toLowerCase().equals("true"); // $NON-NLS-1$
|
exportedStr.toLowerCase().equals("true"); // $NON-NLS-1$
|
||||||
mCurrentActivity = new Activity(activityName, exported);
|
mCurrentActivity = new Activity(activityName, exported);
|
||||||
@@ -485,7 +485,7 @@ public class AndroidManifestParser {
|
|||||||
mCurrentActivity = null;
|
mCurrentActivity = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String processName = getAttributeValue(attributes, ManifestConstants.ATTRIBUTE_PROCESS,
|
String processName = getAttributeValue(attributes, AndroidManifest.ATTRIBUTE_PROCESS,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (processName != null) {
|
if (processName != null) {
|
||||||
addProcessName(processName);
|
addProcessName(processName);
|
||||||
@@ -500,17 +500,17 @@ public class AndroidManifestParser {
|
|||||||
*/
|
*/
|
||||||
private void processNode(Attributes attributes, String superClassName) {
|
private void processNode(Attributes attributes, String superClassName) {
|
||||||
// lets get the class name, and check it if required.
|
// lets get the class name, and check it if required.
|
||||||
String serviceName = getAttributeValue(attributes, ManifestConstants.ATTRIBUTE_NAME,
|
String serviceName = getAttributeValue(attributes, AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (serviceName != null) {
|
if (serviceName != null) {
|
||||||
serviceName = combinePackageAndClassName(mPackage, serviceName);
|
serviceName = AndroidManifest.combinePackageAndClassName(mPackage, serviceName);
|
||||||
|
|
||||||
if (mMarkErrors) {
|
if (mMarkErrors) {
|
||||||
checkClass(serviceName, superClassName, false /* testVisibility */);
|
checkClass(serviceName, superClassName, false /* testVisibility */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String processName = getAttributeValue(attributes, ManifestConstants.ATTRIBUTE_PROCESS,
|
String processName = getAttributeValue(attributes, AndroidManifest.ATTRIBUTE_PROCESS,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (processName != null) {
|
if (processName != null) {
|
||||||
addProcessName(processName);
|
addProcessName(processName);
|
||||||
@@ -525,12 +525,13 @@ public class AndroidManifestParser {
|
|||||||
private void processInstrumentationNode(Attributes attributes) {
|
private void processInstrumentationNode(Attributes attributes) {
|
||||||
// lets get the class name, and check it if required.
|
// lets get the class name, and check it if required.
|
||||||
String instrumentationName = getAttributeValue(attributes,
|
String instrumentationName = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_NAME,
|
AndroidManifest.ATTRIBUTE_NAME,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
if (instrumentationName != null) {
|
if (instrumentationName != null) {
|
||||||
String instrClassName = combinePackageAndClassName(mPackage, instrumentationName);
|
String instrClassName = AndroidManifest.combinePackageAndClassName(mPackage,
|
||||||
|
instrumentationName);
|
||||||
String targetPackage = getAttributeValue(attributes,
|
String targetPackage = getAttributeValue(attributes,
|
||||||
ManifestConstants.ATTRIBUTE_TARGET_PACKAGE,
|
AndroidManifest.ATTRIBUTE_TARGET_PACKAGE,
|
||||||
true /* hasNamespace */);
|
true /* hasNamespace */);
|
||||||
mInstrumentations.add(new Instrumentation(instrClassName, targetPackage));
|
mInstrumentations.add(new Instrumentation(instrClassName, targetPackage));
|
||||||
if (mMarkErrors) {
|
if (mMarkErrors) {
|
||||||
@@ -953,39 +954,6 @@ public class AndroidManifestParser {
|
|||||||
return (IFile) r;
|
return (IFile) r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Combines a java package, with a class value from the manifest to make a fully qualified
|
|
||||||
* class name
|
|
||||||
* @param javaPackage the java package from the manifest.
|
|
||||||
* @param className the class name from the manifest.
|
|
||||||
* @return the fully qualified class name.
|
|
||||||
*/
|
|
||||||
public static String combinePackageAndClassName(String javaPackage, String className) {
|
|
||||||
if (className == null || className.length() == 0) {
|
|
||||||
return javaPackage;
|
|
||||||
}
|
|
||||||
if (javaPackage == null || javaPackage.length() == 0) {
|
|
||||||
return className;
|
|
||||||
}
|
|
||||||
|
|
||||||
// the class name can be a subpackage (starts with a '.'
|
|
||||||
// char), a simple class name (no dot), or a full java package
|
|
||||||
boolean startWithDot = (className.charAt(0) == '.');
|
|
||||||
boolean hasDot = (className.indexOf('.') != -1);
|
|
||||||
if (startWithDot || hasDot == false) {
|
|
||||||
|
|
||||||
// add the concatenation of the package and class name
|
|
||||||
if (startWithDot) {
|
|
||||||
return javaPackage + className;
|
|
||||||
} else {
|
|
||||||
return javaPackage + '.' + className;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// just add the class as it should be a fully qualified java name.
|
|
||||||
return className;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a fully qualified activity name (e.g. com.foo.test.MyClass) and given a project
|
* Given a fully qualified activity name (e.g. com.foo.test.MyClass) and given a project
|
||||||
* package base name (e.g. com.foo), returns the relative activity name that would be used
|
* package base name (e.g. com.foo), returns the relative activity name that would be used
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
android:versionCode="1"
|
android:versionCode="1"
|
||||||
android:versionName="1.0">
|
android:versionName="1.0">
|
||||||
<application android:label="@string/app_name">
|
<application android:label="@string/app_name">
|
||||||
<activity android:name=".ACTIVITY_NAME"
|
<activity android:name="ACTIVITY_ENTRY_NAME"
|
||||||
android:label="@string/app_name">
|
android:label="@string/app_name">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|||||||
@@ -17,5 +17,5 @@
|
|||||||
-->
|
-->
|
||||||
<instrumentation android:name="android.test.InstrumentationTestRunner"
|
<instrumentation android:name="android.test.InstrumentationTestRunner"
|
||||||
android:targetPackage="PACKAGE"
|
android:targetPackage="PACKAGE"
|
||||||
android:label="Tests for ACTIVITY_NAME"/>
|
android:label="Tests for PACKAGE"/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module version="4" relativePaths="true" type="JAVA_MODULE">
|
|
||||||
<component name="ModuleRootManager" />
|
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
||||||
<exclude-output />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="android" level="project" />
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntryProperties />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
@@ -1,232 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4" relativePaths="false">
|
|
||||||
<component name="AntConfiguration">
|
|
||||||
<defaultAnt bundledAnt="true" />
|
|
||||||
<buildFile url="file://$PROJECT_DIR$/build.xml">
|
|
||||||
<additionalClassPath />
|
|
||||||
<antReference projectDefault="true" />
|
|
||||||
<customJdkName value="" />
|
|
||||||
<maximumHeapSize value="128" />
|
|
||||||
<properties />
|
|
||||||
</buildFile>
|
|
||||||
</component>
|
|
||||||
<component name="BuildJarProjectSettings">
|
|
||||||
<option name="BUILD_JARS_ON_MAKE" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="CodeStyleProjectProfileManger">
|
|
||||||
<option name="PROJECT_PROFILE" />
|
|
||||||
<option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="CodeStyleSettingsManager">
|
|
||||||
<option name="PER_PROJECT_SETTINGS" />
|
|
||||||
<option name="USE_PER_PROJECT_SETTINGS" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="CompilerConfiguration">
|
|
||||||
<option name="DEFAULT_COMPILER" value="Javac" />
|
|
||||||
<option name="DEPLOY_AFTER_MAKE" value="0" />
|
|
||||||
<resourceExtensions>
|
|
||||||
<entry name=".+\.(properties|xml|html|dtd|tld)" />
|
|
||||||
<entry name=".+\.(gif|png|jpeg|jpg)" />
|
|
||||||
</resourceExtensions>
|
|
||||||
<wildcardResourcePatterns>
|
|
||||||
<entry name="?*.properties" />
|
|
||||||
<entry name="?*.xml" />
|
|
||||||
<entry name="?*.gif" />
|
|
||||||
<entry name="?*.png" />
|
|
||||||
<entry name="?*.jpeg" />
|
|
||||||
<entry name="?*.jpg" />
|
|
||||||
<entry name="?*.html" />
|
|
||||||
<entry name="?*.dtd" />
|
|
||||||
<entry name="?*.tld" />
|
|
||||||
</wildcardResourcePatterns>
|
|
||||||
</component>
|
|
||||||
<component name="DataSourceManagerImpl" />
|
|
||||||
<component name="DependenciesAnalyzeManager">
|
|
||||||
<option name="myForwardDirection" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="DependencyValidationManager" />
|
|
||||||
<component name="EclipseCompilerSettings">
|
|
||||||
<option name="DEBUGGING_INFO" value="true" />
|
|
||||||
<option name="GENERATE_NO_WARNINGS" value="true" />
|
|
||||||
<option name="DEPRECATION" value="false" />
|
|
||||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
|
||||||
<option name="MAXIMUM_HEAP_SIZE" value="128" />
|
|
||||||
</component>
|
|
||||||
<component name="EclipseEmbeddedCompilerSettings">
|
|
||||||
<option name="DEBUGGING_INFO" value="true" />
|
|
||||||
<option name="GENERATE_NO_WARNINGS" value="true" />
|
|
||||||
<option name="DEPRECATION" value="false" />
|
|
||||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
|
||||||
<option name="MAXIMUM_HEAP_SIZE" value="128" />
|
|
||||||
</component>
|
|
||||||
<component name="EntryPointsManager">
|
|
||||||
<entry_points />
|
|
||||||
</component>
|
|
||||||
<component name="ExportToHTMLSettings">
|
|
||||||
<option name="PRINT_LINE_NUMBERS" value="false" />
|
|
||||||
<option name="OPEN_IN_BROWSER" value="false" />
|
|
||||||
<option name="OUTPUT_DIRECTORY" />
|
|
||||||
</component>
|
|
||||||
<component name="GUI Designer component loader factory" />
|
|
||||||
<component name="IdProvider" IDEtalkID="F6EC4D80E2C03FEF19EDD201903A6DFE" />
|
|
||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<option name="PROJECT_PROFILE" value="Project Default" />
|
|
||||||
<option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
|
|
||||||
<scopes />
|
|
||||||
<profiles>
|
|
||||||
<profile version="1.0" is_locked="false">
|
|
||||||
<option name="myName" value="Project Default" />
|
|
||||||
<option name="myLocal" value="false" />
|
|
||||||
<used_levels>
|
|
||||||
<error>
|
|
||||||
<option name="myName" value="ERROR" />
|
|
||||||
<option name="myVal" value="400" />
|
|
||||||
</error>
|
|
||||||
<warning>
|
|
||||||
<option name="myName" value="WARNING" />
|
|
||||||
<option name="myVal" value="300" />
|
|
||||||
</warning>
|
|
||||||
<information>
|
|
||||||
<option name="myName" value="INFO" />
|
|
||||||
<option name="myVal" value="200" />
|
|
||||||
</information>
|
|
||||||
<server>
|
|
||||||
<option name="myName" value="SERVER PROBLEM" />
|
|
||||||
<option name="myVal" value="100" />
|
|
||||||
</server>
|
|
||||||
</used_levels>
|
|
||||||
<inspection_tool class="ClassReferencesSubclass" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="MissingOverrideAnnotation" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="Finalize" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="UnusedImport" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="StaticInheritance" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="RedundantMethodOverride" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="AbstractMethodCallInConstructor" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="RawUseOfParameterizedType" level="WARNING" enabled="true">
|
|
||||||
<option name="ignoreObjectConstruction" value="true" />
|
|
||||||
<option name="ignoreTypeCasts" value="false" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="SystemGC" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="ConstantNamingConvention" level="WARNING" enabled="true">
|
|
||||||
<option name="m_regex" value="[A-Z_\d]*" />
|
|
||||||
<option name="m_minLength" value="5" />
|
|
||||||
<option name="m_maxLength" value="32" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="EnumeratedConstantNamingConvention" level="WARNING" enabled="true">
|
|
||||||
<option name="m_regex" value="[A-Z][A-Za-z\d]*" />
|
|
||||||
<option name="m_minLength" value="5" />
|
|
||||||
<option name="m_maxLength" value="32" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="DivideByZero" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="CloneCallsConstructors" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="CloneDeclaresCloneNotSupported" level="WARNING" enabled="false" />
|
|
||||||
<inspection_tool class="CloneInNonCloneableClass" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="UtilityClassWithoutPrivateConstructor" level="WARNING" enabled="true">
|
|
||||||
<option name="ignoreClassesWithOnlyMain" value="false" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="UtilityClassWithPublicConstructor" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="ConditionalExpressionWithIdenticalBranches" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="CanBeFinal" level="WARNING" enabled="false">
|
|
||||||
<option name="REPORT_CLASSES" value="false" />
|
|
||||||
<option name="REPORT_METHODS" value="false" />
|
|
||||||
<option name="REPORT_FIELDS" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="ThisEscapedInConstructor" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="NonThreadSafeLazyInitialization" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="FieldMayBeStatic" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="InnerClassMayBeStatic" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="MethodMayBeStatic" level="WARNING" enabled="true">
|
|
||||||
<option name="m_onlyPrivateOrFinal" value="false" />
|
|
||||||
<option name="m_ignoreEmptyMethods" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="ComponentRegistrationProblems" level="ERROR" enabled="false">
|
|
||||||
<option name="CHECK_PLUGIN_XML" value="true" />
|
|
||||||
<option name="CHECK_JAVA_CODE" value="true" />
|
|
||||||
<option name="CHECK_ACTIONS" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="ComponentNotRegistered" level="WARNING" enabled="false">
|
|
||||||
<option name="CHECK_ACTIONS" value="true" />
|
|
||||||
<option name="IGNORE_NON_PUBLIC" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="BusyWait" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="UnconditionalWait" level="WARNING" enabled="true" />
|
|
||||||
<inspection_tool class="WaitNotInLoop" level="WARNING" enabled="true" />
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
</component>
|
|
||||||
<component name="JavacSettings">
|
|
||||||
<option name="DEBUGGING_INFO" value="true" />
|
|
||||||
<option name="GENERATE_NO_WARNINGS" value="false" />
|
|
||||||
<option name="DEPRECATION" value="true" />
|
|
||||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
|
||||||
<option name="MAXIMUM_HEAP_SIZE" value="128" />
|
|
||||||
</component>
|
|
||||||
<component name="JavadocGenerationManager">
|
|
||||||
<option name="OUTPUT_DIRECTORY" />
|
|
||||||
<option name="OPTION_SCOPE" value="protected" />
|
|
||||||
<option name="OPTION_HIERARCHY" value="true" />
|
|
||||||
<option name="OPTION_NAVIGATOR" value="true" />
|
|
||||||
<option name="OPTION_INDEX" value="true" />
|
|
||||||
<option name="OPTION_SEPARATE_INDEX" value="true" />
|
|
||||||
<option name="OPTION_DOCUMENT_TAG_USE" value="false" />
|
|
||||||
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
|
|
||||||
<option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
|
|
||||||
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
|
|
||||||
<option name="OPTION_DEPRECATED_LIST" value="true" />
|
|
||||||
<option name="OTHER_OPTIONS" value="" />
|
|
||||||
<option name="HEAP_SIZE" />
|
|
||||||
<option name="LOCALE" />
|
|
||||||
<option name="OPEN_IN_BROWSER" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="JikesSettings">
|
|
||||||
<option name="JIKES_PATH" value="" />
|
|
||||||
<option name="DEBUGGING_INFO" value="true" />
|
|
||||||
<option name="DEPRECATION" value="true" />
|
|
||||||
<option name="GENERATE_NO_WARNINGS" value="false" />
|
|
||||||
<option name="IS_EMACS_ERRORS_MODE" value="true" />
|
|
||||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
|
||||||
</component>
|
|
||||||
<component name="LogConsolePreferences">
|
|
||||||
<option name="FILTER_ERRORS" value="false" />
|
|
||||||
<option name="FILTER_WARNINGS" value="false" />
|
|
||||||
<option name="FILTER_INFO" value="true" />
|
|
||||||
<option name="CUSTOM_FILTER" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/ACTIVITY_NAME.iml" filepath="$PROJECT_DIR$/ACTIVITY_NAME.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" project-jdk-type="JavaSDK">
|
|
||||||
<output url="file://$PROJECT_DIR$/bin" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRunConfigurationManager" />
|
|
||||||
<component name="RmicSettings">
|
|
||||||
<option name="IS_EANABLED" value="false" />
|
|
||||||
<option name="DEBUGGING_INFO" value="true" />
|
|
||||||
<option name="GENERATE_NO_WARNINGS" value="false" />
|
|
||||||
<option name="GENERATE_IIOP_STUBS" value="false" />
|
|
||||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
|
||||||
</component>
|
|
||||||
<component name="StarteamVcsAdapter" />
|
|
||||||
<component name="XSLT-Support.FileAssociationsManager" />
|
|
||||||
<component name="com.intellij.jsf.UserDefinedFacesConfigs">
|
|
||||||
<option name="USER_DEFINED_CONFIGS">
|
|
||||||
<value>
|
|
||||||
<list size="0" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="libraryTable">
|
|
||||||
<library name="android">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://ANDROID_SDK_FOLDER/android.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="file://ANDROID_SDK_FOLDER/docs/reference" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</component>
|
|
||||||
<UsedPathMacros />
|
|
||||||
</project>
|
|
||||||
@@ -1,470 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4" relativePaths="false">
|
|
||||||
<component name="AntConfiguration">
|
|
||||||
<defaultAnt bundledAnt="true" />
|
|
||||||
<buildFile url="file://$PROJECT_DIR$/build.xml">
|
|
||||||
<additionalClassPath />
|
|
||||||
<antReference projectDefault="true" />
|
|
||||||
<customJdkName value="" />
|
|
||||||
<maximumHeapSize value="128" />
|
|
||||||
<properties />
|
|
||||||
</buildFile>
|
|
||||||
</component>
|
|
||||||
<component name="BookmarkManager" />
|
|
||||||
<component name="ChangeBrowserSettings">
|
|
||||||
<option name="MAIN_SPLITTER_PROPORTION" value="0.3" />
|
|
||||||
<option name="MESSAGES_SPLITTER_PROPORTION" value="0.8" />
|
|
||||||
<option name="USE_DATE_BEFORE_FILTER" value="false" />
|
|
||||||
<option name="USE_DATE_AFTER_FILTER" value="false" />
|
|
||||||
<option name="USE_CHANGE_BEFORE_FILTER" value="false" />
|
|
||||||
<option name="USE_CHANGE_AFTER_FILTER" value="false" />
|
|
||||||
<option name="DATE_BEFORE" value="" />
|
|
||||||
<option name="DATE_AFTER" value="" />
|
|
||||||
<option name="CHANGE_BEFORE" value="" />
|
|
||||||
<option name="CHANGE_AFTER" value="" />
|
|
||||||
<option name="USE_USER_FILTER" value="false" />
|
|
||||||
<option name="USER" value="" />
|
|
||||||
</component>
|
|
||||||
<component name="ChangeListManager">
|
|
||||||
<list default="true" name="Default" comment="" />
|
|
||||||
</component>
|
|
||||||
<component name="ChangeListSynchronizer" />
|
|
||||||
<component name="ChangesViewManager" flattened_view="true" />
|
|
||||||
<component name="CheckinPanelState" />
|
|
||||||
<component name="Commander">
|
|
||||||
<leftPanel />
|
|
||||||
<rightPanel />
|
|
||||||
<splitter proportion="0.5" />
|
|
||||||
</component>
|
|
||||||
<component name="CompilerWorkspaceConfiguration">
|
|
||||||
<option name="COMPILE_IN_BACKGROUND" value="false" />
|
|
||||||
<option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true" />
|
|
||||||
<option name="CLOSE_MESSAGE_VIEW_IF_SUCCESS" value="true" />
|
|
||||||
<option name="COMPILE_DEPENDENT_FILES" value="false" />
|
|
||||||
<option name="CLEAR_OUTPUT_DIRECTORY" value="false" />
|
|
||||||
<option name="ASSERT_NOT_NULL" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="CoverageDataManager" />
|
|
||||||
<component name="Cvs2Configuration">
|
|
||||||
<option name="PRUNE_EMPTY_DIRECTORIES" value="true" />
|
|
||||||
<option name="MERGING_MODE" value="0" />
|
|
||||||
<option name="MERGE_WITH_BRANCH1_NAME" value="HEAD" />
|
|
||||||
<option name="MERGE_WITH_BRANCH2_NAME" value="HEAD" />
|
|
||||||
<option name="RESET_STICKY" value="false" />
|
|
||||||
<option name="CREATE_NEW_DIRECTORIES" value="true" />
|
|
||||||
<option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv" />
|
|
||||||
<option name="PROCESS_UNKNOWN_FILES" value="false" />
|
|
||||||
<option name="PROCESS_DELETED_FILES" value="false" />
|
|
||||||
<option name="PROCESS_IGNORED_FILES" value="false" />
|
|
||||||
<option name="RESERVED_EDIT" value="false" />
|
|
||||||
<option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
|
|
||||||
<value>
|
|
||||||
<option name="BRANCH" value="" />
|
|
||||||
<option name="DATE" value="" />
|
|
||||||
<option name="USE_BRANCH" value="false" />
|
|
||||||
<option name="USE_DATE" value="false" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="UPDATE_DATE_OR_REVISION_SETTINGS">
|
|
||||||
<value>
|
|
||||||
<option name="BRANCH" value="" />
|
|
||||||
<option name="DATE" value="" />
|
|
||||||
<option name="USE_BRANCH" value="false" />
|
|
||||||
<option name="USE_DATE" value="false" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="SHOW_CHANGES_REVISION_SETTINGS">
|
|
||||||
<value>
|
|
||||||
<option name="BRANCH" value="" />
|
|
||||||
<option name="DATE" value="" />
|
|
||||||
<option name="USE_BRANCH" value="false" />
|
|
||||||
<option name="USE_DATE" value="false" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="SHOW_OUTPUT" value="false" />
|
|
||||||
<option name="ADD_WATCH_INDEX" value="0" />
|
|
||||||
<option name="REMOVE_WATCH_INDEX" value="0" />
|
|
||||||
<option name="UPDATE_KEYWORD_SUBSTITUTION" />
|
|
||||||
<option name="MAKE_NEW_FILES_READONLY" value="false" />
|
|
||||||
<option name="SHOW_CORRUPTED_PROJECT_FILES" value="0" />
|
|
||||||
<option name="TAG_AFTER_PROJECT_COMMIT" value="false" />
|
|
||||||
<option name="OVERRIDE_EXISTING_TAG_FOR_PROJECT" value="true" />
|
|
||||||
<option name="TAG_AFTER_PROJECT_COMMIT_NAME" value="" />
|
|
||||||
<option name="CLEAN_COPY" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="DaemonCodeAnalyzer">
|
|
||||||
<disable_hints />
|
|
||||||
</component>
|
|
||||||
<component name="DebuggerManager">
|
|
||||||
<breakpoint_any>
|
|
||||||
<breakpoint>
|
|
||||||
<option name="NOTIFY_CAUGHT" value="true" />
|
|
||||||
<option name="NOTIFY_UNCAUGHT" value="true" />
|
|
||||||
<option name="ENABLED" value="false" />
|
|
||||||
<option name="SUSPEND_POLICY" value="SuspendAll" />
|
|
||||||
<option name="LOG_ENABLED" value="false" />
|
|
||||||
<option name="LOG_EXPRESSION_ENABLED" value="false" />
|
|
||||||
<option name="COUNT_FILTER_ENABLED" value="false" />
|
|
||||||
<option name="COUNT_FILTER" value="0" />
|
|
||||||
<option name="CONDITION_ENABLED" value="false" />
|
|
||||||
<option name="CLASS_FILTERS_ENABLED" value="false" />
|
|
||||||
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
|
|
||||||
<option name="CONDITION" value="" />
|
|
||||||
<option name="LOG_MESSAGE" value="" />
|
|
||||||
</breakpoint>
|
|
||||||
<breakpoint>
|
|
||||||
<option name="NOTIFY_CAUGHT" value="true" />
|
|
||||||
<option name="NOTIFY_UNCAUGHT" value="true" />
|
|
||||||
<option name="ENABLED" value="false" />
|
|
||||||
<option name="SUSPEND_POLICY" value="SuspendAll" />
|
|
||||||
<option name="LOG_ENABLED" value="false" />
|
|
||||||
<option name="LOG_EXPRESSION_ENABLED" value="false" />
|
|
||||||
<option name="COUNT_FILTER_ENABLED" value="false" />
|
|
||||||
<option name="COUNT_FILTER" value="0" />
|
|
||||||
<option name="CONDITION_ENABLED" value="false" />
|
|
||||||
<option name="CLASS_FILTERS_ENABLED" value="false" />
|
|
||||||
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
|
|
||||||
<option name="CONDITION" value="" />
|
|
||||||
<option name="LOG_MESSAGE" value="" />
|
|
||||||
</breakpoint>
|
|
||||||
</breakpoint_any>
|
|
||||||
<breakpoint_rules />
|
|
||||||
<ui_properties />
|
|
||||||
</component>
|
|
||||||
<component name="ErrorTreeViewConfiguration">
|
|
||||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
|
|
||||||
<option name="HIDE_WARNINGS" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="FavoritesManager">
|
|
||||||
<favorites_list name="LunarLander" />
|
|
||||||
</component>
|
|
||||||
<component name="FavoritesProjectViewPane" />
|
|
||||||
<component name="FileEditorManager">
|
|
||||||
<leaf>
|
|
||||||
<file leaf-file-name="ACTIVITY_NAME.java" pinned="false" current="true" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/src/PACKAGE_PATH/ACTIVITY_NAME.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.08211144">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
|
||||||
</component>
|
|
||||||
<component name="FindManager">
|
|
||||||
<FindUsagesManager>
|
|
||||||
<setting name="OPEN_NEW_TAB" value="false" />
|
|
||||||
</FindUsagesManager>
|
|
||||||
</component>
|
|
||||||
<component name="HierarchyBrowserManager">
|
|
||||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
|
|
||||||
<option name="SORT_ALPHABETICALLY" value="false" />
|
|
||||||
<option name="HIDE_CLASSES_WHERE_METHOD_NOT_IMPLEMENTED" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="InspectionManager">
|
|
||||||
<option name="AUTOSCROLL_TO_SOURCE" value="false" />
|
|
||||||
<option name="SPLITTER_PROPORTION" value="0.5" />
|
|
||||||
<option name="GROUP_BY_SEVERITY" value="false" />
|
|
||||||
<option name="FILTER_RESOLVED_ITEMS" value="true" />
|
|
||||||
<option name="ANALYZE_TEST_SOURCES" value="true" />
|
|
||||||
<option name="SHOW_DIFF_WITH_PREVIOUS_RUN" value="false" />
|
|
||||||
<option name="SCOPE_TYPE" value="1" />
|
|
||||||
<option name="CUSTOM_SCOPE_NAME" value="" />
|
|
||||||
<option name="SHOW_ONLY_DIFF" value="false" />
|
|
||||||
<option name="myCurrentProfileName" value="Default" />
|
|
||||||
</component>
|
|
||||||
<component name="J2EEProjectPane" />
|
|
||||||
<component name="JspContextManager" />
|
|
||||||
<component name="ModuleEditorState">
|
|
||||||
<option name="LAST_EDITED_MODULE_NAME" />
|
|
||||||
<option name="LAST_EDITED_TAB_NAME" />
|
|
||||||
</component>
|
|
||||||
<component name="NamedScopeManager" />
|
|
||||||
<component name="PackagesPane">
|
|
||||||
<subPane>
|
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="ACTIVITY_NAME.ipr" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="ACTIVITY_NAME" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
</subPane>
|
|
||||||
</component>
|
|
||||||
<component name="PerforceChangeBrowserSettings">
|
|
||||||
<option name="USE_CLIENT_FILTER" value="true" />
|
|
||||||
<option name="CLIENT" value="" />
|
|
||||||
</component>
|
|
||||||
<component name="PerforceDirect.Settings">
|
|
||||||
<option name="useP4CONFIG" value="true" />
|
|
||||||
<option name="port" value="<perforce_server>:1666" />
|
|
||||||
<option name="client" value="" />
|
|
||||||
<option name="user" value="" />
|
|
||||||
<option name="passwd" value="" />
|
|
||||||
<option name="showCmds" value="false" />
|
|
||||||
<option name="useNativeApi" value="false" />
|
|
||||||
<option name="pathToExec" value="p4" />
|
|
||||||
<option name="useCustomPathToExec" value="false" />
|
|
||||||
<option name="SYNC_FORCE" value="false" />
|
|
||||||
<option name="SYNC_RUN_RESOLVE" value="true" />
|
|
||||||
<option name="REVERT_UNCHANGED_FILES" value="true" />
|
|
||||||
<option name="CHARSET" value="none" />
|
|
||||||
<option name="SHOW_BRANCHES_HISTORY" value="true" />
|
|
||||||
<option name="ENABLED" value="true" />
|
|
||||||
<option name="USE_LOGIN" value="false" />
|
|
||||||
<option name="LOGIN_SILENTLY" value="false" />
|
|
||||||
<option name="INTEGRATE_RUN_RESOLVE" value="true" />
|
|
||||||
<option name="INTEGRATE_REVERT_UNCHANGED" value="true" />
|
|
||||||
<option name="SERVER_TIMEOUT" value="20000" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectLevelVcsManager">
|
|
||||||
<OptionsSetting value="true" id="Add" />
|
|
||||||
<OptionsSetting value="true" id="Remove" />
|
|
||||||
<OptionsSetting value="true" id="Checkin" />
|
|
||||||
<OptionsSetting value="true" id="Checkout" />
|
|
||||||
<OptionsSetting value="true" id="Update" />
|
|
||||||
<OptionsSetting value="true" id="Status" />
|
|
||||||
<OptionsSetting value="true" id="Edit" />
|
|
||||||
<ConfirmationsSetting value="0" id="Add" />
|
|
||||||
<ConfirmationsSetting value="0" id="Remove" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectPane">
|
|
||||||
<subPane>
|
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="ACTIVITY_NAME.ipr" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="ACTIVITY_NAME" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
</subPane>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectReloadState">
|
|
||||||
<option name="STATE" value="0" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectView">
|
|
||||||
<navigator currentView="ProjectPane" proportions="0.1" version="1" splitterProportion="0.5">
|
|
||||||
<flattenPackages />
|
|
||||||
<showMembers />
|
|
||||||
<showModules />
|
|
||||||
<showLibraryContents />
|
|
||||||
<hideEmptyPackages />
|
|
||||||
<abbreviatePackageNames />
|
|
||||||
<showStructure PackagesPane="false" ProjectPane="false" />
|
|
||||||
<autoscrollToSource />
|
|
||||||
<autoscrollFromSource />
|
|
||||||
<sortByType />
|
|
||||||
</navigator>
|
|
||||||
</component>
|
|
||||||
<component name="PropertiesComponent">
|
|
||||||
<property name="MemberChooser.copyJavadoc" value="false" />
|
|
||||||
<property name="GoToClass.includeLibraries" value="false" />
|
|
||||||
<property name="MemberChooser.showClasses" value="true" />
|
|
||||||
<property name="MemberChooser.sorted" value="false" />
|
|
||||||
<property name="GoToFile.includeJavaFiles" value="false" />
|
|
||||||
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="ReadonlyStatusHandler">
|
|
||||||
<option name="SHOW_DIALOG" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="RecentsManager" />
|
|
||||||
<component name="RestoreUpdateTree" />
|
|
||||||
<component name="RunManager">
|
|
||||||
<configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false">
|
|
||||||
<option name="MAIN_CLASS_NAME" />
|
|
||||||
<option name="VM_PARAMETERS" />
|
|
||||||
<option name="PROGRAM_PARAMETERS" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH" />
|
|
||||||
<option name="ENABLE_SWING_INSPECTOR" value="false" />
|
|
||||||
<module name="" />
|
|
||||||
</configuration>
|
|
||||||
<configuration default="true" type="Applet" factoryName="Applet">
|
|
||||||
<module name="" />
|
|
||||||
<option name="MAIN_CLASS_NAME" />
|
|
||||||
<option name="HTML_FILE_NAME" />
|
|
||||||
<option name="HTML_USED" value="false" />
|
|
||||||
<option name="WIDTH" value="400" />
|
|
||||||
<option name="HEIGHT" value="300" />
|
|
||||||
<option name="POLICY_FILE" value="/Developer/Applications/IntelliJ IDEA 6.0.4.app/bin/appletviewer.policy" />
|
|
||||||
<option name="VM_PARAMETERS" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH" />
|
|
||||||
</configuration>
|
|
||||||
<configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
|
|
||||||
<module name="" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
|
||||||
<option name="ALTERNATIVE_JRE_PATH" />
|
|
||||||
<option name="PACKAGE_NAME" />
|
|
||||||
<option name="MAIN_CLASS_NAME" />
|
|
||||||
<option name="METHOD_NAME" />
|
|
||||||
<option name="TEST_OBJECT" value="class" />
|
|
||||||
<option name="VM_PARAMETERS" />
|
|
||||||
<option name="PARAMETERS" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="ADDITIONAL_CLASS_PATH" />
|
|
||||||
<option name="TEST_SEARCH_SCOPE">
|
|
||||||
<value defaultName="wholeProject" />
|
|
||||||
</option>
|
|
||||||
</configuration>
|
|
||||||
<configuration default="true" type="Remote" factoryName="Remote">
|
|
||||||
<option name="USE_SOCKET_TRANSPORT" value="true" />
|
|
||||||
<option name="SERVER_MODE" value="false" />
|
|
||||||
<option name="SHMEM_ADDRESS" value="javadebug" />
|
|
||||||
<option name="HOST" value="localhost" />
|
|
||||||
<option name="PORT" value="5005" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
<component name="ScopeViewComponent" />
|
|
||||||
<component name="SelectInManager" />
|
|
||||||
<component name="StarteamConfiguration">
|
|
||||||
<option name="SERVER" value="" />
|
|
||||||
<option name="PORT" value="49201" />
|
|
||||||
<option name="USER" value="" />
|
|
||||||
<option name="PASSWORD" value="" />
|
|
||||||
<option name="PROJECT" value="" />
|
|
||||||
<option name="VIEW" value="" />
|
|
||||||
<option name="ALTERNATIVE_WORKING_PATH" value="" />
|
|
||||||
<option name="LOCK_ON_CHECKOUT" value="false" />
|
|
||||||
<option name="UNLOCK_ON_CHECKIN" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="StructuralSearchPlugin" />
|
|
||||||
<component name="StructureViewFactory">
|
|
||||||
<option name="AUTOSCROLL_MODE" value="true" />
|
|
||||||
<option name="AUTOSCROLL_FROM_SOURCE" value="false" />
|
|
||||||
<option name="ACTIVE_ACTIONS" value="" />
|
|
||||||
</component>
|
|
||||||
<component name="Struts Assistant">
|
|
||||||
<option name="showInputs" value="true" />
|
|
||||||
<option name="resources">
|
|
||||||
<value>
|
|
||||||
<option name="strutsPath" />
|
|
||||||
<option name="strutsHelp" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="selectedTaglibs" />
|
|
||||||
<option name="selectedTaglibs" />
|
|
||||||
<option name="myStrutsValidationEnabled" value="true" />
|
|
||||||
<option name="myTilesValidationEnabled" value="true" />
|
|
||||||
<option name="myValidatorValidationEnabled" value="true" />
|
|
||||||
<option name="myReportErrorsAsWarnings" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="SvnChangesBrowserSettings">
|
|
||||||
<option name="USE_AUTHOR_FIELD" value="true" />
|
|
||||||
<option name="AUTHOR" value="" />
|
|
||||||
<option name="LOCATION" value="" />
|
|
||||||
<option name="USE_PROJECT_SETTINGS" value="true" />
|
|
||||||
<option name="USE_ALTERNATE_LOCATION" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="SvnConfiguration">
|
|
||||||
<option name="USER" value="" />
|
|
||||||
<option name="PASSWORD" value="" />
|
|
||||||
<option name="PROCESS_UNRESOLVED" value="false" />
|
|
||||||
<option name="LAST_MERGED_REVISION" />
|
|
||||||
<option name="UPDATE_RUN_STATUS" value="false" />
|
|
||||||
<option name="UPDATE_RECURSIVELY" value="true" />
|
|
||||||
<option name="MERGE_DRY_RUN" value="false" />
|
|
||||||
<upgradeMode>auto</upgradeMode>
|
|
||||||
</component>
|
|
||||||
<component name="TodoView" selected-index="0">
|
|
||||||
<todo-panel id="selected-file">
|
|
||||||
<are-packages-shown value="false" />
|
|
||||||
<are-modules-shown value="false" />
|
|
||||||
<flatten-packages value="false" />
|
|
||||||
<is-autoscroll-to-source value="true" />
|
|
||||||
</todo-panel>
|
|
||||||
<todo-panel id="all">
|
|
||||||
<are-packages-shown value="true" />
|
|
||||||
<are-modules-shown value="false" />
|
|
||||||
<flatten-packages value="false" />
|
|
||||||
<is-autoscroll-to-source value="true" />
|
|
||||||
</todo-panel>
|
|
||||||
</component>
|
|
||||||
<component name="ToolWindowManager">
|
|
||||||
<frame x="0" y="22" width="1440" height="834" extended-state="0" />
|
|
||||||
<editor active="false" />
|
|
||||||
<layout>
|
|
||||||
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="7" />
|
|
||||||
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24946082" order="0" />
|
|
||||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="1" />
|
|
||||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="1" />
|
|
||||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="6" />
|
|
||||||
<window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="1" />
|
|
||||||
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="2" />
|
|
||||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
|
|
||||||
<window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="4" />
|
|
||||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="0" />
|
|
||||||
<window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="-1" />
|
|
||||||
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
|
|
||||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="0" />
|
|
||||||
<window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="3" />
|
|
||||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="5" />
|
|
||||||
</layout>
|
|
||||||
</component>
|
|
||||||
<component name="VCS.FileViewConfiguration">
|
|
||||||
<option name="SELECTED_STATUSES" value="DEFAULT" />
|
|
||||||
<option name="SELECTED_COLUMNS" value="DEFAULT" />
|
|
||||||
<option name="SHOW_FILTERS" value="true" />
|
|
||||||
<option name="CUSTOMIZE_VIEW" value="true" />
|
|
||||||
<option name="SHOW_FILE_HISTORY_AS_TREE" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="VcsManagerConfiguration">
|
|
||||||
<option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
|
|
||||||
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
|
|
||||||
<option name="PERFORM_UPDATE_IN_BACKGROUND" value="false" />
|
|
||||||
<option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
|
|
||||||
<option name="PUT_FOCUS_INTO_COMMENT" value="false" />
|
|
||||||
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
|
|
||||||
<option name="LAST_COMMIT_MESSAGE" />
|
|
||||||
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
|
|
||||||
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
|
|
||||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
|
|
||||||
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
|
|
||||||
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
|
|
||||||
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
|
|
||||||
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
|
|
||||||
<option name="ERROR_OCCURED" value="false" />
|
|
||||||
<option name="ACTIVE_VCS_NAME" value="CVS" />
|
|
||||||
<option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
|
|
||||||
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
|
|
||||||
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
|
|
||||||
</component>
|
|
||||||
<component name="XPathView.XPathProjectComponent">
|
|
||||||
<history />
|
|
||||||
<find-history />
|
|
||||||
</component>
|
|
||||||
<component name="XSLT-Support.FileAssociationsSettings" />
|
|
||||||
<component name="antWorkspaceConfiguration">
|
|
||||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
|
|
||||||
<option name="FILTER_TARGETS" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable" proportions="" version="1">
|
|
||||||
<option name="myLastEditedConfigurable" />
|
|
||||||
</component>
|
|
||||||
<component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.1" version="1">
|
|
||||||
<option name="myPlainMode" value="false" />
|
|
||||||
<option name="myLastEditedConfigurable" value="android" />
|
|
||||||
</component>
|
|
||||||
<component name="com.intellij.profile.ui.ErrorOptionsConfigurable" proportions="" version="1">
|
|
||||||
<option name="myLastEditedConfigurable" />
|
|
||||||
</component>
|
|
||||||
<component name="editorHistoryManager" />
|
|
||||||
</project>
|
|
||||||
@@ -3,7 +3,7 @@ package PACKAGE;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
public class ACTIVITY_NAME extends Activity
|
public class ACTIVITY_CLASS_NAME extends Activity
|
||||||
{
|
{
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ import android.test.ActivityInstrumentationTestCase2;
|
|||||||
* <p/>
|
* <p/>
|
||||||
* To run this test, you can type:
|
* To run this test, you can type:
|
||||||
* adb shell am instrument -w \
|
* adb shell am instrument -w \
|
||||||
* -e class PACKAGE.ACTIVITY_NAMETest \
|
* -e class ACTIVITY_FQ_NAME \
|
||||||
* PACKAGE.tests/android.test.InstrumentationTestRunner
|
* PACKAGE.tests/android.test.InstrumentationTestRunner
|
||||||
*/
|
*/
|
||||||
public class ACTIVITY_NAMETest extends ActivityInstrumentationTestCase2<ACTIVITY_NAME> {
|
public class ACTIVITY_CLASS_NAME extends ActivityInstrumentationTestCase2<ACTIVITY_TESTED_CLASS_NAME> {
|
||||||
|
|
||||||
public ACTIVITY_NAMETest() {
|
public ACTIVITY_CLASS_NAME() {
|
||||||
super("PACKAGE", ACTIVITY_NAME.class);
|
super("PACKAGE", ACTIVITY_TESTED_CLASS_NAME.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -460,7 +460,7 @@ class CommandLineProcessor {
|
|||||||
stdout("\nValid actions are composed of a verb and an optional direct object:");
|
stdout("\nValid actions are composed of a verb and an optional direct object:");
|
||||||
for (String[] action : mActions) {
|
for (String[] action : mActions) {
|
||||||
|
|
||||||
stdout("- %1$6s %2$-7s: %3$s",
|
stdout("- %1$6s %2$-12s: %3$s",
|
||||||
action[ACTION_VERB_INDEX],
|
action[ACTION_VERB_INDEX],
|
||||||
action[ACTION_OBJECT_INDEX],
|
action[ACTION_OBJECT_INDEX],
|
||||||
action[ACTION_DESC_INDEX]);
|
action[ACTION_DESC_INDEX]);
|
||||||
|
|||||||
@@ -28,17 +28,27 @@ import com.android.sdklib.internal.avd.HardwareProperties;
|
|||||||
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
|
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
|
||||||
import com.android.sdklib.internal.avd.HardwareProperties.HardwareProperty;
|
import com.android.sdklib.internal.avd.HardwareProperties.HardwareProperty;
|
||||||
import com.android.sdklib.internal.project.ProjectCreator;
|
import com.android.sdklib.internal.project.ProjectCreator;
|
||||||
|
import com.android.sdklib.internal.project.ProjectProperties;
|
||||||
import com.android.sdklib.internal.project.ProjectCreator.OutputLevel;
|
import com.android.sdklib.internal.project.ProjectCreator.OutputLevel;
|
||||||
|
import com.android.sdklib.internal.project.ProjectProperties.PropertyType;
|
||||||
|
import com.android.sdklib.xml.AndroidXPathFactory;
|
||||||
import com.android.sdkmanager.internal.repository.AboutPage;
|
import com.android.sdkmanager.internal.repository.AboutPage;
|
||||||
import com.android.sdkmanager.internal.repository.SettingsPage;
|
import com.android.sdkmanager.internal.repository.SettingsPage;
|
||||||
import com.android.sdkuilib.repository.UpdaterWindow;
|
import com.android.sdkuilib.repository.UpdaterWindow;
|
||||||
|
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPath;
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main class for the 'android' application.
|
* Main class for the 'android' application.
|
||||||
*/
|
*/
|
||||||
@@ -221,6 +231,10 @@ public class Main {
|
|||||||
SdkCommandLine.OBJECT_PROJECT.equals(directObject)) {
|
SdkCommandLine.OBJECT_PROJECT.equals(directObject)) {
|
||||||
createProject();
|
createProject();
|
||||||
|
|
||||||
|
} else if (SdkCommandLine.VERB_CREATE.equals(verb) &&
|
||||||
|
SdkCommandLine.OBJECT_TEST_PROJECT.equals(directObject)) {
|
||||||
|
createTestProject();
|
||||||
|
|
||||||
} else if (SdkCommandLine.VERB_UPDATE.equals(verb) &&
|
} else if (SdkCommandLine.VERB_UPDATE.equals(verb) &&
|
||||||
SdkCommandLine.OBJECT_PROJECT.equals(directObject)) {
|
SdkCommandLine.OBJECT_PROJECT.equals(directObject)) {
|
||||||
updateProject();
|
updateProject();
|
||||||
@@ -314,9 +328,112 @@ public class Main {
|
|||||||
packageName,
|
packageName,
|
||||||
activityName,
|
activityName,
|
||||||
target,
|
target,
|
||||||
false /* isTestProject*/);
|
null /*pathToMain*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Android test project based on command-line parameters
|
||||||
|
*/
|
||||||
|
private void createTestProject() {
|
||||||
|
|
||||||
|
String projectDir = getProjectLocation(mSdkCommandLine.getParamLocationPath());
|
||||||
|
|
||||||
|
// first check the path of the parent project, and make sure it's valid.
|
||||||
|
String pathToMainProject = mSdkCommandLine.getParamTestProjectMain();
|
||||||
|
|
||||||
|
File parentProject = new File(pathToMainProject);
|
||||||
|
if (parentProject.isAbsolute() == false) {
|
||||||
|
// if the path is not absolute, we need to resolve it based on the
|
||||||
|
// destination path of the project
|
||||||
|
parentProject = new File(projectDir, pathToMainProject);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parentProject.isDirectory() == false) {
|
||||||
|
errorAndExit("Main project's directory does not exist: %1$s",
|
||||||
|
pathToMainProject);
|
||||||
|
}
|
||||||
|
|
||||||
|
// now look for a manifest in there
|
||||||
|
File manifest = new File(parentProject, SdkConstants.FN_ANDROID_MANIFEST_XML);
|
||||||
|
if (manifest.isFile() == false) {
|
||||||
|
errorAndExit("No AndroidManifest.xml file found in the main project directory: %1$s",
|
||||||
|
parentProject.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
// now query the manifest for the package file.
|
||||||
|
XPath xpath = AndroidXPathFactory.newXPath();
|
||||||
|
String packageName, activityName;
|
||||||
|
|
||||||
|
try {
|
||||||
|
packageName = xpath.evaluate("/manifest/@package",
|
||||||
|
new InputSource(new FileInputStream(manifest)));
|
||||||
|
|
||||||
|
mSdkLog.printf("Found main project package: %1$s\n", packageName);
|
||||||
|
|
||||||
|
// now get the name of the first activity we find
|
||||||
|
activityName = xpath.evaluate("/manifest/application/activity[1]/@android:name",
|
||||||
|
new InputSource(new FileInputStream(manifest)));
|
||||||
|
// xpath will return empty string when there's no match
|
||||||
|
if (activityName == null || activityName.length() == 0) {
|
||||||
|
activityName = null;
|
||||||
|
} else {
|
||||||
|
mSdkLog.printf("Found main project activity: %1$s\n", activityName);
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
// this shouldn't happen as we test it above.
|
||||||
|
errorAndExit("No AndroidManifest.xml file found in main project.");
|
||||||
|
return; // this is not strictly needed because errorAndExit will stop the execution,
|
||||||
|
// but this makes the java compiler happy, wrt to uninitialized variables.
|
||||||
|
} catch (XPathExpressionException e) {
|
||||||
|
// looks like the main manifest is not valid.
|
||||||
|
errorAndExit("Unable to parse main project manifest to get information.");
|
||||||
|
return; // this is not strictly needed because errorAndExit will stop the execution,
|
||||||
|
// but this makes the java compiler happy, wrt to uninitialized variables.
|
||||||
|
}
|
||||||
|
|
||||||
|
// now get the target hash
|
||||||
|
ProjectProperties p = ProjectProperties.load(parentProject.getAbsolutePath(),
|
||||||
|
PropertyType.DEFAULT);
|
||||||
|
String targetHash = p.getProperty(ProjectProperties.PROPERTY_TARGET);
|
||||||
|
if (targetHash == null) {
|
||||||
|
errorAndExit("Couldn't find the main project target");
|
||||||
|
}
|
||||||
|
|
||||||
|
// and resolve it.
|
||||||
|
IAndroidTarget target = mSdkManager.getTargetFromHashString(targetHash);
|
||||||
|
if (target == null) {
|
||||||
|
errorAndExit(
|
||||||
|
"Unable to resolve main project target '%1$s'. You may want to install the platform in your SDK.",
|
||||||
|
targetHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
mSdkLog.printf("Found main project target: %1$s\n", target.getFullName());
|
||||||
|
|
||||||
|
ProjectCreator creator = new ProjectCreator(mOsSdkFolder,
|
||||||
|
mSdkCommandLine.isVerbose() ? OutputLevel.VERBOSE :
|
||||||
|
mSdkCommandLine.isSilent() ? OutputLevel.SILENT :
|
||||||
|
OutputLevel.NORMAL,
|
||||||
|
mSdkLog);
|
||||||
|
|
||||||
|
String projectName = mSdkCommandLine.getParamName();
|
||||||
|
|
||||||
|
if (projectName != null &&
|
||||||
|
!ProjectCreator.RE_PROJECT_NAME.matcher(projectName).matches()) {
|
||||||
|
errorAndExit(
|
||||||
|
"Project name '%1$s' contains invalid characters.\nAllowed characters are: %2$s",
|
||||||
|
projectName, ProjectCreator.CHARS_PROJECT_NAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
creator.createProject(projectDir,
|
||||||
|
projectName,
|
||||||
|
packageName,
|
||||||
|
activityName,
|
||||||
|
target,
|
||||||
|
pathToMainProject);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates an existing Android project based on command-line parameters
|
* Updates an existing Android project based on command-line parameters
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -31,28 +31,30 @@ class SdkCommandLine extends CommandLineProcessor {
|
|||||||
public final static String VERB_DELETE = "delete";
|
public final static String VERB_DELETE = "delete";
|
||||||
public final static String VERB_UPDATE = "update";
|
public final static String VERB_UPDATE = "update";
|
||||||
|
|
||||||
public static final String OBJECT_AVD = "avd";
|
public static final String OBJECT_AVD = "avd";
|
||||||
public static final String OBJECT_AVDS = "avds";
|
public static final String OBJECT_AVDS = "avds";
|
||||||
public static final String OBJECT_TARGET = "target";
|
public static final String OBJECT_TARGET = "target";
|
||||||
public static final String OBJECT_TARGETS = "targets";
|
public static final String OBJECT_TARGETS = "targets";
|
||||||
public static final String OBJECT_PROJECT = "project";
|
public static final String OBJECT_PROJECT = "project";
|
||||||
public static final String OBJECT_ADB = "adb";
|
public static final String OBJECT_TEST_PROJECT = "test-project";
|
||||||
|
public static final String OBJECT_ADB = "adb";
|
||||||
|
|
||||||
public static final String ARG_ALIAS = "alias";
|
public static final String ARG_ALIAS = "alias";
|
||||||
public static final String ARG_ACTIVITY = "activity";
|
public static final String ARG_ACTIVITY = "activity";
|
||||||
|
|
||||||
public static final String KEY_ACTIVITY = ARG_ACTIVITY;
|
public static final String KEY_ACTIVITY = ARG_ACTIVITY;
|
||||||
public static final String KEY_PACKAGE = "package";
|
public static final String KEY_PACKAGE = "package";
|
||||||
public static final String KEY_MODE = "mode";
|
public static final String KEY_MODE = "mode";
|
||||||
public static final String KEY_TARGET_ID = OBJECT_TARGET;
|
public static final String KEY_TARGET_ID = OBJECT_TARGET;
|
||||||
public static final String KEY_NAME = "name";
|
public static final String KEY_NAME = "name";
|
||||||
public static final String KEY_PATH = "path";
|
public static final String KEY_PATH = "path";
|
||||||
public static final String KEY_FILTER = "filter";
|
public static final String KEY_FILTER = "filter";
|
||||||
public static final String KEY_SKIN = "skin";
|
public static final String KEY_SKIN = "skin";
|
||||||
public static final String KEY_SDCARD = "sdcard";
|
public static final String KEY_SDCARD = "sdcard";
|
||||||
public static final String KEY_FORCE = "force";
|
public static final String KEY_FORCE = "force";
|
||||||
public static final String KEY_RENAME = "rename";
|
public static final String KEY_RENAME = "rename";
|
||||||
public static final String KEY_SUBPROJECTS = "subprojects";
|
public static final String KEY_SUBPROJECTS = "subprojects";
|
||||||
|
public static final String KEY_MAIN_PROJECT = "main";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action definitions for SdkManager command line.
|
* Action definitions for SdkManager command line.
|
||||||
@@ -89,6 +91,11 @@ class SdkCommandLine extends CommandLineProcessor {
|
|||||||
{ VERB_UPDATE, OBJECT_PROJECT,
|
{ VERB_UPDATE, OBJECT_PROJECT,
|
||||||
"Updates an Android Project (must have an AndroidManifest.xml)." },
|
"Updates an Android Project (must have an AndroidManifest.xml)." },
|
||||||
|
|
||||||
|
{ VERB_CREATE, OBJECT_TEST_PROJECT,
|
||||||
|
"Creates a new Android Test Project." },
|
||||||
|
{ VERB_UPDATE, OBJECT_TEST_PROJECT,
|
||||||
|
"Updates an Android Test Project (must have an AndroidManifest.xml)." },
|
||||||
|
|
||||||
{ VERB_UPDATE, OBJECT_ADB,
|
{ VERB_UPDATE, OBJECT_ADB,
|
||||||
"Updates adb to support the USB devices declared in the SDK add-ons." },
|
"Updates adb to support the USB devices declared in the SDK add-ons." },
|
||||||
};
|
};
|
||||||
@@ -167,6 +174,18 @@ class SdkCommandLine extends CommandLineProcessor {
|
|||||||
VERB_CREATE, OBJECT_PROJECT, "n", KEY_NAME,
|
VERB_CREATE, OBJECT_PROJECT, "n", KEY_NAME,
|
||||||
"Project name", null);
|
"Project name", null);
|
||||||
|
|
||||||
|
// --- create test-project ---
|
||||||
|
define(Mode.STRING, true,
|
||||||
|
VERB_CREATE, OBJECT_TEST_PROJECT,
|
||||||
|
"p", KEY_PATH,
|
||||||
|
"Location path of new project", null);
|
||||||
|
define(Mode.STRING, false,
|
||||||
|
VERB_CREATE, OBJECT_TEST_PROJECT, "n", KEY_NAME,
|
||||||
|
"Project name", null);
|
||||||
|
define(Mode.STRING, true,
|
||||||
|
VERB_CREATE, OBJECT_TEST_PROJECT, "m", KEY_MAIN_PROJECT,
|
||||||
|
"Location path of the project to test, relative to the new project", null);
|
||||||
|
|
||||||
// --- update project ---
|
// --- update project ---
|
||||||
|
|
||||||
define(Mode.STRING, true,
|
define(Mode.STRING, true,
|
||||||
@@ -185,6 +204,17 @@ class SdkCommandLine extends CommandLineProcessor {
|
|||||||
VERB_UPDATE, OBJECT_PROJECT,
|
VERB_UPDATE, OBJECT_PROJECT,
|
||||||
"s", KEY_SUBPROJECTS,
|
"s", KEY_SUBPROJECTS,
|
||||||
"Also update any projects in sub-folders, such as test projects.", false);
|
"Also update any projects in sub-folders, such as test projects.", false);
|
||||||
|
|
||||||
|
// --- update test project ---
|
||||||
|
|
||||||
|
define(Mode.STRING, true,
|
||||||
|
VERB_UPDATE, OBJECT_TEST_PROJECT,
|
||||||
|
"p", KEY_PATH,
|
||||||
|
"Location path of the project", null);
|
||||||
|
define(Mode.STRING, true,
|
||||||
|
VERB_UPDATE, OBJECT_TEST_PROJECT,
|
||||||
|
"m", KEY_MAIN_PROJECT,
|
||||||
|
"Location path of the project to test", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -255,4 +285,11 @@ class SdkCommandLine extends CommandLineProcessor {
|
|||||||
public boolean getParamSubProject() {
|
public boolean getParamSubProject() {
|
||||||
return ((Boolean) getValue(null, OBJECT_PROJECT, KEY_SUBPROJECTS)).booleanValue();
|
return ((Boolean) getValue(null, OBJECT_PROJECT, KEY_SUBPROJECTS)).booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- some helpers for test-project action flags
|
||||||
|
|
||||||
|
/** Helper to retrieve the --main value. */
|
||||||
|
public String getParamTestProjectMain() {
|
||||||
|
return ((String) getValue(null, OBJECT_TEST_PROJECT, KEY_MAIN_PROJECT));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.android.sdklib.IAndroidTarget;
|
|||||||
import com.android.sdklib.ISdkLog;
|
import com.android.sdklib.ISdkLog;
|
||||||
import com.android.sdklib.SdkConstants;
|
import com.android.sdklib.SdkConstants;
|
||||||
import com.android.sdklib.internal.project.ProjectProperties.PropertyType;
|
import com.android.sdklib.internal.project.ProjectProperties.PropertyType;
|
||||||
|
import com.android.sdklib.xml.AndroidManifest;
|
||||||
|
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
@@ -44,8 +45,7 @@ import javax.xml.xpath.XPathExpressionException;
|
|||||||
import javax.xml.xpath.XPathFactory;
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the basic files needed to get an Android project up and running. Also
|
* Creates the basic files needed to get an Android project up and running.
|
||||||
* allows creation of IntelliJ project files.
|
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -55,13 +55,22 @@ public class ProjectCreator {
|
|||||||
private final static String PH_JAVA_FOLDER = "PACKAGE_PATH";
|
private final static String PH_JAVA_FOLDER = "PACKAGE_PATH";
|
||||||
/** Package name substitution string used in template files, i.e. "PACKAGE" */
|
/** Package name substitution string used in template files, i.e. "PACKAGE" */
|
||||||
private final static String PH_PACKAGE = "PACKAGE";
|
private final static String PH_PACKAGE = "PACKAGE";
|
||||||
/** Activity name substitution string used in template files, i.e. "ACTIVITY_NAME". */
|
/** Activity name substitution string used in template files, i.e. "ACTIVITY_NAME".
|
||||||
|
* @deprecated This is only used for older templates. For new ones see
|
||||||
|
* {@link #PH_ACTIVITY_ENTRY_NAME}, and {@link #PH_ACTIVITY_CLASS_NAME}. */
|
||||||
private final static String PH_ACTIVITY_NAME = "ACTIVITY_NAME";
|
private final static String PH_ACTIVITY_NAME = "ACTIVITY_NAME";
|
||||||
|
/** Activity name substitution string used in manifest templates, i.e. "ACTIVITY_ENTRY_NAME".*/
|
||||||
|
private final static String PH_ACTIVITY_ENTRY_NAME = "ACTIVITY_ENTRY_NAME";
|
||||||
|
/** Activity name substitution string used in class templates, i.e. "ACTIVITY_CLASS_NAME".*/
|
||||||
|
private final static String PH_ACTIVITY_CLASS_NAME = "ACTIVITY_CLASS_NAME";
|
||||||
|
/** Activity FQ-name substitution string used in class templates, i.e. "ACTIVITY_FQ_NAME".*/
|
||||||
|
private final static String PH_ACTIVITY_FQ_NAME = "ACTIVITY_FQ_NAME";
|
||||||
|
/** Original Activity class name substitution string used in class templates, i.e.
|
||||||
|
* "ACTIVITY_TESTED_CLASS_NAME".*/
|
||||||
|
private final static String PH_ACTIVITY_TESTED_CLASS_NAME = "ACTIVITY_TESTED_CLASS_NAME";
|
||||||
/** Project name substitution string used in template files, i.e. "PROJECT_NAME". */
|
/** Project name substitution string used in template files, i.e. "PROJECT_NAME". */
|
||||||
private final static String PH_PROJECT_NAME = "PROJECT_NAME";
|
private final static String PH_PROJECT_NAME = "PROJECT_NAME";
|
||||||
|
|
||||||
private final static String FOLDER_TESTS = "tests";
|
|
||||||
|
|
||||||
/** Pattern for characters accepted in a project name. Since this will be used as a
|
/** Pattern for characters accepted in a project name. Since this will be used as a
|
||||||
* directory name, we're being a bit conservative on purpose: dot and space cannot be used. */
|
* directory name, we're being a bit conservative on purpose: dot and space cannot be used. */
|
||||||
public static final Pattern RE_PROJECT_NAME = Pattern.compile("[a-zA-Z0-9_]+");
|
public static final Pattern RE_PROJECT_NAME = Pattern.compile("[a-zA-Z0-9_]+");
|
||||||
@@ -135,17 +144,16 @@ public class ProjectCreator {
|
|||||||
* {@link #RE_PROJECT_NAME} regex.
|
* {@link #RE_PROJECT_NAME} regex.
|
||||||
* @param packageName the package of the project. The name must match the
|
* @param packageName the package of the project. The name must match the
|
||||||
* {@link #RE_PACKAGE_NAME} regex.
|
* {@link #RE_PACKAGE_NAME} regex.
|
||||||
* @param activityName the activity of the project as it will appear in the manifest. Can be
|
* @param activityEntry the activity of the project as it will appear in the manifest. Can be
|
||||||
* null if no activity should be created. The name must match the
|
* null if no activity should be created. The name must match the
|
||||||
* {@link #RE_ACTIVITY_NAME} regex.
|
* {@link #RE_ACTIVITY_NAME} regex.
|
||||||
* @param target the project target.
|
* @param target the project target.
|
||||||
* @param isTestProject whether the project to create is a test project. Caller should
|
* @param pathToMainProject if non-null the project will be setup to test a main project
|
||||||
* initially call this will false. The method will call itself back to create
|
* located at the given path.
|
||||||
* a test project as needed.
|
|
||||||
*/
|
*/
|
||||||
public void createProject(String folderPath, String projectName,
|
public void createProject(String folderPath, String projectName,
|
||||||
String packageName, String activityName, IAndroidTarget target,
|
String packageName, String activityEntry, IAndroidTarget target,
|
||||||
boolean isTestProject) {
|
String pathToMainProject) {
|
||||||
|
|
||||||
// create project folder if it does not exist
|
// create project folder if it does not exist
|
||||||
File projectFolder = new File(folderPath);
|
File projectFolder = new File(folderPath);
|
||||||
@@ -185,6 +193,8 @@ public class ProjectCreator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
boolean isTestProject = pathToMainProject != null;
|
||||||
|
|
||||||
// first create the project properties.
|
// first create the project properties.
|
||||||
|
|
||||||
// location of the SDK goes in localProperty
|
// location of the SDK goes in localProperty
|
||||||
@@ -202,9 +212,16 @@ public class ProjectCreator {
|
|||||||
// create a build.properties file with just the application package
|
// create a build.properties file with just the application package
|
||||||
ProjectProperties buildProperties = ProjectProperties.create(folderPath,
|
ProjectProperties buildProperties = ProjectProperties.create(folderPath,
|
||||||
PropertyType.BUILD);
|
PropertyType.BUILD);
|
||||||
buildProperties.setProperty(ProjectProperties.PROPERTY_APP_PACKAGE, packageName);
|
|
||||||
if (isTestProject == true) {
|
// only put application.package for older target where the rules file didn't.
|
||||||
buildProperties.setProperty(ProjectProperties.PROPERTY_TESTED_PROJECT, "..");
|
// grab it through xpath
|
||||||
|
if (target.getVersion().getApiLevel() < 4) {
|
||||||
|
buildProperties.setProperty(ProjectProperties.PROPERTY_APP_PACKAGE, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isTestProject) {
|
||||||
|
buildProperties.setProperty(ProjectProperties.PROPERTY_TESTED_PROJECT,
|
||||||
|
pathToMainProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
buildProperties.save();
|
buildProperties.save();
|
||||||
@@ -221,19 +238,76 @@ public class ProjectCreator {
|
|||||||
// put this path in the place-holder map for project files that needs to list
|
// put this path in the place-holder map for project files that needs to list
|
||||||
// files manually.
|
// files manually.
|
||||||
keywords.put(PH_JAVA_FOLDER, packagePath);
|
keywords.put(PH_JAVA_FOLDER, packagePath);
|
||||||
|
|
||||||
keywords.put(PH_PACKAGE, packageName);
|
keywords.put(PH_PACKAGE, packageName);
|
||||||
if (activityName != null) {
|
|
||||||
keywords.put(PH_ACTIVITY_NAME, activityName);
|
|
||||||
|
// compute some activity related information
|
||||||
|
String fqActivityName = null, activityPath = null, activityClassName = null;
|
||||||
|
String originalActivityEntry = activityEntry;
|
||||||
|
String originalActivityClassName = null;
|
||||||
|
if (activityEntry != null) {
|
||||||
|
if (isTestProject) {
|
||||||
|
// append Test so that it doesn't collide with the main project activity.
|
||||||
|
activityEntry += "Test";
|
||||||
|
|
||||||
|
// get the classname from the original activity entry.
|
||||||
|
int pos = originalActivityEntry.lastIndexOf('.');
|
||||||
|
if (pos != -1) {
|
||||||
|
originalActivityClassName = originalActivityEntry.substring(pos + 1);
|
||||||
|
} else {
|
||||||
|
originalActivityClassName = originalActivityEntry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the fully qualified name of the activity
|
||||||
|
fqActivityName = AndroidManifest.combinePackageAndClassName(packageName,
|
||||||
|
activityEntry);
|
||||||
|
|
||||||
|
// get the activity path (replace the . to /)
|
||||||
|
activityPath = stripString(fqActivityName.replace(".", File.separator),
|
||||||
|
File.separatorChar);
|
||||||
|
|
||||||
|
// remove the last segment, so that we only have the path to the activity, but
|
||||||
|
// not the activity filename itself.
|
||||||
|
activityPath = activityPath.substring(0,
|
||||||
|
activityPath.lastIndexOf(File.separatorChar));
|
||||||
|
|
||||||
|
// finally, get the class name for the activity
|
||||||
|
activityClassName = fqActivityName.substring(fqActivityName.lastIndexOf('.') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// at this point we have the following for the activity:
|
||||||
|
// activityEntry: this is the manifest entry. For instance .MyActivity
|
||||||
|
// fqActivityName: full-qualified class name: com.foo.MyActivity
|
||||||
|
// activityClassName: only the classname: MyActivity
|
||||||
|
// originalActivityClassName: the classname of the activity being tested (if applicable)
|
||||||
|
|
||||||
|
// Add whatever activity info is needed in the place-holder map.
|
||||||
|
// Older templates only expect ACTIVITY_NAME to be the same (and unmodified for tests).
|
||||||
|
if (target.getVersion().getApiLevel() < 4) { // legacy
|
||||||
|
if (originalActivityEntry != null) {
|
||||||
|
keywords.put(PH_ACTIVITY_NAME, originalActivityEntry);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// newer templates make a difference between the manifest entries, classnames,
|
||||||
|
// as well as the main and test classes.
|
||||||
|
if (activityEntry != null) {
|
||||||
|
keywords.put(PH_ACTIVITY_ENTRY_NAME, activityEntry);
|
||||||
|
keywords.put(PH_ACTIVITY_CLASS_NAME, activityClassName);
|
||||||
|
keywords.put(PH_ACTIVITY_FQ_NAME, fqActivityName);
|
||||||
|
if (originalActivityClassName != null) {
|
||||||
|
keywords.put(PH_ACTIVITY_TESTED_CLASS_NAME, originalActivityClassName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take the project name from the command line if there's one
|
// Take the project name from the command line if there's one
|
||||||
if (projectName != null) {
|
if (projectName != null) {
|
||||||
keywords.put(PH_PROJECT_NAME, projectName);
|
keywords.put(PH_PROJECT_NAME, projectName);
|
||||||
} else {
|
} else {
|
||||||
if (activityName != null) {
|
if (activityClassName != null) {
|
||||||
// Use the activity as project name
|
// Use the activity class name as project name
|
||||||
keywords.put(PH_PROJECT_NAME, activityName);
|
keywords.put(PH_PROJECT_NAME, activityClassName);
|
||||||
} else {
|
} else {
|
||||||
// We need a project name. Just pick up the basename of the project
|
// We need a project name. Just pick up the basename of the project
|
||||||
// directory.
|
// directory.
|
||||||
@@ -242,21 +316,21 @@ public class ProjectCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// create the source folder and the java package folders.
|
// create the source folder for the activity
|
||||||
String srcFolderPath = SdkConstants.FD_SOURCES + File.separator + packagePath;
|
if (activityClassName != null) {
|
||||||
File sourceFolder = createDirs(projectFolder, srcFolderPath);
|
String srcActivityFolderPath = SdkConstants.FD_SOURCES + File.separator + activityPath;
|
||||||
String javaTemplate = "java_file.template";
|
File sourceFolder = createDirs(projectFolder, srcActivityFolderPath);
|
||||||
String activityFileName = activityName + ".java";
|
|
||||||
if (isTestProject) {
|
|
||||||
javaTemplate = "java_tests_file.template";
|
|
||||||
activityFileName = activityName + "Test.java";
|
|
||||||
}
|
|
||||||
installTemplate(javaTemplate, new File(sourceFolder, activityFileName),
|
|
||||||
keywords, target);
|
|
||||||
|
|
||||||
// create the generate source folder
|
String javaTemplate = isTestProject ? "java_tests_file.template"
|
||||||
srcFolderPath = SdkConstants.FD_GEN_SOURCES + File.separator + packagePath;
|
: "java_file.template";
|
||||||
sourceFolder = createDirs(projectFolder, srcFolderPath);
|
String activityFileName = activityClassName + ".java";
|
||||||
|
|
||||||
|
installTemplate(javaTemplate, new File(sourceFolder, activityFileName),
|
||||||
|
keywords, target);
|
||||||
|
} else {
|
||||||
|
// we should at least create 'src'
|
||||||
|
createDirs(projectFolder, SdkConstants.FD_SOURCES);
|
||||||
|
}
|
||||||
|
|
||||||
// create other useful folders
|
// create other useful folders
|
||||||
File resourceFodler = createDirs(projectFolder, SdkConstants.FD_RESOURCES);
|
File resourceFodler = createDirs(projectFolder, SdkConstants.FD_RESOURCES);
|
||||||
@@ -287,16 +361,6 @@ public class ProjectCreator {
|
|||||||
installTemplate("build.template",
|
installTemplate("build.template",
|
||||||
new File(projectFolder, SdkConstants.FN_BUILD_XML),
|
new File(projectFolder, SdkConstants.FN_BUILD_XML),
|
||||||
keywords);
|
keywords);
|
||||||
|
|
||||||
// if this is not a test project, then we create one.
|
|
||||||
if (isTestProject == false) {
|
|
||||||
// create the test project folder.
|
|
||||||
createDirs(projectFolder, FOLDER_TESTS);
|
|
||||||
File testProjectFolder = new File(folderPath, FOLDER_TESTS);
|
|
||||||
|
|
||||||
createProject(testProjectFolder.getAbsolutePath(), projectName, packageName,
|
|
||||||
activityName, target, true /*isTestProject*/);
|
|
||||||
}
|
|
||||||
} catch (ProjectCreateException e) {
|
} catch (ProjectCreateException e) {
|
||||||
mLog.error(e, null);
|
mLog.error(e, null);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -251,8 +251,10 @@ public final class ProjectProperties {
|
|||||||
writer.write(comment);
|
writer.write(comment);
|
||||||
}
|
}
|
||||||
String value = entry.getValue();
|
String value = entry.getValue();
|
||||||
value = value.replaceAll("\\\\", "\\\\\\\\");
|
if (value != null) {
|
||||||
writer.write(String.format("%s=%s\n", entry.getKey(), value));
|
value = value.replaceAll("\\\\", "\\\\\\\\");
|
||||||
|
writer.write(String.format("%s=%s\n", entry.getKey(), value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// close the file to flush
|
// close the file to flush
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
package com.android.sdklib.xml;
|
package com.android.sdklib.xml;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants for nodes and attributes of the AndroidManifest.xml file.
|
* Helper and Constants for the AndroidManifest.xml file.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final class ManifestConstants {
|
public final class AndroidManifest {
|
||||||
|
|
||||||
public final static String NODE_MANIFEST = "manifest"; //$NON-NLS-1$
|
public final static String NODE_MANIFEST = "manifest"; //$NON-NLS-1$
|
||||||
public final static String NODE_APPLICATION = "application"; //$NON-NLS-1$
|
public final static String NODE_APPLICATION = "application"; //$NON-NLS-1$
|
||||||
@@ -42,4 +42,39 @@ public final class ManifestConstants {
|
|||||||
public final static String ATTRIBUTE_MIN_SDK_VERSION = "minSdkVersion"; //$NON-NLS-$
|
public final static String ATTRIBUTE_MIN_SDK_VERSION = "minSdkVersion"; //$NON-NLS-$
|
||||||
public final static String ATTRIBUTE_TARGET_PACKAGE = "targetPackage"; //$NON-NLS-1$
|
public final static String ATTRIBUTE_TARGET_PACKAGE = "targetPackage"; //$NON-NLS-1$
|
||||||
public final static String ATTRIBUTE_EXPORTED = "exported"; //$NON-NLS-1$
|
public final static String ATTRIBUTE_EXPORTED = "exported"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines a java package, with a class value from the manifest to make a fully qualified
|
||||||
|
* class name
|
||||||
|
* @param javaPackage the java package from the manifest.
|
||||||
|
* @param className the class name from the manifest.
|
||||||
|
* @return the fully qualified class name.
|
||||||
|
*/
|
||||||
|
public static String combinePackageAndClassName(String javaPackage, String className) {
|
||||||
|
if (className == null || className.length() == 0) {
|
||||||
|
return javaPackage;
|
||||||
|
}
|
||||||
|
if (javaPackage == null || javaPackage.length() == 0) {
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the class name can be a subpackage (starts with a '.'
|
||||||
|
// char), a simple class name (no dot), or a full java package
|
||||||
|
boolean startWithDot = (className.charAt(0) == '.');
|
||||||
|
boolean hasDot = (className.indexOf('.') != -1);
|
||||||
|
if (startWithDot || hasDot == false) {
|
||||||
|
|
||||||
|
// add the concatenation of the package and class name
|
||||||
|
if (startWithDot) {
|
||||||
|
return javaPackage + className;
|
||||||
|
} else {
|
||||||
|
return javaPackage + '.' + className;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// just add the class as it should be a fully qualified java name.
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -18,7 +18,9 @@ package com.android.sdklib.xml;
|
|||||||
|
|
||||||
import com.android.sdklib.SdkConstants;
|
import com.android.sdklib.SdkConstants;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.xml.XMLConstants;
|
import javax.xml.XMLConstants;
|
||||||
import javax.xml.namespace.NamespaceContext;
|
import javax.xml.namespace.NamespaceContext;
|
||||||
@@ -39,7 +41,8 @@ public class AndroidXPathFactory {
|
|||||||
private final static AndroidNamespaceContext sThis = new AndroidNamespaceContext(
|
private final static AndroidNamespaceContext sThis = new AndroidNamespaceContext(
|
||||||
DEFAULT_NS_PREFIX);
|
DEFAULT_NS_PREFIX);
|
||||||
|
|
||||||
private String mAndroidPrefix;
|
private final String mAndroidPrefix;
|
||||||
|
private final List<String> mAndroidPrefixes = new ArrayList<String>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the default {@link AndroidNamespaceContext}.
|
* Returns the default {@link AndroidNamespaceContext}.
|
||||||
@@ -54,6 +57,7 @@ public class AndroidXPathFactory {
|
|||||||
*/
|
*/
|
||||||
public AndroidNamespaceContext(String androidPrefix) {
|
public AndroidNamespaceContext(String androidPrefix) {
|
||||||
mAndroidPrefix = androidPrefix;
|
mAndroidPrefix = androidPrefix;
|
||||||
|
mAndroidPrefixes.add(mAndroidPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNamespaceURI(String prefix) {
|
public String getNamespaceURI(String prefix) {
|
||||||
@@ -67,14 +71,18 @@ public class AndroidXPathFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getPrefix(String namespaceURI) {
|
public String getPrefix(String namespaceURI) {
|
||||||
// This isn't necessary for our use.
|
if (SdkConstants.NS_RESOURCES.equals(namespaceURI)) {
|
||||||
assert false;
|
return mAndroidPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator<?> getPrefixes(String namespaceURI) {
|
public Iterator<?> getPrefixes(String namespaceURI) {
|
||||||
// This isn't necessary for our use.
|
if (SdkConstants.NS_RESOURCES.equals(namespaceURI)) {
|
||||||
assert false;
|
return mAndroidPrefixes.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user