0

Android マニフェストで「エクスポート」と宣言されているサービスを実装した Android アプリケーションがあります。このエクスポートされたサービスを開始しようとしているこのデバイスには、さまざまなアプリケーションが多数インストールされています。それらはすべて、このコードを使用して、エクスポートされたサービスを開始しています。

    MY_ACTION = "com.phantom.foobar.action.xyz"
    PACKAGE_NAME = "com.phantom.foobar"
    CLASS_NAME = "com.phantom.foobar.IpcService"  


    public static void startSaveUrlAction(Context context, String foo, String bar) {
        Intent intent = new Intent(MY_ACTION);
        intent.setClassName(PACKAGE_NAME, CLASS_NAME);
        intent.putExtra(FOO, foo);
        intent.putExtra(BAR, bar);
        context.startService(intent);
    }

マニフェスト ファイルのアプリケーション タグ内のサービスの説明:

<service
    android:name=".IpcService"
    android:exported="true" />

問題は、起動できるアプリケーションと起動できないアプリケーションがあることです。そのサービスを開始できないアプリケーションの logcat 情報は次のとおりです。

01-02 16:04:05.574  1385  2698 W ActivityManager: Unable to start service Intent { cmp=another.music.player/com.phantom.foobar.IpcService } U=0: not found
01-02 16:04:05.575  1385  2699 W ActivityManager: Unable to start service Intent { cmp=another.music.player/com.phantom.foobar.IpcService } U=0: not found

私が間違っていなければ、{ cmp=another.music.player/com.phantom.foobar.IpcService }これは で構成されるコンポーネント名です{ cmp = package_name/class_name }PACKAGE_NAMEasを指定しましcom.phantom.foobarたが、間違った意図を開始しようとしています。この場合、another.music.playerエクスポートされたサービスを開始しようとしているアプリケーションのパッケージ名です。

これは、一部のアプリケーションでのみ発生します。なぜこれが起こっているのか知りたいです。アプリケーションがパッケージ外でインテントを開始するのを防ぐことができる属性または何か(Androidマニフェストで設定できるある種の属性)はありますか?

抽象化された詳細:

他のアプリケーションのメソッドをフックできる Xposed Framework を使用しています。Android API からメソッドをフックしました。そのメソッドが他のアプリケーションで呼び出されるたびに、そのアプリケーションから情報を抽出し、そのコンテキストを使用してエクスポートされた IntentService を開始com.phantom.foobarし、上記の関数を使用してアプリケーションに情報を渡します。

4

0 に答える 0