multidex:
proguard可以把 code 裡 unnecessary 的 method 移除,壓縮 apk,當然還有 **混淆 的奇效。
再建立乙個 dex file:
3.1、工作流程:multidex的工作流程具體分為兩個部分
3.2、multidex.install(context):
public static void install(context context)
if (build.version.sdk_int < min_sdk_version)
try
// 2. 如果這個方法已經呼叫過一次,就不能再呼叫了。
synchronized (installedapk)
installedapk.add(apkpath);
// 3. 如果當前android版本已經自身支援了multidex,依然可以執行multidex操作,
// 但是會有警告。
if (build.version.sdk_int > max_supported_sdk_version)
// 4. 獲取當前的classloader例項,後面要做的工作,就是把其他dex檔案載入後,
// 把其dexfile物件新增到這個classloader例項裡就完事了。
classloader loader;
try catch (runtimeexception e)
if (loader ==
null)
try catch (throwable t)
// 6. 獲取快取目錄(/data/data//code-cache)。
// 7. 載入快取檔案(如果有)。
list
// 8. 檢查快取的dex是否安全
if (checkvalidzipfiles(files)) else else }}
} catch (exception e)
log.i(tag, "install done");
}
1、multidex#clearolddexdir(context)方法:2、multidexextractor#load()方法:
static list
boolean forcereload) throws ioexception catch (ioexception ioe)
} else
} finally catch (ioexception e)
}if (lockchannel !=
null)
closequietly(lockraf);
}if (releaselockexception !=
null)
log.i(tag, "load found "
+ files.size() +
" secondary dex files");
return files;
}
private
static
void
installsecondarydexes(classloader loader, file dexdir, listfiles)
throws illegalargumentexception, illegalacces***ception, nosuchfieldexception,
invocationtargetexception, nosuchmethodexception, ioexception else
if (build.version.sdk_int >= 14) else
}}
解決Android方法數超出限定的問題
在android專案中引入過多的jar會出現錯誤 android.dex.dexindexoverflowexception cannot merge new index x into a non jumbo instruction 這個錯誤出現的原因是 android設定的方法數是65536個 d...
entity framework 效能優化方案
1 在dbcontext的繼承類下新增sql指令碼輸出debug,即可在控制台上看到ef生成的sql語句 if debug this.database.log s debug.print s database.setinitializer null endif2 對於資料庫為char這種型別的,ef...
效能優化方法
效能是 的乙個很重要的指標,除非是沒有選擇,否則使用者是無論如何都不會忍受乙個響應緩慢的 那麼具體有哪些手段可以優化 呢 從瀏覽器端到資料庫端,影 響使用者請求的所有環節都可以進行效能優化。一 瀏覽器端 瀏覽器快取 頁面優化 css和js壓縮 啟用gzip 合理布局頁面 頁面靜態化 減少cookie...