最新消息:20210917 已从crifan.com换到crifan.org

【未解决】通过调试rcsjta中core的入口Provisioning去寻找服务启动的逻辑

RCS crifan 433浏览 0评论
折腾:
【未解决】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

转载请注明:在路上 » 【未解决】通过调试rcsjta中core的入口Provisioning去寻找服务启动的逻辑

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.184 seconds, using 23.26MB memory