真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

在android開發(fā)中使用multdex的方法-IT藍(lán)豹為你整理

在android開發(fā)中使用multdex的方法-IT藍(lán)豹為你整理

Android系統(tǒng)在安裝應(yīng)用時(shí),往往需要優(yōu)化Dex,而由于處理工具DexOpt對id數(shù)目的限制,導(dǎo)致其處理的數(shù)目不能超過65536個(gè),因此在Android開發(fā)中,需要使用到MultiDex來解決這個(gè)問題,MultiDex可以配合Android Studio實(shí)現(xiàn)一個(gè)apk包含多個(gè)dex的功能,現(xiàn)在就讓我們來看看MultiDex究竟是怎么一回事?

 

1、MultiDex的工作原理

關(guān)于這個(gè)問題,以APK中有兩個(gè)dex文件為例,第二個(gè)dex文件為classes2.dex。

在Android應(yīng)用安裝中,兼容包在Applicaion實(shí)例化之后,會檢查系統(tǒng)版本是否支持 multidex,classes2.dex是否需要安裝,如果需要安裝則會從APK中解壓出classes2.dex并將其拷貝到應(yīng)用的沙盒目錄下。通過反射將classes2.dex注入到當(dāng)前的classloader中。

2、APP的函數(shù)方法超過65K

隨著Android設(shè)備的發(fā)展,App包含的功能將越來越完善,其大小勢必會變得越來越大。當(dāng)在開發(fā)App的時(shí)候由于報(bào)的大小和引用庫的原因,編譯項(xiàng)目時(shí)候通常會遇到下面這個(gè)錯(cuò)誤:

Conversion to Dalvik format failed: Unableto execute dex:methodID not in [0, 0xffff]: 65536

當(dāng)然,也有一些系統(tǒng)設(shè)備會出現(xiàn)以下log信息,不過反饋的都是同一個(gè)問題:

trouble writingoutput: Too many field references: 131000; max is 65536. You may try using --multi-dex option.

這兩個(gè)錯(cuò)誤條件顯示一個(gè)共同的數(shù)字:65536。這個(gè)數(shù)字,它表示的是你在一個(gè)dex包中的函數(shù)方法超過了65535個(gè)。

如果你已經(jīng)構(gòu)建了一個(gè)AndroidApp時(shí),并收到了這個(gè)錯(cuò)誤,那么表示你有很多代碼!為什么會出現(xiàn)這個(gè)問題,而這個(gè)問題又怎么解決呢?且看下面分析。

3、關(guān)于65K方法限制

Android開發(fā)人員應(yīng)該都清楚,Android的所有可執(zhí)行文件都存在dex文件中,其中包含已編譯的代碼來運(yùn)行你的應(yīng)用程序。Dalvik虛擬機(jī)對可執(zhí)行dex文件的規(guī)格是有方法限制的,即一個(gè)單一的dex文件的方法總數(shù)最多為65536,包括:

引用的Android Framework方法、library的方法及編程中寫入代碼的方法等。

怎么突破限制呢?很簡單,就是多生成幾個(gè)dex文件,而這個(gè)多個(gè)dex文件,就是multidex方案配置。

Multidex支持Android 5.0之前使用Dalvik Runtime執(zhí)行程序代碼的版本。默認(rèn)情況下,限制應(yīng)用到一個(gè)單一的classes.dex。

Dalvik字節(jié)碼文件沒APK,為了繞過這個(gè)限制,你可以使用multidex支持庫,成為你的應(yīng)用程序的主要部分,以及對DEX文件進(jìn)行管理并獲得額外的dex文件和它們所包含的代碼。

4、避免65K限制

當(dāng)確定使用multidex的分包策略時(shí),除了確保你的代碼是優(yōu)秀的代碼以外,還需要做到以下兩個(gè)步驟:

去掉一些未使用的import和library

使用ProGuard去掉一些未使用的代碼

5、用Gradle配置使用Multidex

Android 的 Gradle插件在 Android Build Tool 21.1開始就支持使用multidex了。

在應(yīng)用程序中設(shè)置multidex配置,需要對對程序做以下修改:

修改Gradle的配置,支持multidex

修改你的manifest。讓其支持multidexapplication類

修改Gradle的build如下:

android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.0'}

在manifest文件中,添加MultidexApplication Class的引用,IT藍(lán)豹為你演示:

"1.0"encoding="utf-8"?>"http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> ... android:name="android.support.multidex.MultiDexApplication"> ...

當(dāng)然,如果重寫了 Application,就對自定義Application的繼承方式做一個(gè)修改。

6、Multidex的方式的局限性

在上面的介紹中,multidex看起來感覺很棒,雖然如此,但multidex還是存在一些局限性,具體如下:

(1)如果DEX文件太大,安裝分割dex文件是一個(gè)復(fù)雜的過程,可能會導(dǎo)致應(yīng)用程序無響應(yīng)(ANR)的錯(cuò)誤。在這種情況下,你應(yīng)該盡量的減小dex文件的大小和刪除無用的邏輯,而不是完全依賴于multidex。

(2)在Android 4.0設(shè)備(API Level 14)之前,由于Dalvik linearalloc bug(問題22586),multidex很可能是無法運(yùn)行的。如果希望運(yùn)行在Level 14之前的Android系統(tǒng)版本,請先確保完整的測試和使用。

(3)應(yīng)用程序使用了multiedex配置的,會造成使用比較大的內(nèi)存。當(dāng)然,可能還會引起dalvik虛擬機(jī)的崩潰(issue 78035)。

(4)對于應(yīng)用程序比較復(fù)雜的,存在較多的library的項(xiàng)目。multidex可能會造成不同依賴項(xiàng)目間的dex文件函數(shù)相互調(diào)用,找不到方法。

以上便是關(guān)于MultiDex的原理及使用方法的簡單介紹,如果在Android開發(fā)中,遇到65K方法限制,可以嘗試使用MultiDex來解決。


本文作者:《IT藍(lán)豹》:www.itlanbao.com

成都創(chuàng)新互聯(lián)是一家專業(yè)提供類烏齊企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、H5場景定制、小程序制作等業(yè)務(wù)。10年已為類烏齊眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。


網(wǎng)站標(biāo)題:在android開發(fā)中使用multdex的方法-IT藍(lán)豹為你整理
分享鏈接:http://weahome.cn/article/gcoedd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部