標籤:
一. 編寫廣告頁
寫一個廣告頁面,並調用其他頁面的demo
(1) 設計介面如下
(2) 編寫代碼如下public class SplashActivity extends Activity { private static final int MSG_START_MENU = 1; @SuppressLint("HandlerLeak") Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case MSG_START_MENU: Intent intent = new Intent(); intent.setClass(SplashActivity.this, HomeActivity.class); startActivity(intent); finish(); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 設定字型 Typeface fontFace = Typeface.createFromAsset(getAssets(), "fonts/handwriting.ttf"); TextView textSplash = (TextView) findViewById(R.id.textSplash); textSplash.setTypeface(fontFace); // 延時啟動下一個Activity mHandler.sendEmptyMessageDelayed(MSG_START_MENU, 2000); }}
運行效果:
(3). 確定修改點如果要把這個Splash頁面插入到別的Activity中,需要修改哪些地方? AndroidManifest.xml
資源拷貝(圖片,字型) 資源ID 控制項ID 調用原邏輯的Activity
Activity中修正
類名稱 包名稱
資源ID
被調用Activity
字串
二.反編譯自己的APK
1. 解包APKapktool d test.apk
2. 目錄說明assets 存放字型資源res 存放圖片資源 layout 字串等資源smali存放代碼
其他檔案請參考開發中的目錄,基本一一對應需要注意的是在res/values目錄有一個public.xml該檔案由apktool產生, 裡面儲存了所有的ID選項如果需要添加資源ID,直接在這裡添加,apktool就會幫你編譯回去
三.開始修改過程
1.先把目標apk解包
2. 添加字串定位到public.xml中加入
<public type="string" name="splash_info" id="0x7f040027" />
定位到string.xml加入
請確保id和名稱的值不要和string的其他字串有重疊
3. 添加字型目標APK沒有assets檔案夾,我們直接把我們的assets檔案夾拷貝過去放到根目錄即可
4. 添加圖片把圖片拷貝到res\drawable檔案夾(注意有重名的情況)我們這次沒有重名,如果有請在開始的時候就取一個特殊的名字
修改public.xml檔案
<public type="drawable" name="splash" id="0x7f02001c" />
可以看到值和名字選中之後都沒有重複的即可
5.添加layout把layout目錄下的activity_splash.xml拷貝到目標layout下面
基本上該Activity有多少控制項id 就要在public.xml定義多少
為了方便 我把dimen全部直接替換過來了
修改public.xml如下
<public type="id" name="textSplash" id="0x7f080051" />
同時需要在public.xml加上activity_splash的ID
<public type="layout" name="activity_splash" id="0x7f030023" />
同時需要在ids.xml中加上一項
記錄下這2個ID值
textSplash 0x7f080051
activity_splash 0x7f030023
6. 添加代碼把Test\smali\org\bing\test目錄下的SplashActivity拷貝過去mobilesafe\smali\com\mobilesafe
此時我們發現已經存在SplashActivity2種解決方案a. 換一個目錄拷貝b. 重新命名
我們選擇較麻煩的重新命名法:
(1). 重新命名源檔案源檔案:
重新命名成: (^ _ ^ 後面加了一個1)
(2). 替換類名開啟我們的SplashActivity1.smali將org/bing/test/SplashActivity全部替換成com/mobilesafe/SplashActivity1
同樣在SplashActivity1$1.smali中將org/bing/test/SplashActivity全部替換成com/mobilesafe/SplashActivity1
最後修改handleMessage裡面HomeActivity為com/mobilesafe/SplashActivity (目標APP的主Activity)
(3).修改資源ID找到setContentView 將上面的常量值修改成
0x7f030023
找到findViewById將上面的常量值修改成
0x7f080051
發現變紅了 有smali文法外掛程式就是爽(請百度:sublime配置smali文法外掛程式 用記事本估計又被坑一波)
爆紅是因為指令格式的問題, 把const/high16 修改成 const就好
7.修改AndroidManifest檔案
將原來的主Activity 改成我們的Activity
8. 回編譯
報錯則回顧哪裡還沒有做到位
然後簽名,運行成功
四.總結基本上開發需要的哪些細節,這裡修改就得修改哪些點
實際運用可以考慮把過程寫成自動化流程,給定廣告模版檔案,自動插入相應位置這樣就可以批量插廣告 ^ _ ^
例子下載網站連結接:http://pan.baidu.com/s/1i5hlCCd 密碼:pc1c
來自為知筆記(Wiz)
5. apktool 給XX手機衛士加廣告頁