控制第三方 API 对 Android 系统资源的访问?
Control access of third party APIs to Android system resources?
当您在您的 Android 项目中导入第三方 APIs(数据包依赖注入、生成的库、源代码等)时,您假设它们的行为与宣传的一样。大多数时候代码不是开源的,它被混淆或只是编译。
有没有办法控制这个API对网络、联系人、视频和音频、位置等重要系统资源的访问?
最好的方法是为他们提供 proxy
系统资源。这将有以下好处:
- 可以通过在代理中提供模拟数据来执行测试
- 您的应用程序不必提供 API 不需要的所有权限,并且代理会允许 API 不会因为通过模拟授予的权限而中断
- 过滤可能在本地收集的有关用户的数据并发送到 API 家庭存储库,用于广告或恶意目的
由于用户定义的活动和服务无法控制第三方 API 的服务,甚至无法阻止他们直接调用任何 Android public 界面.
该解决方案不应要求 root 访问权限,因为您不希望在您自己的应用程序范围之外进行此控制。
这个问题的内容链接到几个问题,这些问题解决了这个广泛问题的特殊性(log data of content providers, network requests - 这让我在研究它的答案时想到了这个问题)
注意:简短的回答是否定的,但可以有足够的创意(也许使用原生级别的 hack 可以解决这个问题 - idk)
在名为 com.myproxies(例如 MediaRecorder、SensorManager、Camera、java.net.HTTPURLConnection)的包中为您想要保护的所需 android 资源构建代理 class。您需要实现您正在模拟的 class 的所有 public 方法的代理,并且您需要实现逻辑以允许访问(转发到适当的方法)或拒绝。一个有用的步骤是检查 caller of the method。
如果您打算导入源代码,请重构代码以将包更改为您的代理(proguard 可以提供帮助)。
如果您正在使用一个库,获取 Jar Jar Links,一个可以轻松重新打包 Java 库并将它们嵌入到您自己的发行版中的实用程序,并更改包在您的包中用作代理的 class 的内部名称。
如果你使用的是Maven或者Gradle包依赖注入,你也可以尝试导入Jar Jar Links,在编译时进行包重构(不太确定能不能做) )
不幸的是,根据我自己的经验,API很容易坏掉,而且需要大量的体力劳动。
当您在您的 Android 项目中导入第三方 APIs(数据包依赖注入、生成的库、源代码等)时,您假设它们的行为与宣传的一样。大多数时候代码不是开源的,它被混淆或只是编译。
有没有办法控制这个API对网络、联系人、视频和音频、位置等重要系统资源的访问?
最好的方法是为他们提供 proxy
系统资源。这将有以下好处:
- 可以通过在代理中提供模拟数据来执行测试
- 您的应用程序不必提供 API 不需要的所有权限,并且代理会允许 API 不会因为通过模拟授予的权限而中断
- 过滤可能在本地收集的有关用户的数据并发送到 API 家庭存储库,用于广告或恶意目的
由于用户定义的活动和服务无法控制第三方 API 的服务,甚至无法阻止他们直接调用任何 Android public 界面.
该解决方案不应要求 root 访问权限,因为您不希望在您自己的应用程序范围之外进行此控制。
这个问题的内容链接到几个问题,这些问题解决了这个广泛问题的特殊性(log data of content providers, network requests - 这让我在研究它的答案时想到了这个问题)
注意:简短的回答是否定的,但可以有足够的创意(也许使用原生级别的 hack 可以解决这个问题 - idk)
在名为 com.myproxies(例如 MediaRecorder、SensorManager、Camera、java.net.HTTPURLConnection)的包中为您想要保护的所需 android 资源构建代理 class。您需要实现您正在模拟的 class 的所有 public 方法的代理,并且您需要实现逻辑以允许访问(转发到适当的方法)或拒绝。一个有用的步骤是检查 caller of the method。
如果您打算导入源代码,请重构代码以将包更改为您的代理(proguard 可以提供帮助)。
如果您正在使用一个库,获取 Jar Jar Links,一个可以轻松重新打包 Java 库并将它们嵌入到您自己的发行版中的实用程序,并更改包在您的包中用作代理的 class 的内部名称。
如果你使用的是Maven或者Gradle包依赖注入,你也可以尝试导入Jar Jar Links,在编译时进行包重构(不太确定能不能做) )
不幸的是,根据我自己的经验,API很容易坏掉,而且需要大量的体力劳动。