折腾:
【未解决】rcsjta的RI启动报错:Cannot connect service API Failed to get result for com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE
期间,要去搞清楚,到底如何才能运行到rcs的core的service。
先调试Core
结果:
startCore和Core
都没运行到。。。
再去调试RI
结果也没启动。。。
那去找找代码哪里调用了:
【记录】研究Android项目rcsjta中RCS的core的service启动的代码调用逻辑关系和顺序
然后去:
【未解决】调试运行Android项目rcsjta的其他几个apk看看是否启动了rcs的core的service
所以看来只能继续研究代码,看看到底是哪些地方,最初调用启动rcs的core的service的
先去:
【已解决】Android中context的startService对应的service运行机制
清楚了:
哪里调用了:
类似于:
context.startService(new Intent(context, RcsCoreService.class));
这种,去启动了RcsCoreService
RcsCoreService内部就会调用:onCreate
其中就会去:startCore
其中会:Core.createCore
最终会:new Core(
回头继续找找还有哪里调用了RcsCoreService
很多地方有类似于:tryLaunchRcsCoreService
内部都是用的:
LauncherUtils.launchRcsCoreService(context, mRcsSettings); LauncherUtils.launchRcsCoreService(mCtx, mRcsSettings);
那去给多个
LauncherUtils.launchRcsCoreService
的地方加上断点。
然后再去尝试运行所有可供调试的apk:
看看是否能运行到断点。
运行了一部分,都没有运行到断点。
另外去试试:
【未解决】通过Android Studio打开调试设置Java Exception Breakpoints和Exception Breakpoints看看能否找到rcsjta中rcs的core的service如何启动的逻辑
目前只能继续通过代码去找逻辑了。
期间去:
receiver com.gsma.rcs.service.DeviceBoot
竟然还真的能搜到一些资料
<receiver android:name="com.gsma.rcs.service.DeviceBoot"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
明显是:和此处代码一样,是拷贝了此处代码
RCS在别的手机TMobile 7上可用了:
继续找代码
去研究看看
android AndroidManifest.xml service
android:name 实现服务的 Service 子类的名称。此名称应为完全限定类名称(例如“com.example.project.RoomService”)。不过,为简便起见,如果名称的第一个字符是句点(例如,“.RoomService”),则名称将追加至 <manifest> 元素中指定的软件包名称。 一旦发布应用,即不应更改该名称(除非您设置了 android:exported="false")。 没有默认值。必须指定该名称。
没有说:一定要启动
因为此处:
<!-- Startup service --> <service android:name="com.gsma.rcs.service.StartService"/>
没有其他启动方面的参数
比如:
android:enabled 系统是否可实例化服务 —“true”表示可以,“false”表示不可以。默认值为“true”。 <application> 元素拥有自己的 enabled 属性,该属性适用于所有应用组件,包括服务。只有在 <application> 和 <service> 属性都为“true”(因为它们都默认使用该值)时,系统才能启用服务。任何一项为“false”都会造成服务停用,从而使系统无法将其实例化。
确定了,不是xml中加了service就表示自动启动服务的
想起来,去给core下面的各个文件,多加点断点,看看是否能运行到,还是不行。
换其他的settings,RI试试,问题依旧。
期间再去研究:
【记录】研究rcsjta的几个apk的运行现象尝试搞懂rcs的core的service服务相关逻辑
另外顺带去SO中搜搜看
rcs android
Skeleton implementation of RCS APIs
This change adds the classes for RCS Storage APIs. There
is no business logic implemented yet, and the parcelable boilerplate
code doesn’t really do anything.
This was needed as these APIs are meant to be interconnected, i.e. to
use an RcsPart, the app developer will need an RcsMessage, and for
that they will need the RcsThread etc.
class RcsThreadQueryHelper { static final String ASCENDING = "ASCENDING"; static final String DESCENDING = "DESCENDING"; static final String THREAD_ID = "_id"; static final Uri THREADS_URI = Uri.parse("content://rcs/thread"); static final Uri PARTICIPANTS_URI = Uri.parse("content://rcs/participant"); static final String[] THREAD_PROJECTION = new String[]{THREAD_ID}; static String buildWhereClause(RcsThreadQueryParameters queryParameters) { // TODO - implement return null; } }
别人
也用到了:
android-rcs-ims-stack – Google Code Archive
不过其是13年开始去用的。。太早了。也早就过期了。
继续去研究,现在感觉是:
好像是应该属于core本身的代码的逻辑,需要研究透,才可能会找到为何没启动的原因
所以去:
【未解决】rcsjta中研究RCS的core的Service本身相关代码以希望找到为何没启动的原因