gpt4 book ai didi

android - 控制第三方 API 对 Android 系统资源的访问?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:22 24 4
gpt4 key购买 nike

当您在您的 Android 项目中导入第三方 API(数据包依赖注入(inject)、生成的库、源代码等)时,您假设它们的行为与宣传的一样。大多数时候,代码不是开源的,而是经过混淆处理或只是编译过的。

有没有办法控制这个API对网络、联系人、视频和音频、位置等重要系统资源的访问?

最好的方法是为他们提供系统资源的代理。这将带来以下好处:

  • 可以通过在代理中提供模拟数据来执行测试
  • 如果不需要,您的应用程序将不必提供 API 所需的所有权限,并且代理会通过模拟已授予的权限来允许 API 不会因权限而中断
  • 过滤可能在本地收集的有关用户的数据并发送到 API 主页存储库,用于广告或恶意目的

由于用户定义的 Activity 和服务无法控制第三方 API 的服务,甚至无法阻止它们直接调用任何 Android 公共(public)接口(interface),因此我未能找到这样的解决方案如何实现。

该解决方案不应要求 root 访问权限,因为您不希望在您自己的应用程序范围之外进行此控制。

这个问题的内容链接到几个问题,这些问题解决了这个广泛问题的特殊性( log data of content providersnetwork requests - 这让我在研究它的答案时想到了这个问题)

注意:简短的回答是否定的,但一个人可以足够有创意(也许进行原生级别的 hack 可以解决这个问题 - idk)

最佳答案

在名为 com.myproxies(例如 MediaRecorder、SensorManager、Camera、java.net.HTTPURLConnection)的包中为您想要保护的所需 android 资源构建代理类。在代理中,您需要实现所有公共(public)方法您正在模拟的类,您需要实现逻辑以允许访问(转发到适当的方法)或拒绝。一个有用的步骤是检查 caller of the method .

  • 如果您打算导入源代码,请重构代码以将包更改为您的代理(proguard 可以提供帮助)。

  • 如果您使用的是图书馆,请获取 Jar Jar Links ,一个实用程序,可以轻松地重新打包 Java 库并将它们嵌入到您自己的发行版中,并在内部将包名称更改为包中将用作代理的类的名称。

  • 如果你使用的是Maven或者Gradle包依赖注入(inject),也可以尝试引入Jar Jar Links,在编译时进行包重构(不太确定能不能做到)

不幸的是,正如我自己所经历的那样,很容易破坏 API,并且涉及大量的体力劳动。

关于android - 控制第三方 API 对 Android 系统资源的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com