ご教授お願いします:framework層のメソッドの呼び出し元アプリケーションの情報を取得する方法

1,190 views
Skip to first unread message

あきる

unread,
Nov 26, 2012, 1:16:30 AM11/26/12
to android-g...@googlegroups.com
あきると申します。
Androidの仕組みについて勉強中の学生です。

自分用に、framework層のメソッドに手を入れて、呼び出し元のアプリケーションの名前やuidを取得して、framework層のあるメソッドが、どのアプリケーションから呼ばれているのかを把握しようと試みています。
/frameworks/base/services/java/com/android/server/LocationManagerService.javaのrequestLocaitonUpdates()にuidなどを取得する処理を追記して、情報を取得したところ、

呼び出し元アプリの情報

11-24 06:15:41.362: D/LFApp_packagename(608): ac.example.android.location

11-24 06:15:41.362: D/LFApp_pid(608): 608

11-24 06:15:41.362: D/LFApp_tid(608): 608

11-24 06:15:41.362: D/LFApp_uid(608): 10040

11-24 06:15:41.362: D/LFApp_appname(608): LocationFlow


呼び出されたメソッド側で取得した情報

11-24 06:15:41.372: D/lms_packagename(87): android

11-24 06:15:41.372: D/lms_pid(87): 87

11-24 06:15:41.372: D/lms_tid(87): 98

11-24 06:15:41.372: D/lms_uid(87): 1000

11-24 06:15:41.382: D/lms_appname(87): Android System


のようになりました。

追記した処理は、以下のようになります。


//パッケージ名の取得

String packagename = mContext.getPackageName();

Log.d("lms_packagename", packagename);


//pidの取得

int pid = Process.myPid();

Log.d("lms_pid", Integer.toString(pid));


//tidの取得

int tid = Process.myTid();

Log.d("lms_tid", Integer.toString(tid));


//Process.uidの取得

int process_uid = Process.myUid();

Log.d("lms_prpcess_uid", Integer.toString(process_uid));


//uidの取得

int uid =mContext.getApplicationInfo().uid;  

Log.d("lms_uid", Integer.toString(uid));


//アプリケーション名の取得

ApplicationInfo appinfo = mContext.getApplicationInfo();

String appname = (String)mContext.getPackageManager().getApplicationLabel(appinfo);

Log.d("lms_appname", appname);


アプリケーション側に変更を加えずに、呼び出されたメソッド側で、呼び出し元のアプリケーションの情報を取得する方法はありますでしょうか?

ご存じの方がいらっしゃいましたら、教えていただければと存じます。

よろしくお願いいたします。


あきる

MORIHIRO

unread,
Nov 26, 2012, 9:46:35 AM11/26/12
to android-g...@googlegroups.com
正解は分かりませんが、とりあえず気がついたことだけでも。。。

メソッドを "直接" 呼び出しているアプリ名を取得するのであれば記載された方法で
OKだと思いますが、ログ出力結果の通り、取得しようとしているのは別プロセスで
動作しているServiceのメソッドですので、Binderとかを調べる必要があると思います。


2012年11月26日月曜日 15時16分30秒 UTC+9 あきる:

あきる

unread,
Nov 26, 2012, 10:37:39 AM11/26/12
to android-g...@googlegroups.com
MORIHIROさま

あきるです。
ご返信、ありがとうございました。
手詰まりになってしまっていたので、手がかりをいただけて、とても有難かったです。
Binderから調べてみます。
ありがとうございました!

2012年11月26日月曜日 23時46分35秒 UTC+9 MORIHIRO:

MORIHIRO

unread,
Nov 26, 2012, 7:05:20 PM11/26/12
to android-g...@googlegroups.com
ちなみに、Service側じゃなくって直接呼び出してる以下のメソッドの方で
呼び出し元を取得するのでは駄目なんでしょうか?
  frameworks/base/location/java/android/location/LocationManager.java
  requestLocationUpdates()

2012年11月27日火曜日 0時37分40秒 UTC+9 あきる:

ohisamallc

unread,
Nov 26, 2012, 8:05:05 PM11/26/12
to android-g...@googlegroups.com
山形のohisamaです。
山形は、雪が舞っています。
がんばろう、東北。

android1.6なんで、あれですが。
activitymanagerで動いてるアプリ取れます。
packagemanagerでuid,name辿れます。
後、psコマンドが取れます。



-----Original Message-----
From: android-g...@googlegroups.com
[mailto:android-g...@googlegroups.com]On Behalf Of あきる
Sent: Monday, November 26, 2012 3:17 PM
To: android-g...@googlegroups.com
Subject: [work] [android-group-japan: 20950] ご教授お願いします:framework層
のメソッドの呼び出し元アプリケーションの情報を取得する方法


あきると申します。
Androidの仕組みについて勉強中の学生です。


自分用に、framework層のメソッドに手を入れて、呼び出し元のアプリケーションの
名前やuidを取得して、framework層のあるメソッドが、どのアプリケーションから呼
ばれているのかを把握しようと試みています。
/frameworks/base/services/java/com/android/server/LocationManagerService.jav
aのrequestLocaitonUpdates()にuidなどを取得する処理を追記して、情報を取得した
ところ、
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られて
います。
このディスカッションをウェブ上で閲覧するには、
https://groups.google.com/d/msg/android-group-japan/-/2_v3LTg8zfoJ にアクセ
スしてください。
このグループに投稿するには、android-g...@googlegroups.com にメールを
送信してください。
このグループから退会するには、
android-group-j...@googlegroups.com にメールを送信してくださ
い。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja
らこのグループにアクセスしてください。

あきる

unread,
Nov 27, 2012, 3:50:21 AM11/27/12
to android-g...@googlegroups.com
MORIHIROさま

あきるです。
取得した情報をIntentにつめこんで、自分が作ったアプリケーションのServiceに投げようとしていたので、contextが使えるところで…という先入観(?)があって、視野が狭くなっていました。
これから試してみます!
ありがとうございました!

あきる

2012年11月27日火曜日 9時05分21秒 UTC+9 MORIHIRO:

あきる

unread,
Nov 27, 2012, 3:57:06 AM11/27/12
to android-g...@googlegroups.com
ohisamaさま

あきるです。
ご返信、ありがとうございました。
activitymanagerやpackagemanagerには(にも…)、意識が向いていませんでした。
後でいろいろ触ってみたいと思います。
ありがとうございました!

あきる

2012年11月27日火曜日 10時08分30秒 UTC+9 ohisama:
Message has been deleted

あきる

unread,
Nov 29, 2012, 5:48:17 AM11/29/12
to android-g...@googlegroups.com
MORIHIROさま

あきるです。
教えていただいた通り、
frameworks/base/location/java/android/location/LocationManager.java
  requestLocationUpdates()
で取得したら、呼び出し元のuidとpidがとれました!

ありがとうございました!

取得したuid、pidをIntentにつめこんで自分が作ったアプリのServiceに投げたかったので、
取得したuid、pidをLocationManagerServiceのrequestLocationUpdates()を呼ぶときに引数として渡そうとして、
引数の変更をするところではまっていました。。。
今、やっとできました!

ありがとうございました。
あきる

2012年11月27日火曜日 17時50分21秒 UTC+9 あきる:
Reply all
Reply to author
Forward
0 new messages