Author: sisbell
Date: Fri Jan 11 00:13:23 2008
New Revision: 611101

URL: http://svn.apache.org/viewvc?rev=611101&view=rev
Log:
Now supports compiling compile scope dependencies of a project into the apk 
package.

Modified:
    
maven/sandbox/trunk/plugins/maven-android/maven-aapt-plugin/src/main/java/org/maven/maven/plugin/aapt/AaptPackagerMojo.java
    maven/sandbox/trunk/plugins/maven-android/maven-android.iml
    
maven/sandbox/trunk/plugins/maven-android/maven-dx-plugin/src/main/java/org/apache/maven/plugin/android/DxMojo.java

Modified: 
maven/sandbox/trunk/plugins/maven-android/maven-aapt-plugin/src/main/java/org/maven/maven/plugin/aapt/AaptPackagerMojo.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-android/maven-aapt-plugin/src/main/java/org/maven/maven/plugin/aapt/AaptPackagerMojo.java?rev=611101&r1=611100&r2=611101&view=diff
==============================================================================
--- 
maven/sandbox/trunk/plugins/maven-android/maven-aapt-plugin/src/main/java/org/maven/maven/plugin/aapt/AaptPackagerMojo.java
 (original)
+++ 
maven/sandbox/trunk/plugins/maven-android/maven-aapt-plugin/src/main/java/org/maven/maven/plugin/aapt/AaptPackagerMojo.java
 Fri Jan 11 00:13:23 2008
@@ -113,6 +113,10 @@
         } catch (ExecutionException e) {
             throw new MojoExecutionException("", e);
         }
+
+        File dexClassesFile = new File(project.getBasedir(), "target" + 
File.separator + project.getArtifactId() + "-"
+                + project.getVersion() + "-classes.dex");
+
         ZipOutputStream os = null;
         InputStream is = null;
 
@@ -131,7 +135,7 @@
                 is.close();
             }
             os.putNextEntry(new ZipEntry("classes.dex"));
-            is = new FileInputStream(project.getBasedir().getAbsolutePath() + 
File.separatorChar + "target/classes.dex");
+            is = new FileInputStream(dexClassesFile);
             byte[] buffer = new byte[1024];
             int i;
             while ((i = is.read(buffer)) > 0) {

Modified: maven/sandbox/trunk/plugins/maven-android/maven-android.iml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-android/maven-android.iml?rev=611101&r1=611100&r2=611101&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-android/maven-android.iml (original)
+++ maven/sandbox/trunk/plugins/maven-android/maven-android.iml Fri Jan 11 
00:13:23 2008
@@ -5,6 +5,8 @@
     <output url="file://$MODULE_DIR$/classes" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
+      <sourceFolder 
url="file://$MODULE_DIR$/integration-tests/multimodule/moduleA/src" 
isTestSource="false" />
+      <sourceFolder 
url="file://$MODULE_DIR$/integration-tests/multimodule/moduleB/src" 
isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/maven-aapt-plugin/src/main/java" 
isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/maven-adb-plugin/src/main/java" 
isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/maven-android-core/src/main/java" 
isTestSource="false" />

Modified: 
maven/sandbox/trunk/plugins/maven-android/maven-dx-plugin/src/main/java/org/apache/maven/plugin/android/DxMojo.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-android/maven-dx-plugin/src/main/java/org/apache/maven/plugin/android/DxMojo.java?rev=611101&r1=611100&r2=611101&view=diff
==============================================================================
--- 
maven/sandbox/trunk/plugins/maven-android/maven-dx-plugin/src/main/java/org/apache/maven/plugin/android/DxMojo.java
 (original)
+++ 
maven/sandbox/trunk/plugins/maven-android/maven-dx-plugin/src/main/java/org/apache/maven/plugin/android/DxMojo.java
 Fri Jan 11 00:13:23 2008
@@ -26,10 +26,16 @@
 import org.apache.maven.project.MavenProjectHelper;
 import org.apache.maven.android.ExecutionException;
 import org.apache.maven.android.CommandExecutor;
+import org.apache.maven.artifact.Artifact;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
 
 import java.util.List;
 import java.util.ArrayList;
-import java.io.File;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.jar.JarEntry;
+import java.io.*;
 
 /**
  * @author Shane Isbell
@@ -57,14 +63,36 @@
 
         CommandExecutor executor = 
CommandExecutor.Factory.createDefaultCommmandExecutor();
         executor.setLogger(this.getLog());
-        File outputFile = new File(project.getBasedir(), "target" + 
File.separator + "classes.dex");
+
+
+        File outputFile = new File(project.getBasedir(), "target" + 
File.separator + project.getArtifactId() + "-"
+                + project.getVersion() + "-classes.dex");
         File inputFile = new File(project.getBasedir(), "target" + 
File.separator + project.getArtifactId() + "-"
                 + project.getVersion() + ".jar");
 
+        //Unpackage all dependent and main classes
+        File outputDirectory = new File(project.getBuild().getDirectory(), 
"android-classes");
+        for (Artifact artifact : (List<Artifact>) 
project.getCompileArtifacts()) {
+            if (artifact.getGroupId().equals("android")) {
+                continue;
+            }
+            try {
+                unjar(new JarFile(artifact.getFile()), outputDirectory);
+            } catch (IOException e) {
+                throw new MojoExecutionException("", e);
+            }
+        }
+
+        try {
+            unjar(new JarFile(inputFile), outputDirectory);
+        } catch (IOException e) {
+            throw new MojoExecutionException("", e);
+        }
+
         List<String> commands = new ArrayList<String>();
         commands.add("--dex");
         commands.add("--output=" + outputFile.getAbsolutePath());
-        commands.add(inputFile.getAbsolutePath());
+        commands.add(outputDirectory.getAbsolutePath());
         getLog().info("dx " + commands.toString());
         try {
             executor.executeCommand("dx", commands, project.getBasedir(), 
false);
@@ -73,5 +101,18 @@
         }
 
         mavenProjectHelper.attachArtifact(project, "jar", 
project.getArtifact().getClassifier(), inputFile);
+    }
+
+    private static void unjar(JarFile jarFile, File outputDirectory) throws 
IOException {
+        for (Enumeration en = jarFile.entries(); en.hasMoreElements();) {
+            JarEntry entry = (JarEntry) en.nextElement();
+            File entryFile = new File(outputDirectory, entry.getName());
+            if (!entryFile.getParentFile().exists() && 
!entry.getName().startsWith("META-INF")) {
+                entryFile.getParentFile().mkdirs();
+            }
+            if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
+                IOUtil.copy(jarFile.getInputStream(entry), new 
FileOutputStream(entryFile));
+            }
+        }
     }
 }


Reply via email to