我正在尝试使用 Android Studio (gradle 8) 和公共 github 库创建一个 Android 应用程序:AndroidUSBCamera。
我不认为我面临与库相关的问题,而是依赖/gradle/android studio 问题。
我在build.gradle
中导入了这样的库implementation 'com.github.jiangdongguo.AndroidUSBCamera:libausbc:3.3.3'
我可以在 Android Studio 中导航导入库的 kotlin 源代码:
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
}
}
class CameraUVC(ctx: Context, device: UsbDevice) : MultiCameraClient.ICamera(ctx, device)
{
//[...] skipping code
}
/**
* 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'
没有意义(尝试了不同的方法 - 例如使用显式转换 - 相同的错误)。如果我尝试运行该应用程序,它工作正常......
我可以导入和使用 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)
问题1
您遇到的第一个错误似乎与您返回的类型有关 [CameraUVC] 未被识别为 [MultiCameraClient.ICamera] 的子类型
确保 CameraUVC 正确导入为 MultiCameraClient 的内部类
问题2
无法识别 com.jiandg.usb.USBMonitor 包,这可能是由于库未正确公开此包 将此依赖项添加到您的 build.gradle 以包含“libuvc”项目
implementation project(':libuvc')
这可能会解决您的问题,并且重复的类错误表明它们可能是版本之间的冲突,您应该删除直接的 AAR 包含并应该通过依赖项使用库