Компилировать исходный код только при компиляции для Android? - PullRequest
1 голос
/ 04 октября 2019

Я делаю игру как для Android, так и для ПК, и мне нужно импортировать эксклюзивные вещи для Android вместе с методами записи, содержащими код, который работает только с Android

Я хочу иметь возможность делать что-то вроде этого,так что в случае моей компиляции для не 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;
}

1 Ответ

1 голос
/ 04 октября 2019

Вы не можете условно импортировать подобные классы.

Вместо этого вы должны инкапсулировать код, который выполняется как на рабочем столе, так и в 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");
}

Затем создайте экземпляр этих классов в коде, специфичном для платформы, и передайте его в свой класс эскиза.

...