2012-06-29 13 views
5

Quiero cambiar a maven para mi proceso de compilación en el desarrollo de Android. Seguí http://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-archetype.html para crear el pom.xml y ajusté la versión un poco para poder utilizar la última versión del android-maven-plugin.ClassNotFoundException en la compilación de apk con maven

Mientras que mi apk se compila bien manualmente desde mi IDE (IntellJ), hay problemas con el apk construido con maven. Obviamente, falta algo que no ponga las clases en la aplicación.

Cuando compruebo las dos aplicaciones generadas (descomprimiéndolas), Me parece que las clases.dex del apk generado maven son mucho más pequeñas (2.6kB) que las regulares (24.9kB). Obviamente faltan clases allí.

lo tanto, cuando a partir de este apk, estoy recibiendo el siguiente error:

E/AndroidRuntime(31228): FATAL EXCEPTION: main 
E/AndroidRuntime(31228): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.abc/com.mycompany.abc.ABCActivity}: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk] 
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
E/AndroidRuntime(31228): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
E/AndroidRuntime(31228): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
E/AndroidRuntime(31228): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
E/AndroidRuntime(31228): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(31228): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(31228): at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime(31228): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(31228): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime(31228): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(31228): Caused by: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk] 
E/AndroidRuntime(31228): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
E/AndroidRuntime(31228): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
E/AndroidRuntime(31228): ... 11 more 
W/ActivityManager(4964): Force finishing activity com.mycompany.abc/.ABCActivity 
W/ActivityManager(4964): Activity pause timeout for HistoryRecord{40902960 com.mycompany.abc/.ABCActivity} 

Ésta es mi pom.xml, en el que yo uso: mvn install -P sign o mvn android:apk

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>com.mycompany.abc</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>apk</packaging> 
    <name>com.mycompany.abc</name> 

    <dependencies> 
     <dependency> 
      <groupId>com.google.android</groupId> 
      <artifactId>android</artifactId> 
      <version>2.2.1</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <!-- Simply read properties from file --> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>properties-maven-plugin</artifactId> 
       <version>1.0-alpha-2</version> 
       <executions> 
        <execution> 
         <phase>initialize</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>android.properties</file> 
          </files> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.2.0</version> 
       <configuration> 
        <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> 
        <assetsDirectory>${project.basedir}/assets</assetsDirectory> 
        <resourceDirectory>${project.basedir}/res</resourceDirectory> 
        <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory> 
        <sdk> 
         <platform>11</platform> 
        </sdk> 
        <deleteConflictingFiles>true</deleteConflictingFiles> 
        <undeployBeforeDeploy>true</undeployBeforeDeploy> 
        <device>usb</device> 
       </configuration> 
       <extensions>true</extensions> 
      </plugin> 

      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <artifactId>exec-maven-plugin</artifactId> 
       <groupId>org.codehaus.mojo</groupId> 
       <configuration> 
        <executable>${basedir}/scripts/run_app.sh</executable> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>sign</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-jarsigner-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
          <execution> 
           <id>signing</id> 
           <goals> 
            <goal>sign</goal> 
           </goals> 
           <phase>package</phase> 
           <inherited>true</inherited> 
           <configuration> 
            <archiveDirectory></archiveDirectory> 
            <includes> 
             <include>target/*.apk</include> 
            </includes> 
            <keystore>/path/to/debug.keystore</keystore> 
            <storepass>android</storepass> 
            <keypass>android</keypass> 
            <alias>androiddebugkey</alias> 
            <arguments> 
             <argument>-sigalg</argument><argument>MD5withRSA</argument> 
             <argument>-digestalg</argument><argument>SHA1</argument> 
            </arguments> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
        <plugin> 
         <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
         <artifactId>android-maven-plugin</artifactId> 
         <inherited>true</inherited> 
         <configuration> 
          <sign> 
           <debug>false</debug> 
          </sign> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 

</project> 

Respuesta

13

encontró el problema:

<sourceDirectory>src</sourceDirectory> 

faltaba en la sección build. Me pregunto por qué el arquetipo de Android (cuando se ejecuta archetype:generate) ya no incluye eso, ya que es bastante estándar en Android.

+0

Hmm, cuando agrego esto recibo errores relacionados con Junit que no existe. Parece que ahora busca todo en el directorio src. Estoy agregando esto en root. ¿Es esto correcto? – conor

+0

sí, en la raíz , funciona bien para mí. Quizás esto también sea útil, no estoy seguro, simplemente lo busqué en Google: https://groups.google.com/forum/?fromgroups=#!topic/maven-android-developers/kgUSnjTLHQg –

+0

Funciona como un encanto para mí también. Pensé que Maven usó src como directorio de origen predeterminado si no se proporcionó ninguno. Pero soy un poco nuevo con respecto a Maven, todavía estoy aprendiendo más de lo que estoy produciendo :) – daffycricket

Cuestiones relacionadas