我有一个简单的 AIDL 定义,我想在 Kotlin 代码中使用,但是当它构建时,所有使用该接口(interface)的变量都显示 Unresolved 引用错误。但是同样的AIDL在Java代码中是没有问题的。 Kotlin 支持吗?怎么解决
这是我在 src/main/aidl/中的 AIDL

// ServiceInterface.aidl
package com.example.test;

interface ServiceInterface {
    void test(String arg1);
}

和 Activity 代码是

import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.os.Bundle
import android.os.IBinder
import android.os.RemoteException
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.swiftytime.clientappcommunication.R
import com.example.test.ServiceInterface

class MainActivity : AppCompatActivity() {

    var mServiceAidl: ServiceInterface? = null
    var mIsBound = false

    private val mConnection: ServiceConnection = object : ServiceConnection {
        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            try {
                mServiceAidl = ServiceInterface.Stub.asInterface(service)
                Log.e("app", "Attached")
            } catch (e: RemoteException) {

            }
        }

        override fun onServiceDisconnected(className: ComponentName) {
            mServiceAidl = null
            Log.e("app", "Disconnected.")
        }
    }

    private fun doBindService() {
        val intent = Intent().apply {
            component = ComponentName(
                "com.example.test", "com.example.test.MyService"
            )
        }
        bindService(
            intent,
            mConnection, Context.BIND_AUTO_CREATE
        )
        mIsBound = true
        Log.e("app", "Binding.")
    }

    private fun doUnbindService() {
        if (mIsBound) {
            unbindService(mConnection)
            mIsBound = false
            Log.e("app", "Unbinding.")
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        doBindService()
    }
}

这是错误
[ERROR] [org.gradle.api.Task] e: /Volumes/Projects/AndroidProject/ClientAppCommunication/app/src/main/java/com/example/test/MainActivity.kt: (16, 23): Unresolved reference: ServiceInterface

最佳答案

几个小时后,我发现问题是buildToolsVersion 29.0.0为生成的java文件生成错误的路径,我提交了一个bug

只需更改为 buildToolsVersion 28.0.3 即可解决问题。

更新:
问题已解决,现在可以在 buildToolsVersion 29.0.1 中使用

关于java - Kotlin 是否支持 AIDL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59156304/

10-10 17:14