Nixo Home

如何跨App启动Activity?有哪些注意事项?

字数统计: 397阅读时长: 1 min
2019/07/01 Share

如何跨App启动Activity?有哪些注意事项

面试官视角

  • 是否了解如何启动外部应用的Activity(初级)
  • 是否了解如何防止自己的Activity被外部非正当的启动(中级)
  • 是否对拒绝服务漏洞有所了解
  • 如何在开发时规避服务漏洞

题目剖析

  • 跨App 、 注意事项(即使没问也要引出)

共享uid的App

AppA(ActivityA) -> AppB (ActivityB)

在 mainfest中注册android:sharedUserId=”xxx.xxx”(AppA和AppB要一样)

startActivity(Intent().setComponent(ComponentName(“A的包名+类名”,”B的包名+类名”)))

#使用exported

Mainfest中将Activity的export设置为true

startActivity(Intent().setComponent(ComponentName(“A的包名+类名”,”B的包名+类名”)))
同上

使用intentFilter

在Mainfest中定义一个Action
<activity …….>




startActivity(Intent(“类全路径”))

为允许外部启动的Activity加权限

  • AppB 在Mainfest中声明权限

  • 在AppA中需要也声明AppB的这个权限

  • AppB必须必AppA先安装才可以访问

拒绝服务漏洞

AppA -> AppB的时候传递(bundle)

  • AppA将序列化的类A通过Bundle传递给AppB
    AppB将Bundle序列化,但是B中没有A这个类,这时会抛类找不到异常 这就是拒绝服务漏洞

  • 我们可以在Intent.getExtra的时候try{}catch{}

  • 所以最好不要将Activity暴漏出来(exported设置为true就会暴露),如果要暴露最好加上权限

本节回顾

  • 跨App启动Activity首先要明确App之间的关系
  • 外部可启动exported或有intentFilter的Activity
  • 可外部启动的Activity需要拒绝服务漏洞
  • 尽量不暴露Activity,为暴露的Activity加权限控制
  • Intent的Extras读取时要捕获异常
CATALOG
  1. 1. 如何跨App启动Activity?有哪些注意事项
  2. 2. 面试官视角
  3. 3. 题目剖析
  4. 4. 共享uid的App
  5. 5. 使用intentFilter
  6. 6. 为允许外部启动的Activity加权限
  7. 7. 拒绝服务漏洞
  8. 8. 本节回顾