如何确定已废弃的权限?

5
我正在开发一个庞大的Android应用程序,它有很多源代码。我不喜欢我的应用程序需要很多权限,并且我开始怀疑有一些权限已经过时并且不再需要。
问题是-如何确定哪些权限真正过时了?
我尝试删除一个可疑的权限并重新编译它(使用Eclipse Juno),希望编译器将其标记为错误或警告,但它没有。
我还尝试在代码上明确运行Lint,但它也没有检测到它。
应用程序已经编译并在设备上运行,我猜当相关API在某个代码流中被调用时,它会抛出AccessDenied的运行时异常。
有没有有效的方法来检测这个API,而不必浏览所有源代码或在多种情况下运行应用程序?
谢谢!
4个回答

1

使用-Djava.security.debug=access,failure运行您的代码。这将显示实际使用的所有权限。


听起来很有趣。但我如何在我的设备上实现?应该给哪个标志?apk安装时吗? - Dekel

0

我不知道它的工作效果如何,但似乎加州大学伯克利分校的一些研究人员正在开展一个项目,扫描Android应用程序并显示它们使用的权限。更多信息请参见http://www.android-permissions.org/


0

不幸的是,简短的回答是否定的。没有自动化的方法来检测它。唯一可靠的方法是逐个删除权限并进行测试,或者逐步检查您的代码。

虽然应该有这样的工具。我怀疑编写一个脚本来读取项目代码并确定所需的权限并不难。最困难的部分将是保持其与API更改的同步。


0

我认为你的方向是错误的。

不要问哪些权限可以删除,而是逐一查看列表并生成一个经过研究的理由,说明每个权限为什么是必要的,如果删除该权限将禁用哪些功能。

如果你了解权限的作用,就不难生成搜索查询,找到至少在Java代码中使用它的更可能的位置。但是许多清单(甚至偶尔的SO答案)都有不需要的权限;请求非系统应用程序甚至无法获得的权限并不罕见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接