[實作講解] 摩斯密碼 (Smali繁化 & 去廣告)
Step #1
一樣是反編譯
反編譯後得到下圖的東西
Step #2
因為這次一樣是繁化軟體
所以直接進 res 資料夾
這邊我選擇先刪除其他語言再開始翻譯
一樣, 如果經驗不足的話建議刪除後先反編譯一次
精簡後體積差不多少了 400K 左右 |
Step #3
開始翻譯
首先我們先進入 values 裡面
打開之前判斷的 strings 和 arrays
arrays.xml
<?xml version="1.0"encoding="utf-8"?> <resources> <string-array name="conversionSpeed"> <item>Super fast •25</item> <item>Very fast •20</item> <item>Fast •15</item> <item>Normal •10</item> <item>Slow •5</item> </string-array> <string-array name="wpm"> <item>25</item> <item>20</item> <item>15</item> <item>10</item> <item>5</item> </string-array> </resources>
對比上面的圖可以發現,確定有需要翻的字
把 arrays.xml 複製到 values-zh-rTW 裡面
接下來看 strings
我反白的那些字在上面的圖有出現過,所以也能確定了
跟剛剛一樣,複製一份到繁中語系去
將字翻譯完畢之後就可以回編譯測試看看
(字不需要每個都翻)
測試之後會發現
文本翻譯部分在轉換後會變成英文
判斷文字應該是在 smali 裡面
Step #4
這時候我們用搜尋目錄的方式
搜尋 "Morse"
會出現很多結果
我們找最有可能的
把它替換成 "摩斯密碼" 的 unicode 代碼
Text 的部分也是一樣
修改完畢之後在回編譯一次
基本上繁化的工作就完成了
Step #5
最後說一下去廣告的部分
去廣告有很多種方法
就我個人來說
我每次處理廣告的方法也都不太一樣
這次我用的方法是把廣告的配置代碼刪除後再修改佈局
首先先打開 AndroidManifest.xml
<?xml version="1.0"encoding="utf-8"standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.pacioanudavid.morse"platformBuildVersionCode="21"platformBuildVersionName="5.0.1-1624448"> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-feature android:name="android.hardware.camera"android:required="false"/> <application android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"> <activity android:label="@string/app_name"android:launchMode="singleTask"android:name="com.pacioanudavid.morse.Main"android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter> </activity> <activity android:name="com.pacioanudavid.morse.MorseCode"android:theme="@style/SettingsTheme"/> <activity android:name="com.pacioanudavid.morse.Settings"android:theme="@style/SettingsTheme"/> <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"android:name="com.google.android.gms.ads.AdActivity"android:theme="@android:style/Theme.Translucent"/> <meta-data android:name="com.google.android.gms.version"android:value="@integer/google_play_services_version"/> <activity android:label="RecyclerViewTestActivity"android:name="android.support.v7.widget.TestActivity"/> </application> </manifest>
找到這句
<activity android:name="com.google.android.gms.ads.AdActivity"/>
這是典型的 google 廣告配置代碼
刪除掉之後程式就沒辦法下載廣告了
不過雖然已經沒辦法下載廣告
但一般的程式都會寫入驗證代碼來檢驗是否有人把配置代碼刪除
這時我們可以選擇修改源碼或是修改廣告的大小
這邊我用比較簡單的修改佈局方式
使用搜尋目錄的方式搜尋 "adview"
一般只要搜尋 layout 資料夾就好了
不過為了保險起見最好還是把整個 res 都搜尋一下
會搜到類似下面的結果
<com.google.android.gms.ads.AdView android:id="@id/adView"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"fab:adSize="SMART_BANNER"fab:adUnitId="@string/banner_bottom_ad_unit_id"/>
找到高度 (height) 和寬度 (width)
把 fill_parent 和 wrap_content 都改成 0.0dip
這麼做是要把廣告的視窗修改到看不見
把搜尋到的代碼稍微處理完以後就可以算是完工了
再次回編譯測試看看
結語
這篇其實算是我到目前為止覺得最好的一個素材
包含Smali, xml繁化和去廣告
基本上掌握了這些之後就可以完成8成以上的軟體繁化了
剩下的只是經驗問題
這部分當然是要靠平時的練習
PS:可以的話留個心得或建議之類的
其他實作講解:
謝教學,過陣子之後想接觸這部分(๑・v・๑)
回覆刪除