Android зависимость пользовательского класса для aidl - PullRequest
0 голосов
/ 29 апреля 2020

Итак, у меня есть следующая структура проекта:

.
├── Central
│   ├── app
│   │   ├── build.gradle
│   │   └── src
│   ├── build.gradle
│   ├── gradle.properties
│   └── settings.gradle
└── Client
    ├── app
    │   ├── build.gradle
    │   └── src
    ├── build.gradle
    ├── gradle.properties
    └── settings.gradle

В приложении Central я определяю службу и вместе с ней интерфейс AIDL. В AIDL одна из функций возвращает пользовательский объект (который расширяет Parcelable). В клиентском приложении я поместил точно такой же файл AIDL (в том же пакете в каталоге src/aidl). Я пытаюсь импортировать пользовательский класс, объявив зависимость от gradle приложению Central.

Вот настройки клиента. Gralde

rootProject.name='Client'
include ':app'

include ":Central"
project(":Central").projectDir = file('../Central/app')

Приложение клиента / build.gralde:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.Patel.Cli3n5"
        minSdkVersion 28
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation  project(path: ':Central', configuration: 'default')
}

и файл aidl (присутствует в обоих приложениях):

package com.Patel.Central;

import android.graphics.Bitmap;
parcelable Info;

interface MusicCentral {
     List<Info> getAllSongsInfo();
     Bitmap getSongImage(int songNum);
}

И обратите внимание, что класс Info определен в пакете com.Patel.Central.

Когда я пытаюсь создать клиентское приложение, я получаю следующую ошибку:

error: cannot find symbol
    @Override public java.util.List<com.Patel.Central.Info> getAllSongsInfo() throws android.os.RemoteException

Таким образом, проблема в том, что существует пользовательский класс, и мне нужно импортировать из приложения это находится в другом каталоге.

1 Ответ

0 голосов
/ 29 апреля 2020

Вам необходимо определить оба файла

Info.java

и

Info.aidl отдельный aidl файл для Info. java

с одинаковым именем пакета как на клиентском, так и на удаленном приложениях.

означает, что пакет должен иметь

MusicCentral.aidl
Info.java
Info.aidl

в пакете com.Patel.Central.

...