Java 将同级项目资源添加到Android资产中,而无需紧密耦合 问题
我正在使用libGDX开发一款游戏,其项目结构类似于:Java 将同级项目资源添加到Android资产中,而无需紧密耦合 问题,java,android,gradle,android-gradle-plugin,Java,Android,Gradle,Android Gradle Plugin,我正在使用libGDX开发一款游戏,其项目结构类似于: Root project 'gdx-play' +--- Project ':android' +--- Project ':core' \--- Project ':desktop' 子项目android和desktop依赖于core 我想将我的资产保存在core项目的resources文件夹中。根据desktop中的core工作正常,因为libGDX很乐意从打包的JAR根目录加载资产。然而,在Android上,libGDX希望资产驻留
Root project 'gdx-play'
+--- Project ':android'
+--- Project ':core'
\--- Project ':desktop'
子项目android
和desktop
依赖于core
我想将我的资产保存在core
项目的resources文件夹中。根据desktop
中的core
工作正常,因为libGDX很乐意从打包的JAR根目录加载资产。然而,在Android上,libGDX希望资产驻留在打包Apk的assets
文件夹中
在项目之间没有紧密耦合的情况下,如何最好地配置我的多项目构建
可能的解决方案
一
将资产存储在core
项目中的assets
子文件夹中,以便在打包时神奇地将其保存在Apk的assets
文件夹中
二
从核心发布两个单独的JAR
;一个有类,一个有资源。或者将核心
项目一分为二。然后,在android
中,以某种方式将resources JAR中的项添加到android插件的资产中,并从类路径中删除该JAR(这样它的项就不会冗余地包含在APK中)。我不知道这是否危险
三
将android库
插件添加到core
项目中,并导出AAR。我相信这将是最兼容的android
,然而,我不知道如何才能为桌面
项目获得一个普通的JAR。我将采取两种方法之一。无论是@jake-wharton从APK创建JAR的方法,基本上都包括为库的每个版本变量创建JAR任务(跳过调试变量)
或者,我会将这些资产拉到它们自己的Android库中,比如核心资产
,在核心
中只留下java代码。这种方法的一个好处是,纯Java项目更容易进行彻底测试。Android的测试支持目前有点缺乏。为什么跳过调试变体?另外,如果我依赖于一个普通Java项目中的Android库
项目,我是否必须进行新配置以避免将AAR
文件导入我的类路径?好问题。通常,您不会对JAR的“调试”变体感兴趣。对于APK,这些变体是“可调试”的,并使用不同的证书签名。JAR没有相似之处,所以通常只使用“发布”版本是有意义的。对于第二个问题,AAR文件只是zip文件。解压缩它们,您将找到classes.jar、assets和res目录。然而,获取和创建Java项目使用的JAR和android项目使用的APK可能更容易。如果这是我的项目,我可能会遵循您的“第一个解决方案”(以及良好的命名约定以避免冲突),因为这似乎是最简单的选择。我尝试了第一个解决方案,但资产JAR中的PACKAGE-INF
包含在APK中的assets
文件夹下。有没有办法避免这种情况?