У меня есть приложение и служба, которые связаны локальным сокетом на родном уровне (C ++ / JNI). Оба были построены с использованием целевого уровня API 21 и работали в течение многих лет. Недавно я обновил их до уровня API 23 и
теперь я постоянно получаю эту ошибку:
10-31 10:07:37.413 5760-5760/com.mycompany.myservice W/pool-151-thread: type=1400 audit(0.0:47942): avc: denied { connectto } for path=00494E554445565F4C4F43414C5F534F434B45545F53455256455200 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=unix_stream_socket permissive=0
10-31 10:17:44.373 4221-4221/com.mycompany.myapp W/pool-1-thread-1: type=1400 audit(0.0:72703): avc: denied { connectto } for path=00494E554445565F4C4F43414C5F534F434B45545F53455256455200 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=unix_stream_socket permissive=0
Эти строки постоянно повторяются в logcat, и больше ничего нет.
Из этого вывода видно, что и приложение, и служба считаются ненадежными. Я знаю, что API 23 запрашивает разрешения во время выполнения, а служба и приложение запрашивают и получают разрешения на запись, чтение и интернет.
Мой сервисный манифест:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myservice"
android:versionCode="1"
android:versionName="2.03.0018.104"
>
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="23" />
<!-- Required for TCP IPC and for local socket -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- Copy data to SDcard + recording + temporary files -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application android:label="@string/app_name">
<!-- Attacher hack -->
<activity
android:name="mynamespace.myservice$myserviceLauncher"
android:theme="@android:style/Theme.NoDisplay"
android:launchMode="singleInstance"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" android:resource="@xml/device_filter" />
</activity>
<!-- Detacher hack -->
<receiver android:name="mynamespace.myservice$Detacher">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" android:resource="@xml/device_filter" />
</receiver>
<service android:name="mynamespace.myservice">
</service>
</application>
</manifest>
Манифест моего приложения:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.myapp"
android:versionCode="1"
android:versionName="2.01.00.06"
>
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:hardwareAccelerated="true"
android:allowBackup="true"
android:largeHeap="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:logo="@drawable/icon"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Есть ли способ добавить и мою службу, и мое приложение в список доверенных приложений ?
Или как еще можно заставить работать локальное соединение через сокет?