我正在编写一个使用this library here的Android Unity插件,但是在获取此依赖项并导出整个插件的JAR文件时遇到了问题。
我一直关注this video here,了解如何使插件能够在Android和Unity之间进行双向通信。
以前在this post中,在将Unity Classes JAR文件放入Android Studio时遇到了问题,因此我可以构建插件。上面的视频显示,不是将最终的AAR输出导入到Unity中,而是从中间目录获取JAR文件,然后将其导入。当所有代码都是独立的,但是此特定的JAR文件没有我需要包含的usb-serial-for-android库时,此方法有效。
视频显示在Gradle脚本中包含一个include语句,其中包含classes.jar
,其中包含JAR导出上的Unity代码。我之所以不包括它,是因为它没有它就可以工作,并且会造成我在previous post中遇到的重复类问题。
现在,我正在尝试在Gradle脚本中找出如何包括我拥有的com.github.mik3y:usb-serial-for-android:v2.1.0
依赖关系,但是我不确定如何。视频中的上一个include语句包括一个本地JAR文件。我不知道如何像我需要的那样使用github存储库来做到这一点。
我已经尝试了最终的AAR输出,因为它应该包含usb-serial-for-android,但是我再次遇到Unity代码的重复类问题。
apply plugin: 'com.android.library'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
minSdkVersion 17
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'
}
}
afterEvaluate {
assembleRelease.finalizedBy(exportJar)
}
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.github.mik3y:usb-serial-for-android:v2.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
task exportJar (type: Copy) {
from('build/intermediates/packaged-classes/release/classes.jar')
include('com.github.mik3y:usb-serial-for-android') ???
into('../../../UnityProjects/Coffee/Assets/Plugins/Android')
rename('classes.jar', 'expressoplugin-release.jar')
}
task deleteOldJar (type: Delete) {
delete '../../../UnityProjects/Coffee/Assets/Plugins/Android/expressoplugin-release.jar'
}
exportJar.dependsOn(deleteOldJar)
我注意到,当include
语句使用“ com.github.mik3y:usb-serial-for-android”而不是“ classes.jar”时,exportJar任务似乎并没有默默地失败。 / p>
奇怪的是,这个include语句甚至没有将classes.jar
中的所有内容放入导出的JAR中,因此我不确定我希望它做什么。
当我尝试实例化包含usb-serial-for-android代码的Java对象而执行导出而没有任何include语句时的错误日志。
2019-12-18 15:35:38.669 25826-25860/com.vcom3d.coffeeunity E/Unity: AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/hoho/android/usbserial/util/SerialInputOutputManager$Listener;
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/hoho/android/usbserial/util/SerialInputOutputManager$Listener;
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at java.lang.Class.forName(Class.java:379)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
at android.os.MessageQueue.next(MessageQueue.java:405)
at android.os.Looper.loop(Looper.java:174)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
Caused by: java.lang.ClassNotFoundException: com.hoho.android.usbserial.util.SerialInputOutputManager$Listener
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at java.lang.Class.forName(Class.java:379)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.c(Unknown Source:0)
at com.unity3d.player.UnityPlayer$e$2.queueIdle(Unknown Source:72)
at android.os.MessageQueue.next(MessageQueue.java:405)
at android.os.Looper.loop(Looper.java:174)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
at UnityEngine.AndroidJNISafe.CheckException () [0x00091] in <6084548bc46840b9ba4aa48ad550def0>:0
at UnityEngine.AndroidJNISafe.NewObject (System.I
```