问题描述
我正在尝试使用 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 (将#修改为@)