so文件成品评论【整理】
| 這是我的 @布加迪20 AZ在一篇文章中寫道:<漢化so文件的心得>中的技術附件做的簡潔性整理。原來的看起來不是非常方便。一起分享學習.. |
SO文件漢化心得
???????????????????????????????????????????????? --By布加迪20?? 2014/08
?????? 我自己也是新手。研究了好久。網上也找不到相關教程。所以決定寫一個比較具體的教程。教程是關于漢化so文件時出現的字符串長度不夠的問題,后面還有做字庫的簡單教程。相關文件都在文章結尾處,假設出現排版問題。建議在手機上用WPS看,選適應手機就好了。
漢化so改動偏移
?????? IDA在電腦上用。HE是安卓上的十六進制編輯器HexEditor。以“浮游生物2:孢子的世界”(版本號1.0.1.1)為例。手機上用HE打開libcocos2dcpp.so,找到“MostDepth:"如圖:
???(libcocos2scope.so能夠用Xplore管理器導出,長按安裝包。選以zip方式打開。在lib里)記下M的位置為004eea07。
“START”和“Most Depth:”相應游戲中位置,例如以下圖:
能夠看到,“Most Depth:"前面的“START"要漢化成“開始”位置不夠(一個漢字抵三個字母,每一個詞前后都要有00隔開),而后面的“Most Depth:"能夠改成“MostDepth:"也能夠漢化為“最深處:”,也就能夠在“START"后面移出一個空格,正好能夠漢化為“開始”。如圖:
記下這時M的位置為004eea08。可是這時侯“START”偏移沒變,“MostDepth:"的偏移變了,游戲里是顯示不出的:
以上在手機上完畢,電腦上能夠用其他十六進制編輯器,推薦UE32。
這時候就須要用到IDA,用IDA打開電腦上的so文件,在“查找”里選“文本”,輸入“Most Depth:"(我電腦里的還是原文件)。找到這里
記下198112 。
然后打開一個十六進制計算器,用之前“Most Depth:"里M的位置減去198112,即“4eea07-198112”。得到3568f5,這時候要用HE在so文件中搜索f56835(要反過來),找到了。
我們要改的就是這個,之后用改過的“MostDepth:"里M的位置減198112。即“4eea08-198112",得3568f6,之后要做的就是把“f56835"改成“f66835",如圖:
接下來保存文件,打開游戲測試吧
能夠看到,“MostDepth:"已經顯示出來了。
做字體庫漢化
??????? 當然,要漢化這個游戲還須要做字庫,下面附簡單教程。
字庫我是用hiero做的。游戲里的字庫都在assests/fonts里:
??????? ?
????? 有7種字,每種都要做一個,打開hiero,以segoe_ui-16_0.png和segoe_ui-16.fnt為例:
????
選微軟雅黑(我認為和游戲字體挺像),在右邊的“Sample Text"里輸入“開始”,并選定字號為16。選“Glyph cache"。把寬高都設為2048(方便以后字多了能夠一張圖解決)。
軟件有點問題,所以Rendering里沒有顯示字體,只是無論它,點File→Save BMF on files (text)...。文件名稱就寫“segoe_ui-16_0.fnt",點保存就會生成兩個文件“segoe_ui-16_0.fnt”和“segoe_ui-16_0.png",注意之后把“segoe_ui-16_0.fnt”改成“segoe_ui-16.fnt”。
其它字體以同樣的方式生成,然后替換assests/fonts里的字體(教程里的僅僅添加了“開始”兩個字)。
然后用HE打開so文件,我們剛剛在“START"后面添加了一個空格,能夠改成“開始”了。用HE搜索到“START ”,并查到“開始”的十六進制為“e5 bc 80 e5 a7 8b”。替換掉原來的。
打開游戲看看效果:
能夠看到漢化成功了“開始”。
借助“空位”漢化so
??????? 這是我自己的漢化心得。拿出來分享一下,這個教程僅僅是簡介一下添加字符串長度的一種方法。適用于前后有多余的空位(一般是漢化其他語句留下來的),只是要是前后都沒有空位,就要用還有一種方法
這樣的方法事實上也是改動偏移,看這里的字符串:
一大堆擠在一起。漢化成中文位置根本不夠,可是我們能夠看到so文件中有非常多空白的地方,比方這里:
看這里有這么大一片空白,足夠我們改了!隨便從哪里開始,比方我想把“Game Over”改成“游戲結束”。
就在把任何位置的空字符串替換成“e6b8b8 e6888f e7bb93 e69d9f”
(別忘了在字庫里加入新的字。不然會出現兩種情況:1.顯示不出字。2.進游戲直接卡死。
)
接著依照上面的方法把“Game Over”的偏移改動到“游戲結束”的位置,就能夠了。
注意
1、不是哪里的空白位置都能夠改,這個叫空白數據段,通常像這樣的前后都有字符串而中間空出來的一般就是了。(好像有尋找exe或dll數據段位置的工具,可是so的好像沒有。所以不清楚是不是空白數據段時,能夠自己改動試試)
2、每一次改動一定記得備份。改這樣的十六進制的東西特別easy出錯,假設沒備份的話。后果非常嚴重。。。。。。
有關下載
以下是一些相關工具的鏈接,非常多版本號都低了。只是也沒什么影響
浮游生物:孢子的世界
http://pan.baidu.com/share/link?shareid=3428872989&uk=3324813120
Hex editor
http://pan.baidu.com/share/link?shareid=3434074993&uk=3324813120
IDA
http://pan.baidu.com/share/link?shareid=3454802130&uk=3324813120
Hiero
http://pan.baidu.com/share/link?shareid=3495231926&uk=3324813120
Hiero(已有java環境的直接用)
http://pan.baidu.com/share/link?shareid=3510464528&uk=3324813120
Xplore文件管理器
http://pan.baidu.com/share/link?shareid=3543020754&uk=3324813120
| 原文完。謝謝全部技術的無私分享,交流才有有進步... |
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/gcczhongduan/p/4852704.html
總結
以上是生活随笔為你收集整理的so文件成品评论【整理】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一、HTML和CSS基础--HTML+C
- 下一篇: 有些事关于敏捷