我有一个简单的 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/