我正在开发一款名为Flat Out Hockey的Android游戏,使用eclipse作为IDE,Java和原生C ++。 我的问题是代码的Java部分。 由于我需要为FireTV,Google Play和OUYA构建我的游戏,因此我有不同的方法来处理每个平台上的游戏手柄输入。 一个问题是FireTV使用与Google Play和OUYA不同的“项目构建目标”,这是亚马逊为FireTV专门制作的。
这意味着我需要使用在一个构建目标下可用但不在另一个构建目标下的导入和类,并在为每个平台构建时继续在它们之间切换。
问题是,据我所知,Java中没有预处理器? 所以我不能像C ++一样做#ifdef。 这使我需要注释/取消注释或更改值的代码量超过应有的值。
我做的一个“技巧”是为亚马逊游戏手柄类创建一种模仿类,所以我只想更改导入并拥有一个具有相同名称但功能不同的类。
但还有其他问题,例如仅在Android OS 5上可用的Immersive属性。 和其他东西。
所以也许我缺少Java中的一些功能,但我真的只想在一个地方设置一个值来在不同的构建之间切换。
Java / eclipse中有类似的内容吗?
答案 0 :(得分:1)
一种方法是将项目分成几个组件:一个“核心”模块,根据公共接口(它定义)定义主要实现,然后是每个目标的模块,用于声明这些接口的实现。 / p>
因此,例如,您的核心模块可能会定义GamePad接口,然后您的FireAdapter模块将依赖于Core和Fire的API来创建FireGamePad(实现GamePad)。
然后每个模块都成为自己的构建版本,并拥有自己的可交付成果。
答案 1 :(得分:0)
你可以尝试使用java Comment Preprocessor https://github.com/raydac/java-comment-preprocessor,我做了一些Android https://github.com/raydac/java-comment-preprocessor/wiki/AndroidGradlePreprocessing用法的实验,但不是很深,预处理器是在2002年开发的,专门针对J2ME项目中的小变化而避免大量具有相同功能的类,但供应商特定部分的差异很小