Android调试之断点进程选择

来源:互联网 发布:欧洲杯决赛数据 编辑:程序博客网 时间:2024/06/08 11:09

调试需要注意选对进程,有时代码调试断点时,并非表面看起来所在包进程

例如:Status.java

/packages/apps/Settings/src/com/android/settings/deviceinfo/Status.java

代码路径在Settings中,默认以为是com.android.settings进程,发现断点处竟然是勾选上的。

但是点击About phone-> Status发现并不能断到断点处。


查询源码发现对应的Activity为Settings$StatusActivity,再看AndroidMenifest文件得到了答案,其被指定了别的进程,即com.android.phone。

/packages/apps/Settings/res/xml/device_info_settings.xml

        <PreferenceScreen android:key="status_info"                android:title="@string/device_status"                android:summary="@string/device_status_summary">            <intent android:action="android.intent.action.MAIN"                    android:targetPackage="com.android.settings"                    android:targetClass="com.android.settings.Settings$StatusActivity" />        </PreferenceScreen>

/packages/apps/Settings/AndroidManifest.xml


        <!-- Runs in the phone process since it needs access to the Phone object -->        <activity android:name=".Settings$StatusActivity"                android:label="@string/device_status_activity_title"                android:theme="@style/Theme.SubSettingsDialogWhenLarge"                android:process="com.android.phone">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="android.intent.category.VOICE_LAUNCH" />            </intent-filter>            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"                android:value="com.android.settings.deviceinfo.Status" />        </activity>


调试时,需要断com.android.phone才行,效果如下。



[小结]

因此,调试时需要特别注意相关声明,以及其跑的上下文。