折腾:
【未解决】rcsjta中研究RCS的core的Service本身相关代码以希望找到为何没启动的原因
期间,终于能调试到core的启动入口了
此处的:
RCS/rcsjta/core/src/com/gsma/rcs/provisioning/local/Provisioning.java
的:
public class Provisioning extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = this; setContentView(R.layout.provisioning);

然后继续调试,看看能否帮助找到core的service的启动逻辑。
此处顺带记录一下

函数调用堆栈顺序
onCreate:114, Provisioning (com.gsma.rcs.provisioning.local) performCreate:7894, Activity (android.app) performCreate:7881, Activity (android.app) callActivityOnCreate:1307, Instrumentation (android.app) performLaunchActivity:3279, ActivityThread (android.app) handleLaunchActivity:3443, ActivityThread (android.app) execute:83, LaunchActivityItem (android.app.servertransaction) executeCallbacks:135, TransactionExecutor (android.app.servertransaction) execute:95, TransactionExecutor (android.app.servertransaction) handleMessage:2040, ActivityThread$H (android.app) dispatchMessage:107, Handler (android.os) loop:224, Looper (android.os) main:7520, ActivityThread (android.app) invoke:-1, Method (java.lang.reflect) run:539, RuntimeInit$MethodAndArgsCaller (com.android.internal.os) main:950, ZygoteInit (com.android.internal.os)
可见,此处第一个非安卓的内置库的函数,就是此处的
onCreate:114, Provisioning (com.gsma.rcs.provisioning.local)
期间看到后面代码
IntentFilter filter = new IntentFilter(RcsService.ACTION_SERVICE_UP);
中有:
ACTION_SERVICE_UP
所以去找了找接收的地方,也都加了断点
看了下,其他地方都是receive这个事件:

只有这里
src/com/gsma/rcs/service/RcsCoreService.java
@Override public void onCoreLayerStarted() { if (sLogger.isActivated()) { sLogger.debug("Handle event core started"); } Core core = Core.getInstance(); core.getImService().onCoreLayerStarted(); core.getRichcallService().onCoreLayerStarted(); IntentUtils.sendBroadcastEvent(mCtx, RcsService.ACTION_SERVICE_UP); }
是send广播这个事件的
不过,很明显,之前的困难:
找不到具体哪里调用这个onCoreLayerStarted的
那再去找找onCoreLayerStarted
src/com/gsma/rcs/core/Core.java
/** * Start the terminal core */ public synchronized void startCore() { if (mStarted) { return; } mImsModule.start(); mAddressBookManager.start(); mLocaleManager.start(); mListener.onCoreLayerStarted(); mStarted = true; if (sLogger.isActivated()) { sLogger.info("RCS core service has been started with success"); } }
问题来了,后续函数调用,又都是之前就研究过,且加了断点的,但是始终都没运行到。
继续向上追溯,最近的看起来感觉会被多处调用的就是
src/com/gsma/rcs/service/RcsCoreService.java
public class RcsCoreService extends Service implements CoreListener { public void onCreate() { startCore();
然后继续调试,结果其他断点还是无法执行。
然后回头继续去尝试点击Provisioning的保存,结果后续可以触发断点:
【记录】调试rcsjta的core的apk点击保存按钮触发Provisioning的onOptionsItemSelected相关代码调用逻辑
以及最后出现了同样的问题:
java.lang.String com.gsma.rcs.utils.ContactUtil$PhoneNumber.getNumber()
所以继续去处理之前的:
【未解决】rcsjta的core出错:java.lang.NullPointerException Attempt to invoke virtual method java.lang.String com.gsma.rcs.utils.ContactUtil PhoneNumber.getNumber on a null object reference
接着问题转换为:
【已解决】搞懂rcsjta的core的Provisioning中IMS name合法用户账号的写法和逻辑
此处已写好了,合法的:
- IMS name:
- tel:+86-xxx
- IMS display name:
- crifanli
接下来,遇到了:
【已解决】搞懂rcsjta的Provisioning中IMS domain domain含义和如何填写
此处是:
- IMS home domain = IMS home network domain name = 从IMSI中推算出
- IMSI:460023514643095
- MCC:460
- 中国
- MNC:002
- 中国移动 CMCC
- MSIN:3514643095
- 推算出
- ims.mnc002.mcc460.3gppnetwork.org
以及:
【未解决】搞懂rcsjta的Provisioning和IMS核心参数:IMS private URI for HTTP Digest