Android 调试时,如何查找手机Activity在项目中对应的源码
来源:互联网 发布:淘宝打单插件 编辑:程序博客网 时间:2024/06/09 23:20
Andriod开发新手一枚,这是我的第一篇博客,只是想把自己刚刚研究的方法总结一下,且不管写的怎么样吧。
对于一个新手来说,找到APP界面对应的Activity进行调试似乎不那么容易,本文以Settings里面的WALN界面为例进行分析。
手机通过数据线连上电脑,打开Linux的终端,先假设adb命令都会了,通过adb对手机进行调试,先cd进入“项目名/code/LINUX/android”目录下。
(1)adb logcat -c 清楚之前的log
(2)adb logcat | grep "START u0" 同时在手机上打开该界面,会看到如下结果:
08-07 15:11:08.344 1461 2841 I ActivityManager: START u0 {flg=0x8000 cmp=com.android.settings/.Settings$WifiSettingsActivity (has extras)} from uid 1000 on display 0
这样一来,似乎是找到了该界面的Activity在com.android.settings包下面,且为WifiSettingsActivity,如此简单,收工!
可惜,事实总是太残忍,当你搜索该文件:
(3)find . -name AndroidMainfest.xml | xargs grep Settings$WifiSettingsActivity,没找到
find . -name AndroidMainfest.xml | xargs grep com.android.settings,还是没找到
find ./packages/apps/Settings/ -name Settings$WifiSettingsActivity*,查找结果为:
./packages/apps/Settings/
./packages/apps/Settings/src/com/android/settings/utils/SettingsDividerItemDecoration.java
./packages/apps/Settings/src/com/android/settings/SettingsInitialize.java
./packages/apps/Settings/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
./packages/apps/Settings/src/com/android/settings/SettingsPreferenceFragment.java
./packages/apps/Settings/src/com/android/settings/Settings.java
./packages/apps/Settings/src/com/android/settings/SettingsDumpService.java
./packages/apps/Settings/src/com/android/settings/SettingsLicenseActivity.java
./packages/apps/Settings/src/com/android/settings/m4/SettingsDashAdapter.java
./packages/apps/Settings/src/com/android/settings/m4/SettingsDashActivity.java
./packages/apps/Settings/src/com/android/settings/widget/SettingsAppWidgetProvider.java
./packages/apps/Settings/src/com/android/settings/location/SettingsInjector.java
./packages/apps/Settings/src/com/android/settings/accessibility/SettingsContentObserver.java
./packages/apps/Settings/src/com/android/settings/SettingsActivity.java
./packages/apps/Settings/src/com/android/settings/SettingsApplication.java
./packages/apps/Settings/tests/app/src/com/android/settings/tests/SettingsLaunchPerformance.java
压根不是我想要的!不放弃,再找: ls packages/apps/Settings/src/com/android/settings/ | grep Wifi,结果为:WifiCallingSettings.java
终于找到了吗?进去看看:vi packages/apps/Settings/src/com/android/settings/WifiCallingSettings.java,现实总是太残忍,压根不是!
千万要坚持住,此路不通,再换一条路就行了。看到你那个界面的英文“提示符”了吗?WALN!!!
(4)grep "WLAN" -r packages/apps/Settings/res/,结果如下:
packages/apps/Settings/res/values-zh-rHK/strings.xml: <string name="turn_off_wifi_dialog_text">"當可擕式WLAN熱點工作時,Wi-Fi是需要關閉的。如果需要打開Wi-Fi,請關閉可擕式熱點。"</string>
packages/apps/Settings/res/values-zh-rHK/strings.xml: <string name="turn_off_wifi_dialog_text">"當可擕式WLAN熱點工作時,Wi-Fi是需要關閉的。如果需要打開Wi-Fi,請關閉可擕式熱點。"</string>
packages/apps/Settings/res/values-zh-rCN/arrays.xml: <item msgid="8281201165558093009">"WLAN扫描"</item>
packages/apps/Settings/res/values-zh-rCN/strings.xml: <string name="wfc_provisioned_switch_string" msgid="3985406545172898078">"已配置 WLAN 通话"</string>
packages/apps/Settings/res/values-zh-rCN/strings.xml: <string name="radio_info_ims_reg_status" msgid="7534612158445529715">"IMS 注册:<xliff:g id="STATUS">%1$s</xliff:g>\nLTE 语音通话:<xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nWLAN 语音通话:<xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\n视频通话:<xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT 接口:<xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
cellular_to_wlan
...排除了很多诸如“WALN”、"WLAN扫描"等干扰项后,终于发现了这一行:
packages/apps/Settings/res/values/strings.xml: <string name="cellular_to_wlan_title">Cellular->WLAN</string>
简直就是雪中送谈啊!
(5)grep cellular_to_wlan_title -r packages/apps/Settings/src/,结果还是找不到。
(6)grep cellular_to_wlan_title -r packages/apps/Settings/res/ --exclude=strings.xml,在res里面找找,结果:
packages/apps/Settings/res/xml/wifi_advanced_settings.xml: android:title="@string/cellular_to_wlan_title"
(7)vi packages/apps/Settings/res/xml/wifi_advanced_settings.xml,进去看看,发现:
<ListPreference
android:key="cellular_to_wlan"
android:title="@string/cellular_to_wlan_title"
android:persistent="false"
android:entries="@array/cellcular2wifi_entries"
android:entryValues="@array/cellcular2wifi_values" />
找到了title为@string/cellular_to_wlan_title对应的key为cellular_to_wlan。
(8)grep cellular_to_wlan -r packages/apps/Settings/src,结果为:
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String KEY_CELLULAR_TO_WLAN = "cellular_to_wlan";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String CELLULAR_TO_WLAN_CONNECT_TYPE = "cellular_to_wlan_type";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String KEY_CELLULAR_TO_WLAN_HINT = "cellular_to_wlan_hint";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String CELLULAR_TO_WLAN_HINT = "cellular_to_wlan_hint";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: if (getResources().getBoolean(R.bool.cellular_to_wlan_hint)) {
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: getResources().getString(R.string.cellular_to_wlan_hint_toast),
看到private static final String KEY_CELLULAR_TO_WLAN = "cellular_to_wlan",要找的源码应该就在AdvancedWifiSettings.java里面。
(9)grep KEY_CELLULAR_TO_WLAN -r packages/apps/Settings/src,结果为:
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String KEY_CELLULAR_TO_WLAN = "cellular_to_wlan";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: private static final String KEY_CELLULAR_TO_WLAN_HINT = "cellular_to_wlan_hint";
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: (ListPreference) findPreference(KEY_CELLULAR_TO_WLAN);
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: mCellularToWlanHintPref = (CheckBoxPreference) findPreference(KEY_CELLULAR_TO_WLAN_HINT);
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: if (KEY_CELLULAR_TO_WLAN.equals(key)) {
packages/apps/Settings/src/com/android/settings/wifi/AdvancedWifiSettings.java: if (KEY_CELLULAR_TO_WLAN_HINT.equals(key)) {
当看到findPreference(KEY_CELLULAR_TO_WLAN)时,说明手机Settings里的WALN界面对应的源码在AdvancedWifiSettings.java中。大功告成!
- Android 调试时,如何查找手机Activity在项目中对应的源码
- 如何查找android项目对应模块的手机源码位置
- linux中如何查找ssd硬盘对应的文件目录在哪?
- android程序在手机中调试运行
- 如何查找在Android中查找特定进程?
- 在Android项目中新建一个Activity
- 如何在Android源码里查找Java中native方法对应的C++实现
- Android如何查找应用中调用的系统资源
- Android中Activity的生命周期与对应函数
- android中activity传对象对应该注意的地方
- Eclipse 调试 时, 无论在activity中哪一行打断点。调试时,都不会跳转到activity源码中。报错 source not found 。
- 如何打开APP在应用市场中对应的的activity页面---Android拓展篇 ——诺诺"涂鸦"记忆
- 在eclipse下如何查找某一个类的源码
- android89--Activity怎么和service绑定,怎么在activity中启动自己对应的service
- Activity怎么和service绑定,怎么在activity中启动自己对应的service
- 在linux中配置usb连接(android手机调试)
- 在linux中配置usb连接(android手机调试)
- 在linux中配置usb连接(android手机调试)
- WebService入门
- POJ 1011 Sticks(DFS+剪枝)详细注释
- POJ
- String.format()
- CentOS6.5 安装Apache
- Android 调试时,如何查找手机Activity在项目中对应的源码
- c++学习-static_cast、dynamic_cast、const_cast和reinterpret_cast总结
- Python-26 图形用户界面EasyGui
- java学习笔记(1)-Object类
- 将博客搬至CSDN
- 制定项目规范
- 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离在线融合)
- L2-010. 排座位
- Java进阶书籍推荐