5

我正在开发一个具有庞大源代码库的 android 应用程序。我不喜欢我的应用程序需要不少权限,我开始怀疑有一些已弃用且不再需要。

问题是 -如何确定是否如此,哪些真的被弃用了?

我试图删除可疑权限并重新编译它(使用 Eclipse Juno),并希望编译后将其标记为错误或警告,但事实并非如此。

还尝试在代码上显式运行 Lint,但它也没有检测到它。

该应用程序已编译并在设备上运行,我猜当相关 API 将在某些代码流中调用时,这将引发带有 AccessDenied 的运行时异常。

是否有任何有效的方法来检测该 API,而无需浏览所有源代码或在多个场景中运行应用程序?

谢谢!

4

4 回答 4

1

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

于 2012-07-03T02:23:42.443 回答
0

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

于 2012-08-23T14:17:22.690 回答
0

Unfortunately, the short answer is no. There's no automated way to detect it. The only tried and true methods are removing permissions one by one and testing, or stepping through your code to inspect.

There should be, though. I suspect it wouldn't be that hard to write a script that reads your project code and determines the needed permissions. The hardest part would be keeping it up to date with API changes.

于 2012-07-02T16:25:40.793 回答
0

我认为你正在朝着错误的方向前进。

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

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

于 2012-07-03T02:29:15.433 回答