如何在 AIDL 中传递枚举?

问题描述

我正在尝试使用 AIDL 传递枚举,它正在包装 Parcelable,但仍然无法编译并出现以下错误:

build.gradle

我的文件如下:

项目级别// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = "1.4.20" repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.1.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" def nav_version = "2.3.3" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }

build.gradle

模块级别plugins { id 'com.android.application' id "androidx.navigation.safeargs" id 'kotlin-android' id 'kotlin-kapt' id 'kotlin-parcelize' id "com.google.protobuf" version "0.8.12" } preBuild { doFirst { new ProcessBuilder("java","$rootDir/scripts/Zipper.java") .directory(new File("$rootDir")) .start() .waitFor() } } android { compileSdkVersion 29 buildToolsVersion "30.0.2" defaultConfig { applicationId "uk.ac.liverpool.altphone" minSdkVersion 21 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro' } } buildFeatures { viewBinding true } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } tasks.withType(JavaCompile) { configure(options) { options.debug = true options.warnings = true options.compilerArgs << '-Xlint:all' << '-parameters' << '-g:source,lines,vars' } } } dependencies { implementation 'androidx.activity:activity-ktx:1.2.0-beta02' implementation 'androidx.appcompat:appcompat:1.3.0-alpha02' implementation 'androidx.constraintlayout:constraintlayout:2.1.0-alpha1' implementation 'androidx.core:core-ktx:1.5.0-alpha05' implementation 'androidx.datastore:datastore:1.0.0-alpha06' implementation 'androidx.datastore:datastore-core:1.0.0-alpha06' implementation 'androidx.fragment:fragment-ktx:1.3.0-beta02' def nav_version = "2.3.3" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation 'androidx.recyclerview:recyclerview:1.2.0-beta01' def room_version = "2.3.0-alpha03" implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" implementation 'androidx.startup:startup-runtime:1.0.0' implementation 'com.google.android.material:material:1.3.0-alpha04' implementation "com.google.protobuf:protobuf-javalite:3.10.0" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1' } protobuf { protoc { artifact = "com.google.protobuf:protoc:3.10.0" } generateProtoTasks { all().each { task -> task.builtins { java { option 'lite' } } } } }

app/src/main/aidl/uk/ac/liverpool/altphone/service/IAltPhoneServiceInterface.aidl

AIDL 文件 // IAltPhoneServiceInterface.aidl package uk.ac.liverpool.altphone.service; // Declare any non-default types here with import statements import uk.ac.liverpool.altphone.service.Mode; interface IAltPhoneServiceInterface { oneway void setMode(in Mode mode); oneway void updateSettings(in Mode mode,in int headphone); oneway void stop(); }

app/src/main/java/uk/ac/liverpool/altphone/service/AltPhoneService.kt

Kotlin 文件 package uk.ac.liverpool.altphone.service import android.app.Service import android.content.Intent import android.os.IBinder import android.os.Parcelable import kotlinx.parcelize.Parcelize import uk.ac.liverpool.altphone.R class AltPhoneService : Service() { override fun onBind(intent: Intent): IBinder { return null!! } } @Parcelize public enum class Mode : Parcelable { SINGLE,ALTERNATE; companion object { fun getModeByID(id: Int): Mode? = when (id) { R.id.single_mode_mi -> SINGLE R.id.alternate_mode_mi -> ALTERNATE else -> null } } }

class Restaurant():
  '''A simple representation of a restaurant'''

  def __init__(self,restaurant_name,cuisine):
    '''Initialize attributes to describe restaurant'''
    self.name = restaurant_name
    self.cuisine = cuisine

  def describe_restaurant(self):
    message = "The name of Jenny's favourite restaurant is " + self.name + ". It serves "
    if self.cuisine == 'Thai' or 'thai':
      return message + 'Thai food.'
    elif self.cuisine == 'pizza':
      return message + 'pizza.'
    else:
      pass



restaurant = Restaurant('Pizza Hut','pizza')

print(restaurant.describe_restaurant())

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)