5

私は、巨大なソース コード ベースを持つ Android アプリケーションに取り組んでいます。私のアプリケーションが多くのパーミッションを必要とするのは好きではありません.

問題は、そうであるかどうかを判断する方法と、実際に推奨されていないものはどれかということです。

疑わしいパーミッションを削除して (Eclipse Juno を使用して) 再コンパイルしようとしましたが、コンパイルされたものがエラーまたは警告としてマークされることを望みましたが、そうではありませんでした。

また、コードに対して Lint を明示的に実行しようとしましたが、それも検出されませんでした。

アプリケーションはコンパイルされ、デバイス上で実行されます。コード フローで関連する API が呼び出されると、AccessDenied で実行時例外がスローされると思います。

すべてのソース コードを参照したり、複数のシナリオでアプリケーションを実行したりせずに、その API を検出する効果的な方法はありますか?

ありがとう!

4

4 に答える 4

1

-Djava.security.debug=access,failure を指定してコードを実行します。これにより、実際に使用されているすべての権限が表示されます。

于 2012-07-03T02:23:42.443 に答える
0

残念ながら、短い答えはノーです。それを自動的に検出する方法はありません。唯一の実証済みで真の方法は、アクセス許可を 1 つずつ削除してテストするか、コードをステップ実行して検査することです。

しかし、あるはずです。プロジェクト コードを読み取り、必要なアクセス許可を決定するスクリプトを作成することは、それほど難しいことではないと思います。最も難しいのは、API の変更に合わせて最新の状態に保つことです。

于 2012-07-02T16:25:40.793 に答える
0

うまく機能するかどうかはわかりませんが、カリフォルニア大学バークレー校の一部の研究者は、Android アプリをスキャンして、使用している権限を表示するプロジェクトに取り組んでいるようです。詳細については、http: //www.android-permissions.org/ をご覧ください。

于 2012-08-23T14:17:22.690 に答える
0

私はあなたがこれについて間違った方向に進んでいると主張します。

どのアクセス許可を削除できるかを尋ねる代わりに、リストを調べて、各アクセス許可が必要な理由と、アクセス許可が削除された場合に無効にする必要がある機能について、調査した正当な理由を生成します。

アクセス許可の機能を理解していれば、検索クエリを生成して、少なくとも Java コードで使用されている可能性が高い場所を見つけることは難しくありません。しかし、多くのマニフェスト (および時折の SO 回答でさえ) には、必要のないアクセス許可があります。プラットフォームがシステム以外のアプリにさえ付与しないアクセス許可の要求を目にすることは珍しくありません。

于 2012-07-03T02:29:15.433 に答える