com.example.library.http.RestService というサービスを含む com.example.library というライブラリがあります。ライブラリのマニフェストには、次の要素が含まれています。
<uses-permission android:name="com.example.library.permission.REST_PERMISSION" />
<permission
android:name="com.example.library.permission.REST_PERMISSION"
android:protectionLevel="signature" />
<application ...>
<service
android:name="com.example.library.http.RestService"
android:enabled="true"
android:permission="com.example.library.permission.REST_PERMISSION"
android:exported="true" >
<intent-filter>
<action android:name="com.example.library.LAUNCH_REST_SERVICE" />
</intent-filter>
</service>
</application>
com.example.testapp というアプリでそのライブラリを使用しています。TestApp のマニフェストは、上記のライブラリとまったく同じ要素を繰り返します。これは、 4.0.3を実行しているエミュレーターと4.2.2を実行している nexus 4 では正常に動作しますが、 2.3.5を実行している HTC Wildfire S で使用しようとすると、サービスを起動しようとした瞬間に失敗します。ただし、次の例外があります。
java.lang.SecurityException: Not allowed to start service Intent
{ act=com.example.library.LAUNCH_REST_SERVICE pkg=com.example.testapp (has extras) }
without permission com.example.library.permission.REST_PERMISSION
次のコードでサービスを起動しています。
Intent intent = new Intent();
intent.setAction( "com.example.library.LAUNCH_REST_SERVICE" );
intent.setPackage( "com.example.testapp" );
[setting some extras]
startService( intent );
私は助けを求めて Web を探し回っており、関連する Stack Overflow の質問をすべて読みましたが、不足しているものは何も見つかりません。