Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

demo中客户端点击remote service,服务端没收到 #6

Closed
TangStudio opened this issue Mar 24, 2022 · 10 comments
Closed

demo中客户端点击remote service,服务端没收到 #6

TangStudio opened this issue Mar 24, 2022 · 10 comments

Comments

@TangStudio
Copy link

如题,直接跑你的demo工程,分别在手机安装客户端和服务端APP,客户端点击那个remote service按钮,切换到服务端APP,日志并没有打印客户端发送来的信息呀

@7hens
Copy link
Owner

7hens commented Mar 24, 2022

谢谢反馈!

引起这个问题的原因应该是 Android 版本导致的。在 Android 11 (API 30) 后,谷歌对 APP 包的可见性做了限制,可以参考:Android - 管理软件包可见性

解决方法:修改客户端的 AndroidManifest.xml,添加 <queries> 标签,加入服务端的包名。

我已经上述操作提交到了仓库,你重新拉取一下即可。

@TangStudio
Copy link
Author

感谢,已经解决这个问题了。另外有2个新的疑问:1.服务端的AIDL文件IMyAidlInterface是不是没起任何作用?2.后续有考虑加入linkToDeath机制吗?

@7hens
Copy link
Owner

7hens commented Mar 24, 2022

  1. 这里的 IMyAidlInterface.aidl 是多余的,是当初为了方便对照 AIDL 生成的代码和 OkBinder 生成的代码而加入的。
  2. linkToDeath 也比较重要,但是与业务有点挂钩(如果加入重启功能的话,需要知道启动的 Service 组件和传入的 Intent 参数),影响了 OkBinder 的功能单一性,应该不需要加入到库里。

@TangStudio
Copy link
Author

好的,感谢

@TangStudio
Copy link
Author

有一个新的问题,当我把你的DEMO差分成2个工程后,分别在2个工程里新建一样包名的library,然后将你sample library里的IRemoteService和IRemoteServiceImpl分别拷贝进这2个包名一样的library。先启动服务端APP,然后启动客户端APP并点击test remote service按钮,log("testInt", remoteService.testInt(1234));这一行直接报空指针

@7hens
Copy link
Owner

7hens commented Mar 25, 2022

上面说的情况我没有复现,可能是我的操作流程跟你的不大一样。
不知道你是否方便贴出你的错误栈,(建议先关闭代码混淆功能)。

@TangStudio
Copy link
Author

方便加你QQ交流吗?这里回复效率不太高。。。

@TangStudio
Copy link
Author

java.lang.NullPointerException: Expected to unbox a 'int' primitive type but was returned null
at $Proxy3.testInt(Unknown Source)
at com.example.servicedemo.MainActivity.onServiceConnected(MainActivity.java:45)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2132)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2164)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8307)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
1.并没有开启代码混淆 2.另外有个疑问,分离成2个APP后,客户端和服务端建立的library分别存放IRemoteService和IRemoteServiceImpl,2个library是否必须包名一致

@7hens
Copy link
Owner

7hens commented Mar 25, 2022

IRemoteService 是服务端和客户端的公用接口,必须保持包名和类名一致。

不好意思,我很久没有用过 QQ 了,所以很早就卸载了。:sweat_smile:
不知道你有没有用过 Github 的 discussion,应该也是可以用的。

@TangStudio
Copy link
Author

已经在discussion里上传了2个工程的代码,代码量很少,就是你工程的拆分成的2个APP工程

@7hens 7hens closed this as completed Apr 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants