写下备忘
1.获取应用源代码
a)下载源代码 从源代码中提取phon app
b)可以从 https://android.googlesource.com/(需要翻墙)
2.导入源代码到eclips中
3.导入工程后添加系统的class.jar。
文件位置在android 源代码编译完成后的/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
遇到的报错问题
导入上提到的class.jar中的包后。还会报几个错误:
1. CallNotifier.java等几个文件 报错。EventLog.writeEvent(EventLogTags.PHONE_UI_RINGER_QUERY_ELAPSED);中的EventLogTags编译不过,起初从源代码中找到EventLogTags,在工程中新建一个android.util包把EventLogTags放入,发现还是编译不过。查看代码发现EventLogTags并没有PHONE_UI_RINGER_QUERY_ELAPSED等常量。后来发现其实引入的EventLogTags是android早期版本(android2.3.4)中的文件,并且在com.android.phone包下面。无奈只能重新下载一个com.android.phone.EventLogTags.java 下载位置:
下载的这个EventLogTags.java也依赖前面提到的android.util.EventLogTags
这时候EventLogTags相关报错已经解决了,但是还没完,下面还有一个INetworkQueryServiceCallback.aidl文件报错。
2.INetworkQueryServiceCallback.aidl文件报错
报错位置在 import com.android.internal.telephony.OperatorInfo;告知无法引入OperatorInfo类。
后来采用 EventLogTags同样的方法在Phone工程下创建一个com.android.internal.telephony包,从源代码中将 OperatorInfo文件找出并放在改包下。本以为万事大吉,但是不幸的是依然报错,报错的位置依然那这行。后来找了下发现一个同志的一篇文章对这个问题解释的很详细
http://blog.csdn.net/ghd2000/article/details/6082339
按照这个文章的提示在com.android.internal.telephony包下面 创建 OperatorInfo.aidl。文件内容为:
package com.android.internal.telephony;
parcelable OperatorInfo;
ok,INetworkQueryServiceCallback终于不报错了
3.不要高兴的太早,还有一个报错。那就是SipSettings.java文件中的一行log
Log.v(TAG, "addPreferenceFor profile uri" + p.getUri());无打紧,我直接干掉了。
这下整个工程终于不报错了,接下来就的苦逼的修改源代码............................................