Android-maven配置multidex打包
来源:互联网 发布:免费可视化数据软件 编辑:程序博客网 时间:2024/06/10 21:41
转自:http://blog.csdn.net/goldenfish1919/article/details/42006649
工程大了以后,不可避免就会出现方法数目超出65536的限制,很幸运的是新的android提供了多dex打包的方式可以解决这个问题。下面我们就来看下如何用android-maven-plugin打多dex包。
先看下工程结构:
并不是一个标准的maven工程,但是可以通过更改配置来完成打包。工程的代码非常简单,MainActivity有一个按钮,点击按钮跳转到SecondActivity,SecondActivity中引用了fastjson做了一个对象转string的操作,然后弹出toast提示。还有就是DemoMultiDexApplication继承了MultiDexApplication。假如你的Application已经继承了别的类,那么也可以重写attachBaseContext()来实现。
- public class DemoMultiDexApplication extends MultiDexApplication {
-
-
-
-
-
-
-
- }
重点看一下pom:MainDexList.txt:- android/support/multidex/MultiDex.class
- android/support/multidex/MultiDex$V4.class
- android/support/multidex/MultiDex$V14.class
- android/support/multidex/MultiDex$V19.class
- android/support/multidex/MultiDexApplication.class
- android/support/multidex/MultiDexExtractor.class
- android/support/multidex/MultiDexExtractor$1.class
- android/support/multidex/ZipUtil.class
- android/support/multidex/ZipUtil$CentralDirectory.class
- com/example/hello/DemoMultiDexApplication.class
这里面列出了放在主dex中的类。
proguard.cfg:
- -dontpreverify
- -repackageclasses ''
- -allowaccessmodification
- -optimizations !code/simplification/arithmetic
- -keepattributes *Annotation*
- -keep public class * extends android.app.Activity
- -keep public class * extends android.app.Application
- -keep public class * extends android.app.Service
- -keep public class * extends android.content.BroadcastReceiver
- -keep public class * extends android.content.ContentProvider
- -keep public class * extends android.view.View {
- public <init>(android.content.Context);
- public <init>(android.content.Context, android.util.AttributeSet);
- public <init>(android.content.Context, android.util.AttributeSet, int);
- public void set*(...);
- }
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);
- }
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet, int);
- }
- -keepclassmembers class * implements android.os.Parcelable {
- static android.os.Parcelable$Creator CREATOR;
- }
- -keepclassmembers class **.R$* {
- public static <fields>;
- }
- -keep class com.example.hello.Person{*;}
- -keep class android.support.multidex.*{*;}
- -dontwarn com.alibaba.fastjson.**
- -keep class com.alibaba.fastjson.**{*;}
- -keep class com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter { *; }
- -keep class com.alibaba.fastjson.support.spring.FastJsonJsonView { *; }
- -dontwarn com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter
- -dontwarn com.alibaba.fastjson.support.spring.FastJsonJsonView
签名的时候就是使用的默认的keystore来签名的。
所使用的maven环境:
以上就是所有要做的了。
另外就是maven打好的包很可能启动不起来,可以用adb logcat来抓取logcat的日志。
完整的工程在这:http://download.csdn.net/detail/goldenfish1919/8274385
拷贝文件用的plugin:
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>2.5</version>
- <executions>
- <execution>
- <id>copy-resources</id>
- <phase>validate</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <outputDirectory>${basedir}/res/drawable/</outputDirectory>
- <resources>
- <resource>
- <directory>${basedir}/securityjpg/</directory>
- <filtering>true</filtering>
- <includes>
- <include>*.jpg</include>
- </includes>
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
多个源码目录:- <build>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <sourceDirectory>src</sourceDirectory>
- <resources>
- <resource>
- <targetPath>${basedir}/src/</targetPath>
- <directory>${basedir}/src1/</directory>
- <includes>
- <include>**</include>
- </includes>
- <filtering>true</filtering>
- </resource>
- <resource>
- <targetPath>${basedir}/src/</targetPath>
- <directory>${basedir}/src2/</directory>
- <includes>
- <include>**</include>
- </includes>
- <filtering>true</filtering>
- </resource>
- <resource>
- <targetPath>${basedir}/src/</targetPath>
- <directory>${basedir}/src3/</directory>
- <includes>
- <include>**</include>
- </includes>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
参考:
http://www.infoq.com/cn/news/2014/11/android-multidex
https://github.com/simpligility/android-maven-plugin
http://stackoverflow.com/questions/26530654/android-multidex-support-library-using-eclipse
https://github.com/lsuski/maven-multidex-sample
http://simpligility.github.io/android-maven-plugin/dex-mojo.html
0 0