2014-04-29 3 views
1

Je suis en train d'emballer application qui utilise Akka, mais je reçois un message d'erreur bien connu:Shrink Akka avec Proguard en utilisant Maven

[INFO] trouble writing output: Too many method references: 80536; max is 65536. 
[INFO] You may try using --multi-dex option. 

J'ai trouvé une configuration proguard qui devrait réduire la bibliothèque Akka: https://bitbucket.org/mackler/safe-metronome/src/16f880347863f560d025016ece19d586fbb9874d/project/proguard.cfg?at=default

J'ai configuré ma build Maven pour utiliser une configuration similaire, mais il ne semble pas que cette bibliothèque Akka soit rétrécie. Dans la mesure où je comprends pour appliquer proguard sur les dépendances de projet, il est nécessaire de faire un seul pot avec toutes les dépendances et de le nourrir jar joint à proguard.

Voici ma config Maven:

<dependencies> 
     <dependency> 
      <groupId>com.google.android</groupId> 
      <artifactId>android</artifactId> 
      <version>4.1.1.4</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-actor_2.10</artifactId> 
      <version>2.4-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <finalName>${project.artifactId}</finalName> 

     <plugins> 
      <plugin> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.7.0</version> 
       <extensions>true</extensions> 
       <configuration> 
        <sdk> 
         <platform>16</platform> 
        </sdk> 
       </configuration> 
      </plugin> 

      <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-assembly</id> 
          <phase>package</phase> 
          <goals> 
           <goal>assembly</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.6</version> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard-base</artifactId> 
         <version>4.9</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
        </libs> 
        <obfuscate>false</obfuscate> 
        <options> 
         <option>@proguard.cfg</option> 
        </options> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 

Qu'est-ce que je fais mal?

P.S. L'outil dex suggère d'utiliser l'option '--multi-dex', mais je n'ai pas trouvé comment l'ajouter avec Maven android plugin. Y a-t-il une solution de contournement?

Répondre

0

Voici la configuration qui a fonctionné après tout:

<build> 
    <sourceDirectory>src</sourceDirectory> 

    <plugins> 
     <plugin> 
      <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
      <artifactId>android-maven-plugin</artifactId> 
      <configuration>     
       <manifest> 
        <debuggable>true</debuggable> 
       </manifest> 
       <proguard> 
        <config>proguard.cfg</config> 
        <skip>false</skip> 
       </proguard> 
       <sdk> 
        <platform>16</platform> 
       </sdk> 
       <test> 
        <skip>true</skip> 
       </test> 
       <undeployBeforeDeploy>true</undeployBeforeDeploy> 
      </configuration> 
      <extensions>true</extensions> 
     </plugin> 
    </plugins> 
</build>