1. 程式人生 > >遊戲接入SDK系列之org.jf.util.ExceptionWithContext: Unsigned short value out of range

遊戲接入SDK系列之org.jf.util.ExceptionWithContext: Unsigned short value out of range

問題:

遊戲母包,在通過XXSDK進行打包部分渠道(比如OPPO,VIVO)的時候,在回編譯的時候,丟擲上面的錯誤。

原因:

dex檔案中最大的函式個數為65536(unsigned short),如果超出這個限制,那麼如果不採用特殊處理,打包的時候,就會丟擲

備註:Android應用程式,最終釋出成一個apk,安裝到手機上。 apk檔案隨便用一個解壓縮檔案開啟,可以看到裡面有一個classes.dex檔案,這就是之前工程中所有的程式碼,以及所有依賴的jar包全部合併在一起生成的一個dex檔案。

解決思路:

1、在回編譯之前, 先找出總共的函式數量,如果超出65536的限制,我們自動拆分出多個dex,我們採用google提供的android-support-multidex.jar。如果母包或者渠道SDK中不存在這個jar包,我們就要將這個jar包新增進來

2、在遊戲或SDKApplication中的attachBaseContext ,呼叫一下MultiDex.install(this); 以便對多dex檔案的支援。
3、apktool反編譯之後,我們統一的程式碼格式為smali,我們需要將多餘的smali檔案,移到smali_classes2,smali_classes3…等等,目前最多支援5個,應該夠用了。
4、因為程式入口是遊戲或者SDKApplication,所以我們必須保證該Application等類和multidex這個jar包所有的檔案在第一個classes.dex檔案中,否則程式初始化就會找不到這個類。