【问题标题】:Compile source code only when compiled for Android?仅在为 Android 编译时编译源代码?
【发布时间】:2019-10-04 02:28:35
【问题描述】:
我正在为 android 和 pc 制作游戏,并且必须导入 android 独有的东西以及包含仅适用于 android 的代码的 write 方法
我希望能够做这样的事情,所以在我为非android版本编译的情况下,它不会给出编译错误
boolean android = "The Android Project".equals(System.getProperty("java.specification.vendor"));
void setup(){
if (android)
importAndroid();
//other setup stuff irrelevant to the question
}
void importAndroid(){
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.content.Context;
import android.app.Activity;
}
【问题讨论】:
标签:
java
android
windows
processing
【解决方案1】:
你不能有条件地导入这样的类。
相反,您应该将在桌面和 Java 上运行的代码封装到自己的类(或多个类)中,您可以将其用作库。然后构建一个桌面应用程序和一个包含特定于一个版本的代码的 Android 应用程序。这两个特定于平台的项目都将共享代码用作库。
如果您需要从共享代码中调用特定于平台的代码,请通过接口执行此操作,这样您就不必关心共享代码中的特定于平台的代码。像这样的:
public interface Printer {
public void print(String s);
}
然后在该接口的实现中实现特定于平台的代码:
public class DesktopPrinter implements Printer {
public void print(String s) {
System.out.println(s);
}
}
public class AndroidPrinter implements Printer {
public void print(String s) {
Log.d("MyApp", s);
}
}
然后在您的处理代码中,您将只使用接口:
Printer printer;
void setPrinter(Printer printer) {
this.printer = printer;
}
void draw(){
printer.print("in draw");
}
然后在特定于平台的代码中创建这些类的实例并将其传递给您的草图类。