Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将同级项目资源添加到Android资产中,而无需紧密耦合 问题_Java_Android_Gradle_Android Gradle Plugin - Fatal编程技术网

Java 将同级项目资源添加到Android资产中,而无需紧密耦合 问题

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希望资产驻留

我正在使用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
文件夹下。有没有办法避免这种情况?