Mac 下打包APK的血淚坑(巨坑,巨巨坑,史前巨坑)

本文同步自wing的地方酒館

又是好久沒寫博客,這回依然是一個坑把我炸出來了。。

前因後果經過

起因是這樣子的。公司Jenkins是部署在mac上的

,更新完一個功能自動打包下來的apk開啓以後,總會蹦。 報錯 classNotFound. 奇怪的是,自己用ubuntu打包的apk就不會報錯。

真是奇了大怪了,一開始以爲是Jenkins的鍋,然後調來調去還是不行,就以爲是gradle的鍋,各種換版本還是不行。

一直報一個錯: com.xxxx.r ClassNotFound

這個r.class是第三方SDK裏面的,並且就在包的最底下。就是一個普通的類。於是把Jenkins打包出來的APK給逆向過來,找到這個SDK對應的包,發現裏面r.class居然丟失了!! 丟失了!!! 然後逆向ubuntu打包的APK,裏面r.class居然是存在的!!存在的!!

手動執行task 有時候還會報錯,說r和R不匹配

呵呵噠。這下子基本明瞭了,爲什麼會拿r和R去匹配呢? 肯定是mac系統的鍋了,因爲mac系統硬盤本身是大小寫不敏感的,系統又會自動生成一個R.class,所以r.class和R.class被認爲是同一個文件,就會被自動合併(隨機刪除)一個,所以,到最後導致打包出來的apk就會丟失這個r.class

證明猜想

新建一個test項目,在根目錄創建一個小r.java,這時候打包會報錯的。 parse error.

刪除r.java ,創建一個a.java和一個A.java ..你會發現 a.java被刪除了。。。
尼瑪!!!!好坑啊。。。

解決問題

用磁盤工具新建一個分區,把硬盤格式化爲“大小寫敏感”的,將項目丟過來打包即可。

結尾

媽媽,mac坑我。。。浪費我好多時間。。

你說這問題複雜吧,也不復雜,可是他的展現形式是一個崩潰,以一個classnotfound展開的,這就很難聯想了。。。絞盡乳汁啊。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章