我正在为我的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文件中?
答案 0 :(得分:0)
好像我弄明白了这个问题。出现此错误的原因是我的库未正确打包。我的意思是库看起来好像都需要外部库,但是当我打开.jar文件看看里面有什么时,我发现它只有外部库的文件夹,它们完全是空的。
我的修复非常简单。我打开了我的.jar库并用我的手放了必要的外部库。之后,我从更新的包中创建了新的.jar,它可以工作。
对于那些选择解决此问题的方法的人,我有几点建议。我在工作中使用Macbook,并且我很难编辑.jar文件,因为每当我通过标准实用程序创建新的.jar文件时,它都无法与Unity一起使用。所以我在第二台Windows PC上使用WinRAR来制作.jar,之后一切都开始起作用了。
我希望我的提示对某些人有所帮助。 P.S。:对不起我的英语不好。