Когда размер ipa и apk имеет значение.

abfef193e4924eda800a520d470d9e58Для текущего проекта размер билда имеет значение. Можно, конечно, писать нативно под каждую платформу, но мне этот вариант не подходит.

 

Итак, основные требования:

 1. Кроссплатформенность (ios, android и, крайне желательно, web в любом виде)

2. Минимальный размер билда

3. Желательно что-то с невысоким порогом входа или мне уже знакомое: Unity, as3, haxe. (хотя если вы соберете что-то другое, буду рад)

Исходные данные :

  • Unity 5.2.3f1
  • Adobe Air SDK 19 (build 241)
  • Haxe 3.2.1
    • OpenFl 3.4.0
    • nme 5.5.7

Все проекты есть на github . Вся суть проекта сводится к выведению на экран одной строки «Hello world!».

В итоге я получил следующие результаты:

  • Unity
    • apk 9.8 Mb
    • ipa 10.4 Mb (размер бинаря 19.5 mb)
  • Adobe Air
    • apk 12.6 Mb
    • ipa 6.8 Mb (размер бинаря 15.9 mb)
  • Haxe openfl
    • apk 3.2Mb
    • ipa 4.2 Mb (размер бинаря 10.2 mb)
  • Haxe nme
    • apk 2.6 Mb
    • ipa 3.4 Mb (размер бинаря 9 mb)

Объективное  ли это сравнение? Нет. Юнити большой и толстый. В нем сразу все (и много-много бла-бла-бла). А haxe может вырезать все не нужное, он маленький и open source, . Но в том то и суть, что иногда нужен крайне маленький билд (все же знают, что пользователь куда охотнее скачает 4 мб чем 40мб)

Посоветуйте на чем еще можно собрать простое приложение, удовлетворяющее основным требованиям (3-й пункт не обязательно). А лучше соберите сами и расскажите в комментариях.

upd: Спасибо @andrew , для сборки openfl добавил флаг <haxeflag name=»-dce full» /> билд стал еще меньше. Но с использованием этого параметра нужно быть осторожным т.к. компилятор может вырезать что-то важное. Так что внимательно тестируйте ваше приложение.

upd2: Спасибо, 

  • WeslomPo

    К ipa еще метра четыре надо добавить.

    • Да. Согласен. Но это будет добавляться ко всем билдам не зависимо от того, на чем он был собран

      • Кирилл Федорчук

        к ipa надо не 4 метра добавлять, а распаковывать и смотреть размер
        несжатого бинарника. эплл шифрует бинарь и на маркет он идет несжатый.
        так что добавляться будет размер совсем разный

        • Правильно я понимаю, что просто распакованный ipa и будет конечным размером билда?

          • Кирилл Федорчук

            Почти. Только исполняемый код не сжимается, ассеты жмутся норм

          • Спасибо, обновил пост указав размеры бинарей (что примерно даст понять конечный размер билда, учитывая что ресурсов в hello world почти нет)

  • Sergey Batishchev

    Подозреваю, что APK на Unity собран как FAT binary (т.е. включает и x86, и ARM код). Если это отключить (и поддерживать два package), будет около 10 мегабайт.

    http://answers.unity3d.com/questions/866081/why-is-my-binary-larger-with-461.html

    Не знаком с AIR, но там может быть аналогичная ситуация.

    Также имеет смысл указать более агрессивный Stripping Level:

    http://docs.unity3d.com/Manual/iphone-playerSizeOptimization.html

    • Да, ты прав. Спасибо.
      Оставил только ARM и включи stripping level = Use micro mscorlib

      В эир только arm, перевроверил

  • Pingback: Defold. Размер билда. — Alexey Gulev()

  • до кучи:
    libGDX, вывод простой иконки в 60 Кб, Android Studio
    apk = 4 Mb

    • Замечательно, спасибо за статистику! А можешь собрать под другие платформы (сейчас вроде есть возможность)
      И я не совсем понял 60 Кб — это что?
      Можешь собрать просто armv7 apk и сказать сколько будет весить такая apk?

      • 60Кб — это размер картинки.
        остальное соберу попозже)