CreateProcess error=206, 文件名或擴(kuò)展名太長的問題

最近在使用apktool反編譯某款項(xiàng)目,再重新編譯回去時,出現(xiàn)以下錯誤:

apktool編譯失敗

在網(wǎng)上搜索相關(guān)內(nèi)容,可以看到這個是因?yàn)閣indow下使用IDE或者命令行時出現(xiàn)的問題:命令行支持的字符串長度有限制,字符串的長度是8191個字符。

解決方案就是:

1、縮短項(xiàng)目文件的目錄層級;

2、改用linux;

但是上面梁中方案針對apktool來說改動都太大,不宜使用;

因此直接去apktool官網(wǎng)找答案,可以看到已經(jīng)有人遇到相同問題:

Decompile An Apk success,But Recompile fail #1623

可以看到出現(xiàn)的問題基本一致,確認(rèn)是因?yàn)閣indow限制cmd字符串長度 。

根據(jù)apktool的issue這里面說明:

filename or extension is too long when recompile apk #1272

是由于反編譯之后apktool.yml中doNotCompress內(nèi)容過長所導(dǎo)致,其中包含了大量的assets下面的txt文件導(dǎo)致在cmd下面執(zhí)行命令過長,因此失敗。

doNotCompress下的文件太長(后續(xù)還有很多)

下面就簡單了,clone下來apktool的源碼,修改Androidlib類下面的NO_COMPRESS_PATTERN,將txt格式添加進(jìn)去:

Androidlib路徑
修改Androidlib類不被壓縮類型

并重新生成jar包:

新jar包

此時進(jìn)行嘗試,可以看到,doNotCompress已經(jīng)沒有問題:

修正后的apktool重新反編譯

再編譯回去也是OK的:

反編譯成功

注意一:

private static final Pattern NO_COMPRESS_PATTERN = Pattern.compile("...")內(nèi)的內(nèi)容是來源于:

android / platform / frameworks / base / android-8.1.0_r22 / . / tools / aapt / Package.cpp

不需壓縮格式

所以按照google的注釋其實(shí)是,默認(rèn)在生成apk時候,aapt會選擇性的壓縮各種資源來節(jié)省設(shè)備空間,aapt使用后綴來決定哪個資源需要壓縮,aapt源碼定義了一些不需要壓縮的文件后綴,見上 。

注意二:

偶爾反編譯之后會出現(xiàn)apktool處理后的apk包跟原始母包大小不一致,此時其實(shí)也可以檢查一下doNotCompress屬性內(nèi)是不是有一些壓縮文件后綴的問題,比如.json文件,在原始母包內(nèi)被壓縮,但是反編譯之后由于默認(rèn)是不壓縮,所以導(dǎo)致大小有區(qū)別,此時可以針對apktool動態(tài)調(diào)整一下不壓縮的文件類型即可。

參考:

CREATEPROCESS ERROR=206,文件名或擴(kuò)展名太長

What is the command line length limit?

filename or extension is too long when recompile apk #1272

apktool打包之后apk包體變大

注意三:

在clone下來apktool源碼時候,一定最好要下載release版本的代碼,不要直接去github下載,

因?yàn)橹苯尤ithub下載的話,拿到的可能是alpha版本或者dirty版本:

alpha版本

你很難保證這個版本就一定是穩(wěn)定版本(因?yàn)楸豢恿苏惶?,clone下來之后反編譯再編譯回一直出問題)

所以還是直接去Apktool/releases/tag/v2.3.2里面下載好了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容