Android Studio:导入库的奇怪问题

问题描述 投票:0回答:1

我正在尝试使用 Android Studio (gradle 8) 和公共 github 库创建一个 Android 应用程序:AndroidUSBCamera

我不认为我面临与库相关的问题,而是依赖/gradle/android studio 问题。

我在build.gradle

中导入了这样的库

implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:3.3.3'

问题 1:编译时“假”错误

我可以在 Android Studio 中导航导入库的 kotlin 源代码:

  1. 有一个名为 ICamera 的“基础”抽象类
class MultiCameraClient(ctx: Context, callback: IDeviceConnectCallBack?) 
{
    //[...] skipping code

    /**
     * Camera strategy super class
     *
     * @property ctx context
     * @property device see [UsbDevice]
     * @constructor Create camera by inherit it
     */
    abstract class ICamera(val ctx: Context, val device: UsbDevice) : 
        Handler.Callback,
        H264EncodeProcessor.OnEncodeReadyListener 
    {
         //[...] skipping code
    }
}
  1. 有一个“派生”类 CameraUVC 扩展了 ICamera
class CameraUVC(ctx: Context, device: UsbDevice) : MultiCameraClient.ICamera(ctx, device) 
{
     //[...] skipping code
}
  1. 派生类隐式是基类变量(示例库方法)
    /**
     * Generate camera
     *
     * @param ctx context [Context]
     * @param device Usb device, see [UsbDevice]
     * @return Inheritor assignment camera api policy
     */
    protected open fun generateCamera(ctx: Context, device: UsbDevice) : MultiCameraClient.ICamera {
        return CameraUVC(ctx, device)
    }

我正在尝试在我的 java 代码中复制第 3 点:

import com.jiangdg.ausbc.camera.CameraUVC;
import com.jiangdg.ausbc.MultiCameraClient;

    protected MultiCameraClient.ICamera generateCamera(Context ctx, UsbDevice device) {
        return new CameraUVC(ctx, device);
    }

我收到此错误

Incompatible types. Found: 'com.jiangdg.ausbc.camera.CameraUVC', required: 'com.jiangdg.ausbc.MultiCameraClient.ICamera'

没有意义(尝试了不同的方法 - 例如使用显式转换 - 相同的错误)。如果我尝试运行该应用程序,它工作正常......

问题2:无法导入特定包

我可以导入和使用 MultiCameraClient 对象及其构造函数

import com.jiangdg.ausbc.MultiCameraClient;

MultiCameraClient manager = new MultiCameraClient(app, new IDeviceConnectCallBack() {
            @Override
            public void onAttachDev(@Nullable UsbDevice usbDevice) {

            }

            @Override
            public void onDetachDec(@Nullable UsbDevice usbDevice) {

            }

            @Override
            public void onConnectDev(@Nullable UsbDevice usbDevice, @Nullable com.jiangdg.usb.USBMonitor.UsbControlBlock usbControlBlock) {

            }

            @Override
            public void onDisConnectDec(@Nullable UsbDevice usbDevice, @Nullable com.jiangdg.usb.USBMonitor.UsbControlBlock usbControlBlock) {

            }

            @Override
            public void onCancelDev(@Nullable UsbDevice usbDevice) {

            }
        });

我收到此错误

error: package com.jiangdg.usb.USBMonitor does not exist

事实上我无法导入它,但我可以浏览 kotlin 源代码。

我发现我正在使用的库有自己的内部库(在github源代码中)

    implementation project(path: ':libuvc')
    api project(path: ':libnative')

看起来“api”暴露了包的内容,但“implementation”没有暴露(我可以导入libnative项目下的包;不能导入libuvc项目下的包,例如com.jiandg.usb)。

这是库配置错误吗? 也许开发人员想要隐藏某些类,但如果我需要在公共构造函数中使用它,我就会被阻止。

Android Studio 不能暴露内包吗?我可以在依赖树中看到它。

如果没有,还有其他方法显式导入libuvc包吗? 我在源代码中找到了libuvc.aar。尝试像这样导入它

implementation files('../libs/libuvc-3.2.9.aar')

我收到此错误

Duplicate class com.jiangdg.common.BaseActivity found in modules libuvc-3.2.9-runtime (libuvc-3.2.9.aar) and libuvc-3.3.3-runtime (com.github.jiangdongguo.AndroidUSBCamera:libuvc:3.3.3)

java android kotlin android-studio gradle
1个回答
0
投票

问题1

  1. 您遇到的第一个错误似乎与您返回的类型有关 [CameraUVC] 未被识别为 [MultiCameraClient.ICamera] 的子类型

  2. 确保 CameraUVC 正确导入为 MultiCameraClient 的内部类

问题2

无法识别 com.jiandg.usb.USBMonitor 包,这可能是由于库未正确公开此包 将此依赖项添加到您的 build.gradle 以包含“libuvc”项目

implementation project(':libuvc')

这可能会解决您的问题,并且重复的类错误表明它们可能是版本之间的冲突,您应该删除直接的 AAR 包含并应该通过依赖项使用库

© www.soinside.com 2019 - 2024. All rights reserved.