折腾:
【记录】研究Android项目rcsjta中RCS的core的service启动的代码调用逻辑关系和顺序
期间,目前代码逻辑没有完全搞懂。
然后用 调试core+运行RI 有点发现,但是还是没结果,没找到core是如何初始化的
然后打算去换换别的apk去试试

即:
调试core
然后手动运行其他这几个apk,看看效果
是否能触发core中初始化的部分的代码
结果问题依旧。
RI
settings
相对来说,最有用,至少还能触发core中的service运行
比如

触发了:
之前就见过的:
com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE

但是其他几个apk,都不会触发
其中tts会崩溃,无法正常启动。所以不确定如果正常启动,是否会触发。
去点击关闭rcs service
再重新开启试试
期间可能是由于调试导致超时?
关闭失败:

提示:
Information Failed to get result for com.gsma.service.rcs.action.GET_ACTIVATION_MODE see Logcat!
去Logcat中看看
结果:看不到

因为此处没有调试settings
那想到了一个办法:
换个方式:
调试settings + 手动运行core
看看效果
不过此处运行到了一个 貌似有用的 断点:
src/main/java/com/gsma/services/rcs/RcsServiceControl.java
/**
* Gets an instance of RcsServiceControl
*
* @param ctx the context.
* @return RcsServiceControl the singleton instance.
*/
public static RcsServiceControl getInstance(Context ctx) {
if (sInstance != null) {
return sInstance;
}
synchronized (RcsServiceControl.class) {
if (sInstance == null) {
if (ctx == null) {
throw new IllegalArgumentException("Context is null");
}
sInstance = new RcsServiceControl(ctx.getApplicationContext());
}
}
return sInstance;
}
继续:
src/main/java/com/gsma/services/rcs/RcsServiceControl.java
private RcsServiceControl(Context ctx) {
HandlerThread handlerThread = new HandlerThread(getClass().getSimpleName());
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
mContext = ctx;
}继续返回到了
src/com/gsma/rcs/core/control/CoreControlApplication.java
public class CoreControlApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Context context = getApplicationContext();
mRcsServiceControl = RcsServiceControl.getInstance(context);
final ConnectionManager cnxManager = ConnectionManager.createInstance(context,
mRcsServiceControl, RcsServiceName.FILE_TRANSFER, RcsServiceName.CHAT,
RcsServiceName.CONTACT);
/* Do not execute the ConnectionManager on the main thread */
Handler mainThreadHandler = new Handler(Looper.getMainLooper());
mainThreadHandler.postDelayed(new Runnable() {
@Override
public void run() {
cnxManager.start();
sCnxManagerStarted = true;
}
}, DELAY_FOR_STARTING_CNX_MANAGER);
}看起来,至少和RCS的core的service相关

然后
src/main/java/com/gsma/rcs/api/connection/ConnectionManager.java
/**
* Start connection manager
*/
public void start() {
/* Register the broadcast receiver to catch ACTION_SERVICE_UP */
mCtx.registerReceiver(new RcsServiceReceiver(), new IntentFilter(
RcsService.ACTION_SERVICE_UP));
/* Register the broadcast receiver to pool periodically the API connections */
mCtx.registerReceiver(new ReceiveTimerToReConnectApi(), new IntentFilter(ACTION_CONNECT));
mRetryCount = 0;
connectApis();
}
此处问题依旧:
com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE
返回还是null

此处还是和之前一样
虽然context manager 启动了
但是内部的core的service没启动。
然后还是:

服务没有启动
不过,此处去点击启动core的Provisioning

但是还是没有运行到断点
没有运行到和RCS的core的service相关的代码
所以感觉还是要去找代码逻辑:
【记录】研究rcsjta中的RcsCoreService的代码调用逻辑和顺序
然后去试试:
【无法解决】尝试通过卸载重装rcsjta的几个apk看看现象是否有变化以求找到rcs的core的service启动逻辑
然后继续去:
【未解决】rcsjta中研究RCS的core的Service本身相关代码以希望找到为何没启动的原因