Android 65535 問題與 MultiDex分包


 

Android Multidex 遇到的問題 
http://blog.csdn.net/wangbaochu/article/details/51178881

Android 使用android-support-multidex解決Dex超出方法數的限制問題,讓你的應用不再爆棚 
http://blog.csdn.net/t12x3456/article/details/40837287

apply plugin: 'com.android.application'
 //設置編譯android項目的參數
android {
  compileSdkVersion 22
  buildToolsVersion "22.0.1"
  defaultConfig {
    // 應用的包名
    applicationId "me.storm.niaa"
    minSdkVersion 9
    // maxSdkVersion 23
    targetSdkVersion 22
    //versionCode 229
    //versionName "2.2.9"
    // versionCode rootProject.ext.versionCode
    // versionName rootProject.ext.versionName
    multiDexEnabled true
  }

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex' // enable multidex
    }
}

dexOptions {
  javaMaxHeapSize "4g"    //java虛擬機堆內存最大值設為4g,避免oom
  preDexLibraries = false //設置對第三方lib不做preDex處理
  additionalParameters =  //每個dex包方法數限制在4000以內
        ['--multi-dex',
        '--set-max-idx-number=40000']
}

  

 

1.配置您的應用進行Dalvik 可執行文件分包


將您的應用項目設置為使用 Dalvik 可執行文件分包配置需要對您的應用項目進行以下修改,具體取決於應用支持的最低 Android 版本。

1.1 如果您的 minSdkVersion 設置為 21 或更高值,您只需在模塊級 build.gradle 文件中將 multiDexEnabled 設置為 true,如此處所示:

android {
    defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 25
        multiDexEnabled true
    }
    ...
}

但是,如果您的 minSdkVersion 設置為 20 或更低值,則您必須按如下方式使用 Dalvik 可執行文件分包支持庫

  • 修改模塊級 build.gradle 文件以啟用 Dalvik 可執行文件分包,並將 Dalvik 可執行文件分包庫添加為依賴項,如此處所示:

    android {
        defaultConfig {
            ...
            minSdkVersion 15
            targetSdkVersion 25
            multiDexEnabled true
        }
        ...
    }

    dependencies {
      compile 'com.android.support:multidex:1.0.1'
    }
  • 1.2 根據是否要替換 Application 類,執行以下操作之一:
    • 如果您沒有替換 Application 類,請編輯清單文件,按如下方式設置 <application> 標記中的 android:name

      <?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 { ... }
    • 或者,如果您替換了 Application 類,但無法更改基本類,則可以改為替換 attachBaseContext() 方法並調用 MultiDex.install(this) 來啟用 Dalvik 可執行文件分包:

      public class MyApplication extends SomeOtherApplication {
        @Override
        protected void attachBaseContext(Context base) {
           super.attachBaseContext(context);
           Multidex.install(this);
        }
      }

構建應用后,Android 構建工具會根據需要構建主 DEX 文件 (classes.dex) 和輔助 DEX 文件(classes2.dex 和 classes3.dex 等)。然后,構建系統會將所有 DEX 文件打包到您的 APK 中。

運行時,Dalvik 可執行文件分包 API 使用特殊的類加載器來搜索適用於您的方法的所有 DEX 文件(而不是僅在主 classes.dex 文件中搜索)。

 

2.測試 Dalvik 可執行文件分包應用


編寫面向 Dalvik 可執行文件分包應用的儀器測試時,無需進行其他配置。AndroidJUnitRunner 直接支持 Dalvik 可執行文件分包,前提是您使用MultiDexApplication 或替換您的自定義 Application 對象中的 attachBaseContext() 方法,並調用 MultiDex.install(this) 以啟用 Dalvik 可執行文件分包。

或者,您可以替換 AndroidJUnitRunner 中的 onCreate() 方法:

public void onCreate(Bundle arguments) {
    MultiDex.install(getTargetContext());
    super.onCreate(arguments);
    ...
}

:目前不支持使用 Dalvik 可執行文件分包來創建測試 APK。

 

ref:

配置方法數超過 64K 的應用 | Android Studio
https://developer.android.com/studio/build/multidex.html、

Android 解決65535的限制 使用android-support-multidex解決Dex超出方法數的限制問題,讓你的應用不再爆棚
http://blog.csdn.net/x_i_a_o_h_a_i/article/details/46544341

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM