aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-02-23 11:07:19 -0800
committerXavier Ducrohet <xav@android.com>2012-02-24 17:24:06 -0800
commit44a21c237072fba5454732c74d1f7653523c4105 (patch)
treefd5ea83ab6d2359acf969d231fe5b11a168aa7e1
parent9e36cb7689bf68ceafff3385e95dc24b756c34d5 (diff)
downloadsdk-44a21c237072fba5454732c74d1f7653523c4105.zip
sdk-44a21c237072fba5454732c74d1f7653523c4105.tar.gz
sdk-44a21c237072fba5454732c74d1f7653523c4105.tar.bz2
Fix issue when a project and its libraries use the same jar files.
This is only an issue in Ant because in Eclipse we don't automatically pull the jar files from libraries into the main project (we should somehow now that we have the Library Projects jar container that is dynamic). Right now we do a simple size/sha1 check on libraries that have the same name to figure out if they are the same version. If they are we only use one in the dex step (that notoriously fails to add the same class twice). If they are different we stop the build as it's an error (having two library projects depending on two different versions of a jar file should be an error as we can be sure the two versions are API compatible). For later: not use the file name only? find a way to version the libraries and to have them declare whether they are API compatible with older versions? Also added a hard-coded case for the Android Support Library. If both the v4 and the v13 are detected, use the v13 only as it includes the v4 already. New test apps. Three cases: - main and library projects with duplicate jar files that are identical - main and library projects with duplicate jar files that are NOT identical - main and library projects with v4 and v13 in the dependency list. Change-Id: I3a9abdcbec635d7c9d3228bdd105120f77178b27
-rw-r--r--anttasks/src/com/android/ant/DexExecTask.java43
-rw-r--r--sdkmanager/libs/sdklib/src/com/android/sdklib/build/JarListSanitizer.java442
-rw-r--r--testapps/.gitignore6
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/libs/android-support-v4.jarbin0 -> 247894 bytes
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java15
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/ant.properties17
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/build.xml85
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/libs/android-support-v4.jarbin0 -> 247894 bytes
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/project.properties13
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests1/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java15
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/libs/android-support-v4.jarbin0 -> 247894 bytes
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/libs/foo.txt1
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests1/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java15
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/.classpath9
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/.project33
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/libs/android-support-v4.jarbin0 -> 247894 bytes
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java15
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/.classpath9
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/.project33
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/ant.properties17
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/build.xml85
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/libs/android-support-v4.jarbin0 -> 244970 bytes
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/project.properties13
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests2/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java15
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/.classpath8
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/.project33
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/libs/foo.txt1
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests2/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java15
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/libs/android-support-v4.jarbin0 -> 247894 bytes
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java15
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/ant.properties17
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/build.xml85
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/libs/android-support-v13.jarbin0 -> 307683 bytes
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/project.properties13
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests3/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java15
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/AndroidManifest.xml15
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/ant.properties17
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/build.xml85
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/libs/foo.txt1
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/proguard-project.txt20
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/project.properties13
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/res/layout/main.xml13
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/res/values/strings.xml4
-rw-r--r--testapps/jarCheckTests3/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java15
91 files changed, 2253 insertions, 4 deletions
diff --git a/anttasks/src/com/android/ant/DexExecTask.java b/anttasks/src/com/android/ant/DexExecTask.java
index 2d9479e..273f689 100644
--- a/anttasks/src/com/android/ant/DexExecTask.java
+++ b/anttasks/src/com/android/ant/DexExecTask.java
@@ -16,6 +16,10 @@
package com.android.ant;
+import com.android.sdklib.build.JarListSanitizer;
+import com.android.sdklib.build.JarListSanitizer.DifferentLibException;
+import com.android.sdklib.build.JarListSanitizer.Sha1Exception;
+
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.ExecTask;
import org.apache.tools.ant.types.FileSet;
@@ -162,8 +166,12 @@ public class DexExecTask extends SingleDependencyTask {
task.createArg().setValue(mOutput);
+ paths = sanitizePaths(paths);
+
for (File f : paths) {
- task.createArg().setValue(f.getAbsolutePath());
+ String absPath = f.getAbsolutePath();
+ System.out.println("Input: " + absPath);
+ task.createArg().setValue(absPath);
}
// execute it.
@@ -177,4 +185,37 @@ public class DexExecTask extends SingleDependencyTask {
protected String getExecTaskName() {
return "dx";
}
+
+ // private helper methods.
+
+ private List<File> sanitizePaths(List<File> paths) {
+ // first get the non-files.
+ List<File> results = new ArrayList<File>();
+ for (int i = 0 ; i < paths.size() ;) {
+ File f = paths.get(i);
+ // TEMP WORKAROUND: ignore classes.jar as all the output of libraries are
+ // called the same (in Ant) but are not actually the same jar file.
+ // TODO: Be aware of library output vs. regular jar dependency.
+ if (f.isFile() && f.getName().equals("classes.jar") == false) {
+ i++;
+ } else {
+ results.add(f);
+ paths.remove(i);
+ }
+ }
+
+ File outputFile = new File(mOutput);
+ JarListSanitizer sanitizer = new JarListSanitizer(outputFile.getParentFile());
+
+ try {
+ results.addAll(sanitizer.sanitize(paths));
+ } catch (DifferentLibException e) {
+ throw new BuildException(e.getMessage(), e);
+ } catch (Sha1Exception e) {
+ throw new BuildException(
+ "Failed to compute sha1 for " + e.getJarFile().getAbsolutePath(), e);
+ }
+
+ return results;
+ }
}
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/build/JarListSanitizer.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/build/JarListSanitizer.java
new file mode 100644
index 0000000..bd4d9a4
--- /dev/null
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/build/JarListSanitizer.java
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sdklib.build;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A Class to handle a list of jar files, finding and removing duplicates.
+ *
+ * Right now duplicates are based on:
+ * - same filename
+ * - same length
+ * - same content: using sha1 comparison.
+ *
+ * The length/sha1 are kept in a cache and only updated if the library is changed.
+ */
+public class JarListSanitizer {
+
+ private static final byte[] sBuffer = new byte[4096];
+ private static final String CACHE_FILENAME = "jarlist.cache";
+ private static final Pattern READ_PATTERN = Pattern.compile("^(\\d+) (\\d+) ([0-9a-f]+) (.+)$");
+
+ /**
+ * Simple class holding the data regarding a jar dependency.
+ *
+ */
+ private static final class JarEntity {
+ private final File mFile;
+ private final long mLastModified;
+ private long mLength;
+ private String mSha1;
+
+ /**
+ * Creates an entity from cached data.
+ * @param path the file path
+ * @param lastModified when it was last modified
+ * @param length its length
+ * @param sha1 its sha1
+ */
+ private JarEntity(String path, long lastModified, long length, String sha1) {
+ mFile = new File(path);
+ mLastModified = lastModified;
+ mLength = length;
+ mSha1 = sha1;
+ }
+
+ /**
+ * Creates an entity from a {@link File}.
+ * @param file the file.
+ */
+ private JarEntity(File file) {
+ mFile = file;
+ mLastModified = file.lastModified();
+ mLength = file.length();
+ }
+
+ /**
+ * Checks whether the {@link File#lastModified()} matches the cached value. If not, length
+ * is updated and the sha1 is reset (but not recomputed, this is done on demand).
+ * @return return whether the file was changed.
+ */
+ private boolean checkValidity() {
+ if (mLastModified != mFile.lastModified()) {
+ mLength = mFile.length();
+ mSha1 = null;
+ return true;
+ }
+
+ return false;
+ }
+
+ private File getFile() {
+ return mFile;
+ }
+
+ private long getLastModified() {
+ return mLastModified;
+ }
+
+ private long getLength() {
+ return mLength;
+ }
+
+ /**
+ * Returns the file's sha1, computing it if necessary.
+ * @return the sha1
+ * @throws Sha1Exception
+ */
+ private String getSha1() throws Sha1Exception {
+ if (mSha1 == null) {
+ mSha1 = JarListSanitizer.getSha1(mFile);
+ }
+ return mSha1;
+ }
+
+ private boolean hasSha1() {
+ return mSha1 != null;
+ }
+ }
+
+ /**
+ * Exception used to indicate the sanitized list of jar dependency cannot be computed due
+ * to inconsistency in duplicate jar files.
+ */
+ public static final class DifferentLibException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public DifferentLibException(String message) {
+ super(message);
+ }
+ }
+
+ /**
+ * Exception to indicate a failure to check a jar file's content.
+ */
+ public static final class Sha1Exception extends Exception {
+ private static final long serialVersionUID = 1L;
+ private final File mJarFile;
+
+ public Sha1Exception(File jarFile, Throwable cause) {
+ super(cause);
+ mJarFile = jarFile;
+ }
+
+ public File getJarFile() {
+ return mJarFile;
+ }
+ }
+
+ private final File mOut;
+
+ /**
+ * Creates a sanitizer.
+ * @param out the project output where the cache is to be stored.
+ */
+ public JarListSanitizer(File out) {
+ mOut = out;
+ }
+
+ /**
+ * Sanitize a given list of files
+ * @param files the list to sanitize
+ * @return a new list containing no duplicates.
+ * @throws DifferentLibException
+ * @throws Sha1Exception
+ */
+ public List<File> sanitize(List<File> files) throws DifferentLibException, Sha1Exception {
+ List<File> results = new ArrayList<File>();
+
+ // get the cache list.
+ Map<String, JarEntity> jarList = getCachedJarList();
+
+ boolean updateJarList = false;
+
+ // clean it up of removed files.
+ // use results as a temp storage to store the files to remove as we go through the map.
+ for (JarEntity entity : jarList.values()) {
+ if (entity.getFile().exists() == false) {
+ results.add(entity.getFile());
+ }
+ }
+
+ // the actual clean up.
+ if (results.size() > 0) {
+ for (File f : results) {
+ jarList.remove(f.getAbsolutePath());
+ }
+
+ results.clear();
+ updateJarList = true;
+ }
+
+ Map<String, List<JarEntity>> nameMap = new HashMap<String, List<JarEntity>>();
+
+ // update the current jar list if needed, while building a 2ndary map based on
+ // filename only.
+ for (File file : files) {
+ String path = file.getAbsolutePath();
+ JarEntity entity = jarList.get(path);
+
+ if (entity == null) {
+ entity = new JarEntity(file);
+ jarList.put(path, entity);
+ updateJarList = true;
+ } else {
+ updateJarList |= entity.checkValidity();
+ }
+
+ String filename = file.getName();
+ List<JarEntity> nameList = nameMap.get(filename);
+ if (nameList == null) {
+ nameList = new ArrayList<JarEntity>();
+ nameMap.put(filename, nameList);
+ }
+ nameList.add(entity);
+ }
+
+ try {
+ // now look for dups. Each name list can have more than one file but they must
+ // have the same size/sha1
+ for (Entry<String, List<JarEntity>> entry : nameMap.entrySet()) {
+ List<JarEntity> list = entry.getValue();
+ checkEntities(entry.getKey(), list);
+
+ // if we are here, there's no issue. Add the first of the list to the results.
+ results.add(list.get(0).getFile());
+ }
+
+ // special case for android-support-v4/13
+ checkSupportLibs(nameMap, results);
+ } finally {
+ if (updateJarList) {
+ writeJarList(nameMap);
+ }
+ }
+
+ return results;
+ }
+
+ /**
+ * Checks whether a given list of duplicates can be replaced by a single one.
+ * @param filename the filename of the files
+ * @param list the list of dup files
+ * @throws DifferentLibException
+ * @throws Sha1Exception
+ */
+ private void checkEntities(String filename, List<JarEntity> list)
+ throws DifferentLibException, Sha1Exception {
+ if (list.size() == 1) {
+ return;
+ }
+
+ JarEntity baseEntity = list.get(0);
+ long baseLength = baseEntity.getLength();
+ String baseSha1 = baseEntity.getSha1();
+
+ final int count = list.size();
+ for (int i = 1; i < count ; i++) {
+ JarEntity entity = list.get(i);
+ if (entity.getLength() != baseLength || entity.getSha1().equals(baseSha1) == false) {
+ printEntityDetails(filename, list);
+ throw new DifferentLibException("Jar mismatch! Fix your dependencies");
+ }
+
+ }
+ }
+
+ /**
+ * Checks for present of both support libraries in v4 and v13. If both are detected,
+ * v4 is removed from <var>results</var>
+ * @param nameMap the list of jar as a map of (filename, list of files).
+ * @param results the current list of jar file set to be used. it's already been cleaned of
+ * duplicates.
+ */
+ private void checkSupportLibs(Map<String, List<JarEntity>> nameMap, List<File> results) {
+ List<JarEntity> v4 = nameMap.get("android-support-v4.jar");
+ List<JarEntity> v13 = nameMap.get("android-support-v13.jar");
+
+ if (v13 != null && v4 != null) {
+ System.out.println("WARNING: Found both android-support-v4 and android-support-v13 in the dependency list.");
+ System.out.println("Because v13 includes v4, using only v13.");
+ results.remove(v4.get(0).getFile());
+ }
+ }
+
+ private Map<String, JarEntity> getCachedJarList() {
+ Map<String, JarEntity> cache = new HashMap<String, JarListSanitizer.JarEntity>();
+
+ File cacheFile = new File(mOut, CACHE_FILENAME);
+ if (cacheFile.exists() == false) {
+ return cache;
+ }
+
+ BufferedReader reader = null;
+ try {
+ reader = new BufferedReader(new InputStreamReader(new FileInputStream(cacheFile),
+ "UTF-8"));
+
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ // skip comments
+ if (line.charAt(0) == '#') {
+ continue;
+ }
+
+ // get the data with a regexp
+ Matcher m = READ_PATTERN.matcher(line);
+ if (m.matches()) {
+ String path = m.group(4);
+
+ JarEntity entity = new JarEntity(
+ path,
+ Long.parseLong(m.group(1)),
+ Long.parseLong(m.group(2)),
+ m.group(3));
+
+ cache.put(path, entity);
+ }
+ }
+
+ } catch (FileNotFoundException e) {
+ // won't happen, we check up front.
+ } catch (UnsupportedEncodingException e) {
+ // shouldn't happen, but if it does, we just won't have a cache.
+ } catch (IOException e) {
+ // shouldn't happen, but if it does, we just won't have a cache.
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ return cache;
+ }
+
+ private void writeJarList(Map<String, List<JarEntity>> nameMap) {
+ File cacheFile = new File(mOut, CACHE_FILENAME);
+ try {
+ OutputStreamWriter writer = new OutputStreamWriter(
+ new FileOutputStream(cacheFile), "UTF-8");
+
+ writer.write("# cache for current jar dependecy. DO NOT EDIT.\n");
+ writer.write("# format is <lastModified> <length> <SHA-1> <path>\n");
+ writer.write("# Encoding is UTF-8\n");
+
+ for (List<JarEntity> list : nameMap.values()) {
+ // clean up the list of files that don't have a sha1.
+ for (int i = 0 ; i < list.size() ; ) {
+ JarEntity entity = list.get(i);
+ if (entity.hasSha1()) {
+ i++;
+ } else {
+ list.remove(i);
+ }
+ }
+
+ if (list.size() > 1) {
+ for (JarEntity entity : list) {
+ writer.write(String.format("%d %d %s %s\n",
+ entity.getLastModified(),
+ entity.getLength(),
+ entity.getSha1(),
+ entity.getFile().getAbsolutePath()));
+ }
+ }
+ }
+
+ writer.close();
+ } catch (IOException e) {
+ System.err.println("WARNING: unable to write jarlist cache file " +
+ cacheFile.getAbsolutePath());
+ } catch (Sha1Exception e) {
+ // shouldn't happen here since we check that the sha1 is present first, meaning it's
+ // already been computing.
+ }
+ }
+
+ private void printEntityDetails(String filename, List<JarEntity> list) throws Sha1Exception {
+ System.err.println(
+ String.format("Found %d versions of %s in the dependency list,",
+ list.size(), filename));
+ System.err.println("but not all the versions are identical (check is based on SHA-1 only at this time).");
+ System.err.println("All versions of the libraries must be the same at this time.");
+ System.err.println("Versions found are:");
+ for (JarEntity entity : list) {
+ System.err.println("Path: " + entity.getFile().getAbsolutePath());
+ System.err.println("\tLength: " + entity.getLength());
+ System.err.println("\tSHA-1: " + entity.getSha1());
+ }
+ }
+
+ /**
+ * Computes the sha1 of a file and returns it.
+ * @param f the file to compute the sha1 for.
+ * @return the sha1 value
+ * @throws Sha1Exception if the sha1 value cannot be computed.
+ */
+ private static String getSha1(File f) throws Sha1Exception {
+ synchronized (sBuffer) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("SHA-1");
+
+ FileInputStream fis = new FileInputStream(f);
+ while (true) {
+ int length = fis.read(sBuffer);
+ if (length > 0) {
+ md.update(sBuffer, 0, length);
+ } else {
+ break;
+ }
+ }
+
+ return byteArray2Hex(md.digest());
+
+ } catch (Exception e) {
+ throw new Sha1Exception(f, e);
+ }
+ }
+ }
+
+ private static String byteArray2Hex(final byte[] hash) {
+ Formatter formatter = new Formatter();
+ for (byte b : hash) {
+ formatter.format("%02x", b);
+ }
+ return formatter.toString();
+ }
+}
diff --git a/testapps/.gitignore b/testapps/.gitignore
index 0c75cfd..846ae70 100644
--- a/testapps/.gitignore
+++ b/testapps/.gitignore
@@ -1,3 +1,3 @@
-*/bin
-*/local.properties
-*/gen
+bin
+local.properties
+gen
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/AndroidManifest.xml b/testapps/jarCheckTests1/basicLibWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..a634bdb
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/ant.properties b/testapps/jarCheckTests1/basicLibWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/build.xml b/testapps/jarCheckTests1/basicLibWithSupport/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/libs/android-support-v4.jar b/testapps/jarCheckTests1/basicLibWithSupport/libs/android-support-v4.jar
new file mode 100644
index 0000000..d006198
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/proguard-project.txt b/testapps/jarCheckTests1/basicLibWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/project.properties b/testapps/jarCheckTests1/basicLibWithSupport/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/res/layout/main.xml b/testapps/jarCheckTests1/basicLibWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/res/values/strings.xml b/testapps/jarCheckTests1/basicLibWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java b/testapps/jarCheckTests1/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
new file mode 100644
index 0000000..2c316ca
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/AndroidManifest.xml b/testapps/jarCheckTests1/basicLibWithSupport2/AndroidManifest.xml
new file mode 100644
index 0000000..6fa91eb
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport2"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/ant.properties b/testapps/jarCheckTests1/basicLibWithSupport2/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/build.xml b/testapps/jarCheckTests1/basicLibWithSupport2/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/libs/android-support-v4.jar b/testapps/jarCheckTests1/basicLibWithSupport2/libs/android-support-v4.jar
new file mode 100644
index 0000000..d006198
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/proguard-project.txt b/testapps/jarCheckTests1/basicLibWithSupport2/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/project.properties b/testapps/jarCheckTests1/basicLibWithSupport2/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/res/layout/main.xml b/testapps/jarCheckTests1/basicLibWithSupport2/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/res/values/strings.xml b/testapps/jarCheckTests1/basicLibWithSupport2/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests1/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java b/testapps/jarCheckTests1/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
new file mode 100644
index 0000000..fc97aa7
--- /dev/null
+++ b/testapps/jarCheckTests1/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport2;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/AndroidManifest.xml b/testapps/jarCheckTests1/basicProjectWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..ff41761
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.projectwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/ant.properties b/testapps/jarCheckTests1/basicProjectWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/build.xml b/testapps/jarCheckTests1/basicProjectWithSupport/build.xml
new file mode 100644
index 0000000..f3a3d91
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicProjectWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/libs/android-support-v4.jar b/testapps/jarCheckTests1/basicProjectWithSupport/libs/android-support-v4.jar
new file mode 100644
index 0000000..d006198
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/libs/foo.txt b/testapps/jarCheckTests1/basicProjectWithSupport/libs/foo.txt
new file mode 100644
index 0000000..fe0c852
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/libs/foo.txt
@@ -0,0 +1 @@
+sdf \ No newline at end of file
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/proguard-project.txt b/testapps/jarCheckTests1/basicProjectWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/project.properties b/testapps/jarCheckTests1/basicProjectWithSupport/project.properties
new file mode 100644
index 0000000..3c58bfa
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library.reference.1=../basicLibWithSupport
+android.library.reference.2=../basicLibWithSupport2
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/res/layout/main.xml b/testapps/jarCheckTests1/basicProjectWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/res/values/strings.xml b/testapps/jarCheckTests1/basicProjectWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests1/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java b/testapps/jarCheckTests1/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
new file mode 100644
index 0000000..c065839
--- /dev/null
+++ b/testapps/jarCheckTests1/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.projectwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/.classpath b/testapps/jarCheckTests2/basicLibWithSupport/.classpath
new file mode 100644
index 0000000..c5c5afd
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry kind="lib" path="libs/android-support-v4.jar"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/.project b/testapps/jarCheckTests2/basicLibWithSupport/.project
new file mode 100644
index 0000000..467950f
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test2Lib1</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/AndroidManifest.xml b/testapps/jarCheckTests2/basicLibWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..a634bdb
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/ant.properties b/testapps/jarCheckTests2/basicLibWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/build.xml b/testapps/jarCheckTests2/basicLibWithSupport/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/libs/android-support-v4.jar b/testapps/jarCheckTests2/basicLibWithSupport/libs/android-support-v4.jar
new file mode 100644
index 0000000..d006198
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/proguard-project.txt b/testapps/jarCheckTests2/basicLibWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/project.properties b/testapps/jarCheckTests2/basicLibWithSupport/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/res/layout/main.xml b/testapps/jarCheckTests2/basicLibWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/res/values/strings.xml b/testapps/jarCheckTests2/basicLibWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java b/testapps/jarCheckTests2/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
new file mode 100644
index 0000000..2c316ca
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/.classpath b/testapps/jarCheckTests2/basicLibWithSupport2/.classpath
new file mode 100644
index 0000000..c5c5afd
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry kind="lib" path="libs/android-support-v4.jar"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/.project b/testapps/jarCheckTests2/basicLibWithSupport2/.project
new file mode 100644
index 0000000..efeaaae
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test2Lib2</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/AndroidManifest.xml b/testapps/jarCheckTests2/basicLibWithSupport2/AndroidManifest.xml
new file mode 100644
index 0000000..6fa91eb
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport2"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/ant.properties b/testapps/jarCheckTests2/basicLibWithSupport2/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/build.xml b/testapps/jarCheckTests2/basicLibWithSupport2/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/libs/android-support-v4.jar b/testapps/jarCheckTests2/basicLibWithSupport2/libs/android-support-v4.jar
new file mode 100644
index 0000000..1e90718
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/proguard-project.txt b/testapps/jarCheckTests2/basicLibWithSupport2/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/project.properties b/testapps/jarCheckTests2/basicLibWithSupport2/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/res/layout/main.xml b/testapps/jarCheckTests2/basicLibWithSupport2/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/res/values/strings.xml b/testapps/jarCheckTests2/basicLibWithSupport2/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests2/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java b/testapps/jarCheckTests2/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
new file mode 100644
index 0000000..fc97aa7
--- /dev/null
+++ b/testapps/jarCheckTests2/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport2;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/.classpath b/testapps/jarCheckTests2/basicProjectWithSupport/.classpath
new file mode 100644
index 0000000..a4763d1
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/.project b/testapps/jarCheckTests2/basicProjectWithSupport/.project
new file mode 100644
index 0000000..f236696
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test2App</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/AndroidManifest.xml b/testapps/jarCheckTests2/basicProjectWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..ff41761
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.projectwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/ant.properties b/testapps/jarCheckTests2/basicProjectWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/build.xml b/testapps/jarCheckTests2/basicProjectWithSupport/build.xml
new file mode 100644
index 0000000..f3a3d91
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicProjectWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/libs/foo.txt b/testapps/jarCheckTests2/basicProjectWithSupport/libs/foo.txt
new file mode 100644
index 0000000..fe0c852
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/libs/foo.txt
@@ -0,0 +1 @@
+sdf \ No newline at end of file
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/proguard-project.txt b/testapps/jarCheckTests2/basicProjectWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/project.properties b/testapps/jarCheckTests2/basicProjectWithSupport/project.properties
new file mode 100644
index 0000000..cf77006
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library.reference.1=../basicLibWithSupport
+android.library.reference.2=../basicLibWithSupport2 \ No newline at end of file
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/res/layout/main.xml b/testapps/jarCheckTests2/basicProjectWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/res/values/strings.xml b/testapps/jarCheckTests2/basicProjectWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests2/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java b/testapps/jarCheckTests2/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
new file mode 100644
index 0000000..c065839
--- /dev/null
+++ b/testapps/jarCheckTests2/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.projectwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/AndroidManifest.xml b/testapps/jarCheckTests3/basicLibWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..a634bdb
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/ant.properties b/testapps/jarCheckTests3/basicLibWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/build.xml b/testapps/jarCheckTests3/basicLibWithSupport/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/libs/android-support-v4.jar b/testapps/jarCheckTests3/basicLibWithSupport/libs/android-support-v4.jar
new file mode 100644
index 0000000..d006198
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/libs/android-support-v4.jar
Binary files differ
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/proguard-project.txt b/testapps/jarCheckTests3/basicLibWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/project.properties b/testapps/jarCheckTests3/basicLibWithSupport/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/res/layout/main.xml b/testapps/jarCheckTests3/basicLibWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/res/values/strings.xml b/testapps/jarCheckTests3/basicLibWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java b/testapps/jarCheckTests3/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
new file mode 100644
index 0000000..2c316ca
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport/src/com/android/tests/libwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/AndroidManifest.xml b/testapps/jarCheckTests3/basicLibWithSupport2/AndroidManifest.xml
new file mode 100644
index 0000000..6fa91eb
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.libwithsupport2"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/ant.properties b/testapps/jarCheckTests3/basicLibWithSupport2/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/build.xml b/testapps/jarCheckTests3/basicLibWithSupport2/build.xml
new file mode 100644
index 0000000..772f422
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicLibWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/libs/android-support-v13.jar b/testapps/jarCheckTests3/basicLibWithSupport2/libs/android-support-v13.jar
new file mode 100644
index 0000000..c9354ec
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/libs/android-support-v13.jar
Binary files differ
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/proguard-project.txt b/testapps/jarCheckTests3/basicLibWithSupport2/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/project.properties b/testapps/jarCheckTests3/basicLibWithSupport2/project.properties
new file mode 100644
index 0000000..23d80c4
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library=true
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/res/layout/main.xml b/testapps/jarCheckTests3/basicLibWithSupport2/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/res/values/strings.xml b/testapps/jarCheckTests3/basicLibWithSupport2/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests3/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java b/testapps/jarCheckTests3/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
new file mode 100644
index 0000000..fc97aa7
--- /dev/null
+++ b/testapps/jarCheckTests3/basicLibWithSupport2/src/com/android/tests/libwithsupport2/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.libwithsupport2;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/AndroidManifest.xml b/testapps/jarCheckTests3/basicProjectWithSupport/AndroidManifest.xml
new file mode 100644
index 0000000..ff41761
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.projectwithsupport"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/app_name">
+ <activity android:name=".MyActivity"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/ant.properties b/testapps/jarCheckTests3/basicProjectWithSupport/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/build.xml b/testapps/jarCheckTests3/basicProjectWithSupport/build.xml
new file mode 100644
index 0000000..f3a3d91
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="basicProjectWithSupport" default="help">
+
+ <!-- The local.properties file is created and updated by the 'android' tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The ant.properties file can be created by you. It is only edited by the
+ 'android' tool to add properties to it.
+ This is the place to change some Ant specific build properties.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ For other overridable properties, look at the beginning of the rules
+ files in the SDK, at tools/ant/build.xml
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="ant.properties" />
+
+ <!-- The project.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+
+ This contains project specific properties such as project target, and library
+ dependencies. Lower level build properties are stored in ant.properties
+ (or in .classpath for Eclipse projects).
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <loadproperties srcFile="project.properties" />
+
+ <!-- quick check on sdk.dir -->
+ <fail
+ message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
+ unless="sdk.dir"
+ />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ /* This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir} */
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Import the actual build file.
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <import> task.
+ - customize it to your needs.
+ - Customize the whole content of build.xml
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, replacing the <import> task.
+ - customize to your needs.
+
+ ***********************
+ ****** IMPORTANT ******
+ ***********************
+ In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+ in order to avoid having your file be overridden by tools such as "android update project"
+ -->
+ <!-- version-tag: 1 -->
+ <import file="${sdk.dir}/tools/ant/build.xml" />
+
+</project>
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/libs/foo.txt b/testapps/jarCheckTests3/basicProjectWithSupport/libs/foo.txt
new file mode 100644
index 0000000..fe0c852
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/libs/foo.txt
@@ -0,0 +1 @@
+sdf \ No newline at end of file
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/proguard-project.txt b/testapps/jarCheckTests3/basicProjectWithSupport/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/project.properties b/testapps/jarCheckTests3/basicProjectWithSupport/project.properties
new file mode 100644
index 0000000..3c58bfa
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/project.properties
@@ -0,0 +1,13 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-15
+android.library.reference.1=../basicLibWithSupport
+android.library.reference.2=../basicLibWithSupport2
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/res/layout/main.xml b/testapps/jarCheckTests3/basicProjectWithSupport/res/layout/main.xml
new file mode 100644
index 0000000..7fe5dce
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/res/layout/main.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Hello World, MyActivity"
+ />
+</LinearLayout>
+
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/res/values/strings.xml b/testapps/jarCheckTests3/basicProjectWithSupport/res/values/strings.xml
new file mode 100644
index 0000000..3fa203a
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">MyActivity</string>
+</resources>
diff --git a/testapps/jarCheckTests3/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java b/testapps/jarCheckTests3/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
new file mode 100644
index 0000000..c065839
--- /dev/null
+++ b/testapps/jarCheckTests3/basicProjectWithSupport/src/com/android/tests/projectwithsupport/MyActivity.java
@@ -0,0 +1,15 @@
+package com.android.tests.projectwithsupport;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MyActivity extends Activity
+{
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+}