Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-maven配置multidex打包

Android-maven配置multidex打包

編輯:關於Android編程

 

工程大了以後,不可避免就會出現方法數目超出65536的限制,很幸運的是新的android提供了多dex打包的方式可以解決這個問題。下面我們就來看下如何用android-maven-plugin打多dex包。

先看下工程結構:

\

並不是一個標准的maven工程,但是可以通過更改配置來完成打包。工程的代碼非常簡單,MainActivity有一個按鈕,點擊按鈕跳轉到SecondActivity,SecondActivity中引用了fastjson做了一個對象轉string的操作,然後彈出toast提示。還有就是DemoMultiDexApplication繼承了MultiDexApplication。假如你的Application已經繼承了別的類,那麼也可以重寫attachBaseContext()來實現。

 

public class DemoMultiDexApplication extends MultiDexApplication {
	/*如果已經繼承了別的類,可以重寫下面的方法
	@Override
	protected void attachBaseContext(Context base) {
		super.attachBaseContext(base);
		MultiDex.install(this);
	}
	*/
}
重點看一下pom:

 

 



    4.0.0
    com.example.test
    multidexdemo
    1.0.0
    apk
    multidexdemo
    
        ${project.basedir}/debug.keystore
        androiddebugkey
        android
    
    
        
            com.google.android
            android
            4.3.0
            provided
        
        
            com.alibaba
            fastjson
            1.1.45
        
        
		  com.android.support
		  multidex
		  20
		
    
    
        ${project.artifactId}-${project.version}
        src
         
        	
        	
				org.apache.maven.plugins
				maven-compiler-plugin
				3.2
				
					1.6
					1.6
					UTF-8
				
			
			
			 
				org.apache.maven.plugins 
				maven-resources-plugin 
				2.6 
				 
				UTF-8 
			     
		    
		    
		    
				org.apache.maven.plugins
				maven-jarsigner-plugin
				1.2
				
					
						signing
						
							sign
							verify
						
						package
						true
						
							true
							
							
								target/${project.artifactId}-${project.version}.apk
							
							${sign.keystore}
							${sign.alias}
							${sign.storepass}
							true
						
					
				
			
			
            
                com.simpligility.maven.plugins
                android-maven-plugin
                4.0.0
                
                    1.6
                    1.6
                    UTF-8
                    
                    ${project.basedir}/AndroidManifest.xml
                    ${project.basedir}/assets
                    ${project.basedir}/libs
                    ${project.basedir}/res
                    false
                    
                        ${env.ANDROID_HOME}
                        19
                    
                    
                    
						false
						${project.basedir}/proguard.cfg
						${project.basedir}/tools/proguard.jar
						
							-Xms256m
							-Xmx512m
						
					
                    
                        
                            -Xms2048m
                            -Xmx2048m
                        
                        
                        true
				        true
				        --set-max-idx-number=65536
				        
				        ${project.basedir}/MainDexList.txt
                    
                    
                    
                          false
                    
                
                true
            
        
    

 

 

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 (android.content.Context);
    public (android.content.Context, android.util.AttributeSet);
    public (android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}
-keepclasseswithmembers class * {
    public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
    public static ;
}
-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:

 


			    org.apache.maven.plugins
			    maven-resources-plugin
			    2.5
			    
			        
			            copy-resources
			            validate
			            
			                copy-resources
			            
			            
			                ${basedir}/res/drawable/
			                
			                    
			                        ${basedir}/securityjpg/
			                        true
			                        
			                            *.jpg
			                        
			                    
			                
			            
			        
			    
			

多個源碼目錄:
 
        ${project.artifactId}-${project.version}
        src
        
            
                ${basedir}/src/
                ${basedir}/src1/
                
                    **
                
                true
            
            
                ${basedir}/src/
                ${basedir}/src2/
                
                    **
                
                true
            
            
                ${basedir}/src/
                ${basedir}/src3/
                
                    **
                
                true
            
        
 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved