Android系統內建APP分析:簡訊app

來源:互聯網
上載者:User

Android作業系統本身就是一個巨大的開源軟體倉庫,熟悉它既可以瞭解到Android系統的設計架構,也可以獲得高效的應用程式編寫方式。本文所分析的源碼來自於Google官方的AOSP源碼4.0.1_r1,手機的Android版本是CM 4.2.2。對於Android系統分析而言,手機的作業系統版本和源碼版本有些不一致的地方不會有太大的影響,但是如果需要將源碼中的修改安裝到手機裡面的話,最不容易遇到問題的辦法就是保持手機中系統的版本和源碼的版本完全一致了。

1.程式入口發現

每一個應用程式都應當有各自的入口,使用JAVA編寫的Android應用程式也不例外。確認應用的入口是確認應用在系統中對應源碼的第一步,也是應用程式分析的第一步。我採用的辦法是將需要分析的簡訊app運行起來,通過Android內建工具擷取當前佔據主介面的activity名稱。

Stackoverflow中的回答http://stackoverflow.com/questions/13193592/adb-android-getting-the-name-of-the-current-activity給出了這個問題的三種解決辦法:

1)打Hierarchy View(Window->Open Perspective->Other->Hierarchy View),在Windows欄中用粗體顯示了當前佔據螢幕activity和package,如下圖所示。其中com.android.mms是應用的包名,com.adnroid.mms.ui.ConversationList是具體的Activity名稱。

2)也可以直接開啟Windows欄進行查看。(Window->Show View->Others->Windows),結果和上圖一致。

3) 使用dumpsys命令:adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'" ,結果如下:

dumpsys使用方法見:http://stackoverflow.com/questions/11201659/whats-android-adb-shell-dumpsys-tool-and-its-benefits

2.程式功能分析

確定了簡訊app的報名以及主Activity之後,可以通過軟體搜尋(這裡用的是everything)確定簡訊app在源碼中的位置是 packages\apps\Mms\src\com\android\mms\ui,並且簡訊app的啟動activity就是繼承自ListActivity的ConversationList。

1)ActionBar的構造

在onCreateOptionsMenu函數中通過匯入conversation_list_menu載入menu項目。

public boolean onCreateOptionsMenu(Menu menu) {       getMenuInflater().inflate(R.menu.conversation_list_menu, menu);
conversation_list_menu.xml中設定了:發送、搜尋、設定、刪除所有等5個按鈕。
<menu xmlns:android="http://schemas.android.com/apk/res/android">              <item android:id="@+id/action_compose_new"        android:title="@string/new_message"        android:icon="@drawable/ic_menu_msg_compose_holo_dark"        android:showAsAction="always|withText"  />              <item android:id="@+id/search"          android:title="@string/menu_search"          android:icon="@drawable/ic_menu_search_holo_dark"          android:showAsAction="ifRoom|collapseActionView"          android:actionViewClass="android.widget.SearchView"  />              <item android:id="@+id/action_settings"        android:title="@string/menu_preferences"        android:icon="@android:drawable/ic_menu_preferences"  />              <item android:id="@+id/action_delete_all"        android:title="@string/menu_delete_all"        android:icon="@drawable/ic_menu_trash_holo_dark"  />              <item android:id="@+id/action_debug_dump"        android:title="@string/menu_debug_dump"  />   </menu>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.