首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unity3D安卓插件中使用时找不到Firebase ML工具包类

在Unity3D安卓插件中使用时找不到Firebase ML工具包类
EN

Stack Overflow用户
提问于 2019-12-14 17:01:15
回答 1查看 531关注 0票数 1

Firebase MLKit,特别是人脸检测的视觉组件,目前还没有官方的unity3D插件。我正在尝试创建一个android模块,然后通过Unity的AndroidJavaClass界面作为插件导入到Unity3D中。(构建模块->将classes.jar复制到unity的Plugin/Android文件夹)。我的问题是插件工作正常,但每当它试图调用与Firebase相关的任何行时,我都会收到下面的错误。有人知道问题出在哪里吗?我认为这只是一个简单的依赖问题,但我在修复它时遇到了麻烦。

被呼叫的线路。它是直接从官方文档复制的,如果我将模块作为android studio中的原生android应用程序,它就可以工作。

代码语言:javascript
复制
import com.google.firebase.ml.vision.face.FirebaseVisionFaceDetectorOptions;

FirebaseVisionFaceDetectorOptions options =
        new FirebaseVisionFaceDetectorOptions.Builder()
                .setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
                .setLandmarkMode(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
                .setClassificationMode(FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS)
                .build();

产生的错误(仅作为unity3d插件)

代码语言:javascript
复制
12-14 16:15:17.934 29990 30008 E Unity   : AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/ml/vision/face/FirebaseVisionFaceDetectorOptions$Builder;
12-14 16:15:17.934 29990 30008 E Unity   : java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/ml/vision/face/FirebaseVisionFaceDetectorOptions$Builder;
12-14 16:15:17.934 29990 30008 E Unity   :      at com.danq.faceplugin.FaceD.Init(FaceD.java:14)
12-14 16:15:17.934 29990 30008 E Unity   :      at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
12-14 16:15:17.934 29990 30008 E Unity   :      at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
12-14 16:15:17.934 29990 30008 E Unity   :      at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95)
12-14 16:15:17.934 29990 30008 E Unity   :      at android.os.Handler.dispatchMessage(Handler.java:102)
12-14 16:15:17.934 29990 30008 E Unity   :      at android.os.Looper.loop(Looper.java:227)
12-14 16:15:17.934 29990 30008 E Unity   :      at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20)
12-14 16:15:17.934 29990 30008 E Unity   : Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.ml.vision.face.FirebaseVisionFaceDetectorOptions$Builder" on path: DexPathList[[zip file "/data/app/com.Danq.FaceBeatsUnityGame-4MLAWSIBswXt4mPwAhlr_Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.Danq.FaceBeatsUnityGame-4MLAWSIBswXt4mPwAhlr_Q

模块的gradle文件

代码语言:javascript
复制
apply plugin: 'com.android.library'


android
        {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"


    defaultConfig
            {
        minSdkVersion 27
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

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

            repositories {
                google()
                jcenter()

            }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.firebase:firebase-ml-vision:18.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation 'com.google.gms:google-services:4.2.0'
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-17 01:16:48

这里发生的情况是,您的库具有一些依赖项,这些依赖项将在纯Android Studio应用程序中捕获。不幸的是,这些依赖关系不会通过你的aar档案被捕获或传达,并且需要在Unity的构建系统中复制。

我认为解决这个问题的最好方法是为你准备Unity generate a mainTemplate.gradle文件。如果您让Play Services解析器修补您的mainTemplate.gradle (带有图像的I cover this step by step here),您的所有依赖项将集中在一个位置。

然后,您应该能够转到mainTemplate.gradle文件的dependencies部分并添加

代码语言:javascript
复制
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.firebase:firebase-ml-vision:18.0.1'

就像你在图书馆里做的那样。请确保不要在// Android Resolver Dependencies Start// Android Resolver Dependencies End之间放置依赖项,也不要删除**DEPS**

现在,还有一些其他的选择。您可以将库构建到本地maven存储库中,并以这种方式包含依赖项。由于我自己没有这样做,所以我不能提供详细的说明。但是,你可以包含你的库和它的传递依赖just like the Firebase plugin itself (很抱歉使用了两次相同的链接)。

您也可以尝试将库的implementation更改为api,但我不认为这实际上会将依赖项嵌入到生成的aar归档中。如果你这样做了,并且在不修改上面的gradle文件的情况下解决了这个问题,一定要让我知道!您可以在apiimplementation here上找到更多信息。

我希望这能帮到你!

--帕特里克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59333696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档