Подключить службу с приложением через AIDL в AOSPAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Подключить службу с приложением через AIDL в AOSP

Сообщение Anonymous »

Я пытаюсь подключить службу HAL к приложению пользователя через AIDL. Я попробовал подключить приложение к обслуживанию без удачи. Как правильно подключить пользовательское приложение к службе HAL C ++ через AIDL? Что я делаю не так?package org.mwe.service;

interface IDummy {
String simple();

String complex(in byte[] from, out byte[] to, in String original, in int numeric);
}
< /code>
service < /h4>
Я добавил (по большей части, копировав интерфейс Vibrator AIDL) и реализацию по умолчанию. Полный код сервиса доступен здесь.
Service RC - < /p>
service mwe_dummy.service /vendor/bin/org.mwe.service.dummy-default myprefix
class hal
user root
group root
interface aidl org.mwe.service.IDummy/default
< /code>
Я могу подтвердить, что служба работает, выполняя команду < /p>
> adb shell service check org.mwe.service.IDummy/default
Service org.mwe.service.IDummy/default: found
< /code>
Я не могу напрямую выполнять методы через < /pbr /> > adb shell service call org.mwe.service.IDummy/default 1
Result: Parcel(NULL)
< /code>
app < ​​/h4>
Я обнаружил два подхода к соединению AIDL и реализовал оба: < /p>

с помощью intent < /li>
Прямое подключение < /li>
< /ol>
Полное код KOTLIN доступен здесь. Через намерение < /h5>
несколько упрощенный код подключения с помощью намерения заключается в следующем (почти точная копия примера) < /p>
class MainActivity : AppCompatActivity() {
private var service: IDummy? = null
private var isServiceBound = false
private val connection =
object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, service: IBinder) {
service = IDummy.Stub.asInterface(service)
isServiceBound = true
}
override fun onServiceDisconnected(className: ComponentName) {
service = null
isServiceBound = false
}
}
private fun initConnectionIntent() {
if (isServiceBound) return
Intent(IDummy::class.java.name).apply { setPackage(getPackageName()) }.let {
bindService(it, connection, Context.BIND_AUTO_CREATE)
Log.d(TAG, "binding")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initConnectionIntent()
}
}
< /code>
с намерениями, построенным различными способами < /p>
Intent(IDummy::class.java.name).apply { setPackage(getPackageName()) }
// or
Intent(IDummy::class.java.name).apply {
setPackage(getPackageName())
setAction("org.mwe.service")
// or
Intent().apply {
component = ComponentName("org.mwe.service.IDummy", "default")
}
< /code>
Журнал показывает сообщение < /p>
ActivityManager: Unable to start service Intent { ... } U=0: not found
< /code>
прямое соединение < /h5>
несколько упрощенный код прямого подключения является следующим образом < /p>
class MainActivity : AppCompatActivity() {
private var service: IDummy? = null
private fun initConnectionDirect() {
val checkService =
Class.forName("android.os.ServiceManager")
.getMethod("checkService", String::class.java)
val bdr = checkService.invoke(null, "org.mwe.service.IDummy/default")!! as IBinder
service = IDummy.Stub.asInterface(bdr)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initConnectionDirect()
}
}

Пример кода использует ServiceManager , который помечен в Android, поэтому этот трюк используется для доступа к нему.I org.mwe.app: type=1400 audit(0.0:579): avc: denied { call } for scontext=u:r:untrusted_app:s0:c117,c256,c512,c768 tcontext=u:r:mwe_dummy_default:s0 tclass=binder permissive=1 app=org.mwe.app
E AndroidRuntime: FATAL EXCEPTION: main
E AndroidRuntime: Process: org.mwe.app, PID: 3505
E AndroidRuntime: java.lang.IllegalArgumentException
E AndroidRuntime: at android.os.BinderProxy.transactNative(Native Method)
E AndroidRuntime: at android.os.BinderProxy.transact(BinderProxy.java:573)
E AndroidRuntime: at org.mwe.service.IDummy$Stub$Proxy.simple(IDummy.java:123)
E AndroidRuntime: at org.mwe.app.MainKt$AppHost$1$1$1.invoke(Main.kt:53)
E AndroidRuntime: at org.mwe.app.MainKt$AppHost$1$1$1.invoke(Main.kt:50)
E AndroidRuntime: at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke-k-4lQ0M(Clickable.kt:987)
E AndroidRuntime: at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke(Clickable.kt:981)
E AndroidRuntime: at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
E AndroidRuntime: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E AndroidRuntime: at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:179)
E AndroidRuntime: at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:168)
E AndroidRuntime: at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:474)
E AndroidRuntime: at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:508)
E AndroidRuntime: at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:497)
E AndroidRuntime: at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:368)
E AndroidRuntime: at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:665)
E AndroidRuntime: at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:544)
E AndroidRuntime: at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:566)
E AndroidRuntime: at androidx.compose.foundation.AbstractClickablePointerInputNode.onPointerEvent-H0pRuoY(Clickable.kt:947)
E AndroidRuntime: at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:795)
E AndroidRuntime: at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:317)
E AndroidRuntime: at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E AndroidRuntime: at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E AndroidRuntime: at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:185)
E AndroidRuntime: at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:104)
E AndroidRuntime: at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:113)
E AndroidRuntime: at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1577)
E AndroidRuntime: at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1528)
E AndroidRuntime: at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1467)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3175)
E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2827)
E AndroidRuntime: at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:502)
E AndroidRuntime: at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1890)
E AndroidRuntime: at android.app.Activity.dispatchTouchEvent(Activity.java:4199)
E AndroidRuntime: at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:70)
E AndroidRuntime: at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:460)
E AndroidRuntime: at android.view.View.dispatchPointerEvent(View.java:14838)
E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6430)
E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6231)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5704)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5762)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5728)
E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5893)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5736)
E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5950)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5709)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5762)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5728)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5736)
E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5709)
E AndroidRuntime: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8661)
E AndroidRuntime: at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8612)
E AndroidRuntime: at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8578)
E AndroidRuntime: at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8792)
E AndroidRuntime: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:259)
E AndroidRuntime: at android.os.MessageQueue.nativePollOnce(Native Method)
E AndroidRuntime: at android.os.MessageQueue.next(MessageQueue.java:335)
E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:161)
E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7941)
E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553)
E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
E AndroidRuntime: Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@fb28f23, androidx.compose.runtime.BroadcastFrameClock@eb5cc20, StandaloneCoroutine{Cancelling}@859d9d9, AndroidUiDispatcher@5780f9e]


Подробнее здесь: https://stackoverflow.com/questions/792 ... dl-in-aosp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Подключить службу с приложением через AIDL в AOSP
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Создание файла AIDL для связи с сервисом в AOSP
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Создание файла AIDL для связи с сервисом в AOSP
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • AOSP 15 Стройте отсутствующий aidl/android.security.comernement interface (ServiceManager не может его начать)
    Anonymous » » в форуме Android
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • AOSP 15 Стройте отсутствующий aidl/android.security.comernement interface (ServiceManager не может его начать)
    Anonymous » » в форуме Android
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»