Unity的Android插件中的NoClassDefFoundError

时间:2015-11-17 12:44:49

标签: java android plugins unity3d

我正在为我的Unity游戏开发Android插件。我的插件应该为我的应用程序返回GCM令牌。 我的gradle文件如下所示:

apply plugin: 'com.android.library'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        //applicationId "testproject.com.pushtoken"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            //resources {
            //    srcDir 'libs'
            //}
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.google.android.gms:play-services:8.3.0'
    compile files('libs/classes.jar')
}

task clearJar(type: Delete) {
    delete 'libs/pluginLibrary7.jar'
}

task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('plugins/')
    include('classes.jar')
    rename ('classes.jar', 'pluginLibrary7.jar')
}

makeJar.dependsOn(clearJar, build)

插件包含用于测试其功能的简单方法(如返回int值),当然它还有获取gcm令牌的方法。问题是当我尝试启动方法以接收gcm令牌时,我收到此错误:

AndroidJavaException: java.lang.NoClassDefFoundError: com.google.android.gms.iid.InstanceID

我知道问题是我的.jar库没有gms库。但是我应该如何将它包含在我的.jar文件中?

1 个答案:

答案 0 :(得分:0)

好像我弄明白了这个问题。出现此错误的原因是我的库未正确打包。我的意思是库看起来好像都需要外部库,但是当我打开.jar文件看看里面有什么时,我发现它只有外部库的文件夹,它们完全是空的。

我的修复非常简单。我打开了我的.jar库并用我的手放了必要的外部库。之后,我从更新的包中创建了新的.jar,它可以工作。

对于那些选择解决此问题的方法的人,我有几点建议。我在工作中使用Macbook,并且我很难编辑.jar文件,因为每当我通过标准实用程序创建新的.jar文件时,它都无法与Unity一起使用。所以我在第二台Windows PC上使用WinRAR来制作.jar,之后一切都开始起作用了。

我希望我的提示对某些人有所帮助。 P.S。:对不起我的英语不好。