关于SharedUserId启动

来源:6-2 如何跨App启动 Activity?有哪些注意事项?

慕妹2978617

2020-05-08

常见的启动其他APP如下几种:

  1. .xml添加过滤条件
  2. setComponent
  3. scheme:

特殊 sharedUserId

那么我有几个个问题:

  1. 前三个是不是都要android:exported=“true”?(当然1中设置过滤条件就默认为true)
  2. sharedUserId是也要求android:exported=“true”? (因为感觉不需要,因为设置相同的id就是告诉系统在一个进程,共享数据,但是不确定)
  3. sharedUserId启动 的具体代码是获取context然后直接调startActivity来启动?
  4. 如果上面的3成立两个app A,B设置相同的 sharedUserId是不是相当于在一个进程中,所以实现了网上文章说的那样可以共享data/data中的应用内部数据?

附加问题:

  1. 我看网上说如果两个应用设置相同的sharedUserId那么签名也会影响(有的说是设置成android.uid.system系统级的才会有影响),这个问题老师能帮我解释下嘛?
  2. 对于签名设置成自己的有影响还是设置成系统有影响?
  3. 如果实际中我要设置相同的sharedUserId那么这个设计的规则是什么?直接设置任意字符串?还是有一些通用常用的设置格式,会涉及到加密嘛?

抱歉啊老师,问题有点多,因为针对这个问题接触的少,所以看了很多文章,但是都含糊不清。所以看了很多文章后想到这些问题。希望老师有时间可以帮我一一解惑。如果老师忙的话看到问题可以慢点回复,因为这几个我觉得我还真的有点想搞清楚,哈哈 辛苦老师

写回答

3回答

bennyhuo

2020-05-09

  1. 加了 Filter 会默认 exported 为 true ,不加的话默认为 false

  2. sharedUserId 不要求

  3. sharedUserId 需要获取 ComponentName 来启动,视频里面有,02:04:

    //img1.sycdn.imooc.com/szimg/5eb603440904430821421270.jpg

  4. sharedUserId 相同的可以运行在同一个进程,但也不是必须的。userId 这个其实应该是 Linux 的权限机制,你用 Linux 系统的时候经常会给目录设置权限,chmod 777 实际上是把目录所有者 + 所在组 + 其他 的权限设置为可读写可执行,对比理解下。


附加:

  1. 估计是说设置成系统的 uid 了吧?

  2. 不清楚你想说什么

  3. uid 应该和签名有关系的,所以你不能随便设置成别人的 uid,因为你没有别人的签名。

看了下文档,从 Android 10.0 开始 sharedUserId 废弃了,不用太纠结。

0
0

bennyhuo

2020-05-09

不过多说一句,你的很多问题,都是自己动手就能解决的,自己写写demo试验一下。

1
2
bennyhuo
回复
慕妹2978617
临时抱佛脚呀哈哈
2020-05-09
共2条回复

慕妹2978617

提问者

2020-05-08

附加问题1. 我觉得不理清楚实际出错应该很难找到

附加问题3 我觉得不理清楚,如果恶意设置可能存在风险,当然root后也是能看到应用的数据目录,但是我觉得是不是会有类似定义的规范呢?因为不知道嘛  哈哈

0
0

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程