Будут ли удалены коды дартс для iOS при компиляции для Android?

Я использую флаттер для написания приложения для платформ iOS и Android. Некоторые функции не совпадают.

Например:

if (Platform.isIOS) {
    int onlyForiOS = 10;
    onlyForiOS++;
    print("$onlyForiOS");
}
else if (Platform.isAndroid){
    int onlyForAndroid = 20;
    onlyForAndroid++;
    print("$onlyForAndroid");
}

Когда я создам для платформы Android, будут ли коды для iOS скомпилированы в двоичный файл? Или их просто убрали для оптимизации? Из соображений безопасности я не хочу, чтобы какие-либо коды для iOS появлялись в двоичном файле Android.

Я не претендую на звание эксперта в этом, но я думаю, что ваш скомпилированный код Android также будет содержать часть if (для iOS)

CopsOnRoad 25.05.2019 20:18

@CopsOnRoad Так это предположение? Я действительно ожидаю надежного ответа, потому что мне нужно использовать альтернативные планы для кода, если то, что вы сказали, верно.

RockingDice 27.05.2019 08:40

Вас могут заинтересовать github.com/dart-lang/sdk/issues/33920 и stackoverflow.com/questions/52822353/…

jamesdlin 27.05.2019 08:49

@RockingDice, это мое предположение, Реми тоже упоминает об этом.

CopsOnRoad 27.05.2019 09:34

@jamesdlin Спасибо за ссылки. Они действительно полезны.

RockingDice 27.05.2019 10:12
5
5
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это зависит от того, какое выражение вы оцениваете.

Встряхивание дерева Dart основано на постоянных переменных. Таким образом, следующее будет встряхиваться деревом:

const foo = false;
if (foo) {
  // will be removed on release builds
}

Но этот пример не будет:

final foo = false;
if (foo) {
  // foo is not a const, therefore this if is not tree-shaked
}

Теперь, если мы посмотрим на реализацию Platform.isAndroid, мы увидим, что это нет константа, но вместо этого геттер.

Следовательно, мы можем сделать вывод, что if (Platform.isAndroid) не будет встряхиваться деревом.

Я думаю, что ответ на этот вопрос для моего случая понятен, я найду другой способ. Но на самом деле от кодов зависит, нужно ли делать встряхивание дерева для других ситуаций. Было бы лучше, если бы вы могли поделиться дополнительной информацией о части «Dart tree-shaking на основе постоянных переменных» :)

RockingDice 27.05.2019 10:09

Другие вопросы по теме