Android分包的最簡單方式

誠信合作 8年前發布 | 20K 次閱讀 安卓開發 Android開發 移動開發

前言

  • 世上本來沒有分包,寫的代碼多了,便有了分包。
  • 相信你肯定在項目中遇到過下面的問題:point_down:
    Conversion to Dalvik format failed:Unable to execute dex: method
    ID not in [0, 0xffff]: 65536
  • 或者這樣:point_down:
    trouble writing output:Too many field references: 131000; max is   
    65536.You may try using --multi-dex option.
  • 這兩種問題出現的原因都是因為你的項目中的方法數超過65536。前者出現在低版本的手機中,后者出現在較高的版本之中。這里的版本以5.0來區分。

如何解決

  • 開源的Android引發了一股技術狂潮,各種開源項目層出不窮,在分包的實現上也是擁有多個框架,其中不乏一些大公司提供的。但是,我們還是使用google官方提供的方式比較方便。
  • 如果你的minSdkVersion設置成21及更高,你只需要在build.gradle設置multiDexEnabled為true就可以了:
    android {    
      defaultConfig {      
        ...        
        minSdkVersion 21        
        targetSdkVersion 25        
        **multiDexEnabled true**   
      }
      ...
    }
  • 如果你的minSdkVersion設置成20及以下,除了上述步驟外你還需要添加依賴庫并進行相關配置:
    • 引入依賴庫
      android {    
        defaultConfig {        
        ...         
        minSdkVersion 15         
        targetSdkVersion 25        
        **multiDexEnabled true**    
        }    
        ...
      }
      dependencies {  
        **compile 'com.android.support:multidex:1.0.1'**
      }
    • 配置方式一
      • 先在manifest中設置MultiDexApplication為啟動的MultiDexApplication
        <?xml version="1.0" encoding="utf-8"?>
        <manifest   xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.myapp">    
          <application                 
            **android:name="android.support.multidex.MultiDexApplication"** >    
              ...    
          </application>
        </manifest>
      • 然后將自以的application繼承自MultiDexApplication
        public class MyApplication extends MultiDexApplication { ... }
      </li>
    • 配置方式二
      public class MyApplication extends SomeOtherApplication {      
        @Override  
        protected void attachBaseContext(Context base) {                
          super.attachBaseContext(context);     
          Multidex.install(this);  
      }}
    • </ul> </li>
    • 上述配置方式一和配置方式二任選其一就可以了,這里還有個小細節,區分分包方式的是minSdkVersion而不是targetSdkVersion,博主剛開始的時候以為是targetSdkVersion,等到出現問題的時候,一直覺得google實在欺騙我的感情,后來查看官方文檔才發現原來是自己沒搞清。
    • </ul>

      結尾

      • 做完上述配置后,就可以愉快的分包了,是不是很簡單吖!!
      • 最后貼出google官方關于分包的介紹,當然了,你需要KX上網。
      • Configure Apps with Over 64K Methods

       

      來自:http://www.jianshu.com/p/74445c9d52d1

       

 本文由用戶 誠信合作 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!