教你快速高效接入SDK——打包工具的實現(反編譯資源動態整合打渠道包)
阿新 • • 發佈:2019-01-22
1、打包工具的輸入,就是需要打包的apk包,也叫母包。遊戲裡面引入sdk抽象層的jar包,呼叫抽象層的介面。完成接入,然後打成apk。
2、打包工具會首先用apktool -d 對母包進行反編譯。反編譯到該渠道對應的臨時工作目錄中
3、重新命名包名。我們知道在AndroidManifet.xml中的package就是包名,為了防止後面我們重新生成R檔案導致衝突,我們對每個渠道都設定一個字尾。比如UC,字尾叫.uc。當樂,字尾.dl 等等。如果渠道SDK有明確要求,使用他們提供的字尾,那就使用他們提供的字尾。如果沒有,就自己設定一個。
4、拷貝SDK資源。將該渠道對應的SDK資源,從對應的SDK配置目錄中,拷貝到反編譯後的臨時工作目錄中。
1)拷貝SDK的assets目錄,libs目錄,res目錄等
2)將classes.dex也反編譯成smali格式,拷貝到反編譯臨時工作目錄中
3)和SDK_Manifest.xml中的內容合併到遊戲目錄的AndroidManifest.xml中。
5、生成遊戲中需要使用的配置。
1)對於之前SDK目錄中config.xml中配置的APPID,APPKEY等資訊,根據需要,對於需要新增到AndroidManifest.xml中的,我們就將他新增到AndroidManifest.xml中的meta-data中。對於其他引數,我們會在assets目錄下生成一個develop_config.properties檔案。
2)對於SDK目錄下config.xml中配置的外掛資訊,我們會在assets目錄下,生成一個plugin_info.xml檔案。這樣SDK抽象層會讀取這個配置來例項化對應的外掛。
6、重新生成R檔案。部分渠道需要支援他們的閃屏畫面。根據我們的閃屏解決方案(後面會專門來說),我們需要重新生成R檔案,來索引我們的閃屏資源圖片等資訊。
7、重新打包,採用apktool -b重新將合併之後的資源和程式碼,進行打包
8、簽名和優化。部分渠道要求使用他們提供的簽名檔案,所以,我們對簽名檔案也採用了配置。可以根據不同的渠道來配置不同的簽名檔案。
9、經過以上步驟,一個渠道包就生成了。
通過上面這個打包流程,我們已經知道單個渠道包是如何生成的了。那麼,像第一張圖片中所表示的那樣,我們打包工具是同時打出各個不同渠道SDK的渠道包。我們是如何來實現的呢?請看下圖:
每個遊戲,都有一個全域性配置,裡面配置了當前需要打包的渠道。這樣,打包工具首先會讀取該配置,然後按照上面的打包流程,對各個渠道進行打包。最終在輸出目錄下生成各個渠道對應的渠道包。
至此,我相信你對U8SDK裡的打包工具有了一個比較全面的瞭解。但是,這還不夠完善。比如,我們可以將引數從配置中脫離出來,採用介面化的管理方法。這樣,你就可以將這套工具給運營或者策劃去使用,程式開發人員,就不再需要負責打包的工作了。 打包的效率和速度上,也可以繼續不斷地進行優化。刪除不必要的檔案操作,減少不必要的流程等。 打包工具的原始碼三天三夜都說不完,所以建議,大家對著原始碼來看,根據上面所說的,慢慢熟悉打包工具,最後能夠徹底掌握他,隨心所欲完善修改他。 本文作者:小黑