我們的demo圖如下,我們根據該圖和dex檔案反編譯的結果分析分包情況。
或者這樣解決:
一些在二級dex載入之前,可能會被呼叫到的類(比如靜態變數的類),需要放在主dex中.否則會classnotfounderror. 通過修改gradle,可以顯式的把一些類放在main dex中.
afterevaluate .each
dx.additionalparameters += '--multi-dex'
dx.additionalparameters += "--main-dex-list=$projectdir/".tostring()}}
注意上面是修改後的gradle,其中是乙個文字檔案的檔名,存放在和這個build.gradle指令碼同一級的檔案目錄下,而不是 專案根目錄。可以把這個文字檔案起名為multidex.keep,內容如下.實際就是把需要放在main dex的類羅列出來.
android/support/multidex/buildconfig/class
android/support/multidex/multidex$v14/class
android/support/multidex/multidex$v19/class
android/support/multidex/multidex$v4/class
android/support/multidex/multidex/class
android/support/multidex/multidexextractor$1/class
android/support/multidex/multidexextractor/class
android/support/multidex/ziputil$centraldirectory/class
android/support/multidex/ziputil/class
project.afterevaluate標籤在特定的project配置完成後執行,而gradle.projectsevaluated在所有projects配置完成後執行。 注意afterevaluate需要放在android{}裡,不可放外面。
public static mutiltest5 mutiltest5 = new mutiltest5();
@override
public void oncreate() }
但是如果依靠as自動分析,在你**存在反射和native的情況下,也不保證100%正確,如果不正確,還是需要自己配置哪個類放到主dex中。
**:擴充套件:其實你不知道multidex到底有多坑:
android-multidex安裝流程解析:
Android 差分包製作
1 差分包製作 每次編譯out target product autolink 6dl obj packaging target files intermediates 路徑下都會生成 zip的公升級包,我們製作差分包需要用到這裡的壓縮包。故每次編譯版本需要將out target product a...
android中資料的分包
之前在開發中,遇到了乙個問題,就是在專案assets下有乙個apk需要在應用啟動時安裝到裝置中,實現的思路是需要首先將apk拷貝到sdcard中,然後執行安裝操作,還有乙個問題就是專案中的資料庫也需要放在sdcard中,這個apk大約有5m左右,我的資料庫大約有30m左右,接下來我就按照普通的i o...
Android藍芽接收分包資料
最近在開發乙個安卓和藍芽光譜儀裝置通訊的程式,用的是傳統藍芽,下位機藍芽傳送的光譜資料比較大,分成了15個包傳送。其中14個包大小290個byte,最後1個包大於100個byte,而且一整個資料報由資料頭 資料長度 資料 資料尾這幾個部分組成,所以接受的時候做了乙個判斷,定義了乙個大容量陣列,用笨方...