diff options
3 files changed, 26 insertions, 29 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java index ad4b787..e8fbadb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java @@ -63,6 +63,7 @@ import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -111,6 +112,7 @@ public class BuildHelper { public static long sStartJavaCTime = 0; private final static int MILLION = 1000000; + private String mProguardFile; /** * An object able to put a marker on a resource. @@ -284,9 +286,7 @@ public class BuildHelper { * @param intermediateApk The path to the temporary resource file. * @param dex The path to the dex file. * @param output The path to the final package file to create. - * @param javaProject the java project being compiled * @param libProjects an optional list of library projects (can be null) - * @param referencedJavaProjects referenced projects. * @return true if success, false otherwise. * @throws ApkCreationException * @throws AndroidLocationException @@ -296,8 +296,7 @@ public class BuildHelper { * @throws DuplicateFileException */ public void finalDebugPackage(String intermediateApk, String dex, String output, - final IJavaProject javaProject, List<IProject> libProjects, - List<IJavaProject> referencedJavaProjects, ResourceMarker resMarker) + List<IProject> libProjects, ResourceMarker resMarker) throws ApkCreationException, KeytoolException, AndroidLocationException, NativeLibInJarException, DuplicateFileException, CoreException { @@ -321,8 +320,7 @@ public class BuildHelper { // from the keystore, get the signing info SigningInfo info = ApkBuilder.getDebugKey(keystoreOsPath, mVerbose ? mOutStream : null); - finalPackage(intermediateApk, dex, output, javaProject, libProjects, - referencedJavaProjects, + finalPackage(intermediateApk, dex, output, libProjects, info != null ? info.key : null, info != null ? info.certificate : null, resMarker); } @@ -338,9 +336,7 @@ public class BuildHelper { * @param dex The path to the dex file. * @param output The path to the final package file to create. * @param debugSign whether the apk must be signed with the debug key. - * @param javaProject the java project being compiled * @param libProjects an optional list of library projects (can be null) - * @param referencedJavaProjects referenced projects. * @param abiFilter an optional filter. If not null, then only the matching ABI is included in * the final archive * @return true if success, false otherwise. @@ -350,9 +346,8 @@ public class BuildHelper { * @throws DuplicateFileException */ public void finalPackage(String intermediateApk, String dex, String output, - final IJavaProject javaProject, List<IProject> libProjects, - List<IJavaProject> referencedJavaProjects, PrivateKey key, - X509Certificate certificate, ResourceMarker resMarker) + List<IProject> libProjects, + PrivateKey key, X509Certificate certificate, ResourceMarker resMarker) throws NativeLibInJarException, ApkCreationException, DuplicateFileException, CoreException { @@ -362,8 +357,16 @@ public class BuildHelper { mVerbose ? mOutStream: null); apkBuilder.setDebugMode(mDebugMode); + // either use the full compiled code paths or just the proguard file + // if present + Collection<String> pathsCollection = mCompiledCodePaths; + if (mProguardFile != null) { + pathsCollection = Collections.singletonList(mProguardFile); + mProguardFile = null; + } + // Now we write the standard resources from all the output paths. - for (String path : mCompiledCodePaths) { + for (String path : pathsCollection) { File file = new File(path); if (file.isFile()) { JarStatus jarStatus = apkBuilder.addResourcesFromJar(file); @@ -447,6 +450,10 @@ public class BuildHelper { } } + public void setProguardOutput(String proguardFile) { + mProguardFile = proguardFile; + } + public Collection<String> getCompiledCodePaths() { return mCompiledCodePaths; } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java index 1c4f3f3..8be6863 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java @@ -680,8 +680,7 @@ public class PostCompilerBuilder extends BaseBuilder { } helper.finalDebugPackage( osAndroidBinPath + File.separator + AdtConstants.FN_RESOURCES_AP_, - classesDexPath, osFinalPackagePath, - javaProject, libProjects, referencedJavaProjects, mResourceMarker); + classesDexPath, osFinalPackagePath, libProjects, mResourceMarker); } catch (KeytoolException e) { String eMessage = e.getMessage(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java index c95569b..86c9b22 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ExportHelper.java @@ -20,7 +20,6 @@ import static com.android.sdklib.internal.project.ProjectProperties.PROPERTY_SDK import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; -import com.android.ide.eclipse.adt.AdtUtils; import com.android.ide.eclipse.adt.AndroidPrintStream; import com.android.ide.eclipse.adt.internal.build.BuildHelper; import com.android.ide.eclipse.adt.internal.build.DexException; @@ -237,6 +236,8 @@ public final class ExportHelper { helper.runProguard(proguardConfigFiles, inputJar, jars, obfuscatedJar, new File(project.getLocation().toFile(), SdkConstants.FD_PROGUARD)); + helper.setProguardOutput(obfuscatedJar.getAbsolutePath()); + // dx input is proguard's output dxInput = Collections.singletonList(obfuscatedJar.getAbsolutePath()); } else { @@ -246,9 +247,6 @@ public final class ExportHelper { } IJavaProject javaProject = JavaCore.create(project); - List<IProject> javaProjects = ProjectHelper.getReferencedProjects(project); - List<IJavaProject> referencedJavaProjects = BuildHelper.getJavaProjects( - javaProjects); helper.executeDx(javaProject, dxInput, dexFile.getAbsolutePath()); @@ -258,9 +256,7 @@ public final class ExportHelper { resourceFile.getAbsolutePath(), dexFile.getAbsolutePath(), outputFile.getAbsolutePath(), - javaProject, libProjects, - referencedJavaProjects, key, certificate, null); //resourceMarker @@ -375,17 +371,12 @@ public final class ExportHelper { private static void addFileToJar(JarOutputStream jar, File file, File rootDirectory) throws IOException { if (file.isDirectory()) { - for (File child: file.listFiles()) { - addFileToJar(jar, child, rootDirectory); + if (file.getName().equals("META-INF") == false) { + for (File child: file.listFiles()) { + addFileToJar(jar, child, rootDirectory); + } } - } else if (file.isFile()) { - // check the extension - String name = file.getName(); - if (!AdtUtils.endsWith(name, AdtConstants.DOT_CLASS)) { - return; - } - String rootPath = rootDirectory.getAbsolutePath(); String path = file.getAbsolutePath(); path = path.substring(rootPath.length()).replace("\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$ |