CreateProcess error=206, 文件名或擴(kuò)展名太長(zhǎng)的問(wèn)題

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

apktool編譯失敗

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

解決方案就是:

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

2、改用linux;

但是上面梁中方案針對(duì)apktool來(lái)說(shuō)改動(dòng)都太大,不宜使用;

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

Decompile An Apk success,But Recompile fail #1623

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

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

filename or extension is too long when recompile apk #1272

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

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

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

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

并重新生成jar包:

新jar包

此時(shí)進(jìn)行嘗試,可以看到,doNotCompress已經(jīng)沒(méi)有問(wèn)題:

修正后的apktool重新反編譯

再編譯回去也是OK的:

反編譯成功

注意一:

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

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

不需壓縮格式

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

注意二:

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

參考:

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

What is the command line length limit?

filename or extension is too long when recompile apk #1272

apktool打包之后apk包體變大

注意三:

在clone下來(lái)apktool源碼時(shí)候,一定最好要下載release版本的代碼,不要直接去github下載,

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

alpha版本

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

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

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

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

  • .bat腳本基本命令語(yǔ)法 目錄 批處理的常見命令(未列舉的命令還比較多,請(qǐng)查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,542評(píng)論 1 19
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,737評(píng)論 0 5
  • layout: wikititle: Android逆向分析筆記categories: Reverse_Engin...
    超哥__閱讀 10,970評(píng)論 1 17
  • 關(guān)于作者: 李濤,騰訊Android工程師,14年加入騰訊SNG增值產(chǎn)品部,期間主要負(fù)責(zé)手Q動(dòng)漫、企鵝電競(jìng)等項(xiàng)目的...
    稻草人_3e17閱讀 3,920評(píng)論 0 10
  • 查無(wú)此人asdasd閱讀 309評(píng)論 0 0

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