パッケージの公開設定について、ハマったので記事にしておきます。
問題の発生状況
Android 11 より前ではバインドできていたサービスが、下記の warning が出て見つからなくなった。
02-13 17:21:00.089 542 3921 W ActivityManager: Unable to start service Intent { act=com.ykato.sampleservice.ISampleService pkg=com.ykato.sampleservice } U=0: not found
アプリの構成
サービス (com.ykato.sampleservice)は apk としてインストールしてあり、それを テスターのサンプルアプリ(com.ykato.sampleservicetester)からバインドして使っていました。
原因
下記に、記載がある通り Android 11 から自動的に公開されるアプリが制限されました。
上記により、サービス (com.ykato.sampleservice)が見つけられないため、"not found" となっていました。
対応方法
別のアプリのサービスを使用する場合は、そのパッケージ名を queries 要素内の package 要素のセットに含めることで、サービスを見つけることが出来ます。
今回の場合は、サービスを使う側のサンプルアプリ(com.ykato.sampleservicetester)のマニュフェストに下記のように記述するだけです。
AndroidManifest.xml
<manifest package="com.ykato.sampleservicetester">
<queries>
<package android:name="com.ykato.sampleservice" />
</queries>
...
</manifest>